日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

传统 Java 网站如何实现容器化?看看 Cars.com 如何玩转 Docker!

發布時間:2024/1/8 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传统 Java 网站如何实现容器化?看看 Cars.com 如何玩转 Docker! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景



Cars.com 是美國的汽車門戶網站,為用戶提供各種購車相關的信息和資訊,類似于國內的汽車之家。


他們之前的技術棧是比較傳統的 Java Web 結構:Java 7, ?Websphere/Weblogic, Oracle Linux, IBM 硬件,Oracle 數據庫 。開發語言包含 Java,NodeJs,Go。隨著網站宣傳的投入,Cars.com 的流量也變大了。


·????? 3000萬訪問者 / 月

·????? 470萬車輛信息

·????? 每天處理200萬張圖片請求

·????? 每天服務端處理1億次請求


問題來了,流量變大之后,傳統的架構顯得力不從心。同時,軟件交付流程也成為了瓶頸,來看看他們的痛點。


痛點


·????? 兩套操作系統和中間件

操作系統和中間件的選型不同,各自分別包含Websphere, Weblogic, Oracle Linux, Redhat Linux, AIX等等。


·????? 每套運行環境需要5份

包含開發者環境,功能測試環境,集成測試環境,性能測試環境,生產環境。


·????? 10個 Web 應用,100多個服務需要部署。


由于環境的差異性,上線流程的復雜性,導致 Cars.com 的團隊經常碰到的問題是:為什么代碼在這個環境能運行,在另外一個環境不行?久而久之為團隊帶來大量重復的定位環境問題的工作,嚴重影響了開發進度。

?

?Cars.com 總結了他們的訴求 – 實現不可變基礎設施


·????? 統一上線流程。


·????? 具備實時擴展的能力,應對高峰期流量。


·??????當服務出現問題,能夠自動回滾,自動恢復。



使用 Docker 實現不可變基礎設施


為什么選擇 Docker?


·????? 提供一致性,可預期的環境。

使用 Docker 可以屏蔽環境的差異,解決維護5份環境的痛點。


·????? 實現微服務部署。

Cars.com 底層有100多個服務,服務如果不能單獨部署,會有造成構建時間長,上線周期長,排除問題困難等問題。 實現微服務的獨立部署,可以加速軟件上線速度,降低問題排除難度。


·????? 秒級故障恢復。

Docker 作為服務的載體,具備快速銷毀,快速上線,快速回滾的能力。一旦線上服務出問題,可以快速回滾到上一個版本。


·????? 實現藍綠部署,金絲雀發布。

快速發布環境,讓一部分用戶體驗某些新功能,待功能被快速驗證得到積極的反饋之后,再進行大面積部署。


構建一個通用 Docker 鏡像


為什么需要構建通用的 Docker 鏡像?


·????? 公司內部有很多鏡像,當有新的環境需要搭建時,要把鏡像從倉庫一個一個都拷貝到開發者的機器。


·????? 多語言開發團隊,包括 JavaScript,Java,Go 等等,每種語言打包的鏡像體積過大,導致鏡像構建,下載速度慢,影響開發效率。


經過一系列實踐,Cars.com 總結出來了通用鏡像的方案:


·????? 采用 Alpine Linux 作為基礎鏡像

Alpine Linux 系統的文件大小非常小,可以達到5MB。


·????? 輕量級的容器


????- 刪除 Package Manager 里面的所有Source。


????- 在軟件安裝完之后,刪除安裝包,刪除沒有用到的依賴,刪除臨時文件。


????- 剪裁官方鏡像。剪裁 Node 鏡像,Node 官方鏡像最新版達到了649MB,他們將這個鏡像縮減到55MB。JDK 縮減到122MB,Tomcat 從357MB 縮減到181MB。

?

在裁剪鏡像大小的實踐中,Artifactory 中的 Docker info 提供了幫助,可以在 Docker info 中看到每次打包的鏡像 Layer 的實際大小,通過裁剪每層 Layer 的大小,最終達到縮小鏡像的目的。



倉庫的需求


每個團隊都有管理包的需求,開發者要管理 Jar,War,靜態文件,系統 Admin 要管理不同的 Linux 發行版,每種語言都用不同的包管理系統,維護這5,6種二進制包倉庫非常麻煩,他們使用了 Artifactory 作為一站式包管理平臺。理由:


·????? 本地搭建的倉庫

大大提升所有語言構建,打包的速度。


·????? 支持 NPM modules,Docker 注冊中心,Maven,Go。


·????? 支持 Linux 的包管理工具(RPM,Debian)。


·????? 和 Jenkins/Bamboo/MSBuild/TFS 等工具集成,收集構建信息。


·????? 元數據支持,并且提供 Rest API。


Cars.com 通過為 Docker 鏡像,War 包設置元數據,使得任何包都可以通過 Artifactory Query Language ?根據元數據,過濾出符合上線條件的包,打包到鏡像里,部署到環境上。


封裝 Docker API – PowerTrain


? ? ? 為什么要封裝Docker API?


·????? 需要即時響應快速上線,回滾,支持滾動升級,動態綁定端口。


·????? 保證開發者環境里能跑的應用,在生產環境里也能跑,實現不可變基礎設施。


· ? ? ?聲明式配置管理。


PowerTrain 的配置文件 powertrain.mk 解決的問題是將不同環境中變化的部分,作為變量,存在文件里,當需要生成某個環境時,只需將需要的變量傳遞給 PowerTrain,即可獲取對應環境所需的依賴,實現按需搭建環境。



PowerTrain 也封裝了一些 Docker 的常用操作,例如 Docker build,pull,push 等等,在這基礎之上增加的一些定制化的信息,來適應靈活的鏡像構建和部署。利用 Docker 的輕量級部署特性,實現快速搭建環境,快速上線服務。PowerTrain 的具體的實現可以在 Carsdotcom 的 Github 上找到源代碼。


持續集成流水線



·????? 開發提交代碼到 Bitbucket。


·????? Commit 觸發 Jenkins 的 Webhook, 執行構建。


·????? Jenkins 執行 PowerTrain build。


·????? 從 Artifactory 找到對應的 War 文件,基礎鏡像,構建出新的鏡像。


·??????快速搭建測試環境,使用 Docker 作為載體運行 war 包,進行測試(功能,接口,性能) 。


持續交付流水線



·????? 鏡像通過測試,會升級到 Artifactory 的生產倉庫。

·??????通過 Jenkins 觸發 PowerTrain 命令,部署到生產環境。


要部署到不同的環境,只需要執行不同的 powertrain.mk 文件,就能拉取不同的依賴,部署到不同的環境。


總結


Cars.com 通過一系列的實踐,完成了從傳統 ?Java Web 應用到容器化的轉型。得到的收獲:


·????? 使用 Docker 屏蔽之前5份環境的差異,實現一次構建,處處運行,大大減少運維中的重復性工作。使用 ?PowerTrain 的配置文件,讓上線流程腳本化,實現不可變基礎設施。


·????? 使用 Artifactory 作為多語言的本地倉庫,大大提高獲取第三方依賴,和管理自研件的效率。


· ? ? ?剪裁 Docker 鏡像,實現輕量級鏡像發布,在突發流量到來時能夠實現動態擴容,以及快速故障恢復。

作者;王青

目前任職 JFrog 中國首席架構師,之前在 IBM,HPE,愛奇藝,新浪,VIPKID 等公司做過研發和架構,是有十多年開發經驗的互聯網老兵,專注于軟件生命周期管理,微服務架構,云原生應用,容器化等領域。

歡迎轉載,但轉載請注明作者與出處。謝謝!



總結

以上是生活随笔為你收集整理的传统 Java 网站如何实现容器化?看看 Cars.com 如何玩转 Docker!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。