1、GOP S 全 球 運 維 大 會 2019上 海 站GOP S 全 球 運 維 大 會 2019上 海 站讓編譯飛起來-基于容器技術的編譯加速實踐GOP S 全 球 運 維 大 會 2019上 海 站目錄引言1容器與藍鯨容器服務2編譯與編譯加速3基于藍鯨容器服務的編譯加速平臺4GOP S 全 球 運 維 大 會 2019上 海 站利用容器技術給傳統加速編譯技術賦能,提升整體服務能力和效率引言p 容器和容器編排 容器:相比虛擬機更靈活高效的虛擬化技術,將應用以及應用運行依賴的環境打包發行,然后運行在沙箱中 容器編排:管理集群主機資源,調度部署容器并管理容器生命周期p 編譯和編譯加速 編譯:從源
2、代碼生成可執行程序的過程,CI/CD過程中的重要環節 編譯加速:充分使用系統內存和CPU等資源以及集群能力,提升編譯速度GOP S 全 球 運 維 大 會 2019上 海 站目錄引言1容器與藍鯨容器服務2編譯與編譯加速3基于容器的編譯加速平臺4GOP S 全 球 運 維 大 會 2019上 海 站p 虛擬化技術p 資源控制和隔離p 占用資源小p 啟動速度快容器GOP S 全 球 運 維 大 會 2019上 海 站p Docker將容器技術標準化,真正做到一次構建隨地運行p Docker架構 鏡像,容器 鏡像倉庫 Docker Daemon Docker Client&APIDockerGOP
3、S 全 球 運 維 大 會 2019上 海 站p BCS解決大規模主機和容器的部署和管理問題,保證服務的穩定運行,方便升級和故障恢復 底層K8S和mesos雙引擎 靈活的調度機制 容器和進程混合部署 運行時命令通道 擴展能力強藍鯨容器服務BCSGOP S 全 球 運 維 大 會 2019上 海 站p 支持容器和進程混合編排 用相對統一的方式編排進程和容器,解決傳統業務中不適合容器化或者容器化困難的模塊編排問題,并可以和容器化模塊無縫對接;進程和容器在定義上切換方便p 支持命令通道 服務運行過程中需要發送指令對服務運行狀況進行管理和調整藍鯨容器服務BCS基于mesos實現的自研服務編排引擎,能更
4、好的支持傳統應用的容器化GOP S 全 球 運 維 大 會 2019上 海 站p BCS在騰訊devops各環節中發揮著重要的作用,提升了系統的易用性和運行效率 服務構建中使用BCS調度構建容器和編譯加速容器服務 服務構建后快速利用鏡像生成測試驗證環境 編排和管理線上服務藍鯨容器服務BCSBCS開源地址:https:/ S 全 球 運 維 大 會 2019上 海 站目錄引言1容器與藍鯨容器服務2編譯與編譯加速3基于藍鯨容器服務的編譯加速平臺4GOP S 全 球 運 維 大 會 2019上 海 站p 從源代碼到可執行程序需要進行編譯,編譯過程和各步驟的輸入輸出如右圖:1.預處理2.編譯3.匯編4
5、.鏈接從hello world來看編譯過程GOP S 全 球 運 維 大 會 2019上 海 站編譯加速常用手段p 充分利用本機的內存,CPU等資源,減少編譯過程中的工作,加快IO效率和計算效率1.減少非必要的編譯:ccache2.解決IO瓶頸,充分利用內存:tmpfs3.通過并行執行充分利用本機CPU資源:make j由于本地配置差異較大,本地編譯加速的效果也存在比較大的不確定性GOP S 全 球 運 維 大 會 2019上 海 站編譯加速的意義和常用手段p 分布式編譯加速1.條件:并發,耗時,CPU占用2.舉例:distcc fastbuildIncredibuild主要依靠集群能力,在集
6、群能力穩定的情況下,能提供相對穩定的加速效果加速平臺以分布式編譯加速為核心,兼顧本地加速編譯手段GOP S 全 球 運 維 大 會 2019上 海 站p FastBuild分布式編譯1.通過網絡共享路徑同步2.分發文件的同時會分發構建工具鏈,從機環境相對統一3.網絡開銷大4.需要針對項目寫fbb文件,接入成本相對比較高5.目前分布式編譯只支持windows平臺6.無法對項目進行隔離,負載均衡不穩定傳統分布式編譯方案GOP S 全 球 運 維 大 會 2019上 海 站p Distcc分布式編譯1.通過環境變量指定從機地址2.編譯機將不同編譯文件通過網絡分發到從機進行編譯3.所有文件編譯完成后在
7、編譯機進行鏈接4.從機編譯環境必須和編譯機保持一致傳統分布式編譯方案GOP S 全 球 運 維 大 會 2019上 海 站p傳統Distcc分布式編譯弊端1.不能及時發現集群資源的變化2.不同編譯環境不能共用集群資源,造成資源浪費,管理成本高3.不同編譯任務使用相同的編譯從機,搶占式的資源使用方式,無法提供穩定的加速服務4.不同編譯任務使用的資源不隔離,存在安全風險傳統分布式編譯方案無法為大規模數量的項目提供統一的編譯加速服務GOP S 全 球 運 維 大 會 2019上 海 站目錄引言1容器與藍鯨容器服務BCS2編譯與加速編譯3基于BCS的編譯加速平臺4GOP S 全 球 運 維 大 會 2
8、019上 海 站p 目標是將不同編譯引擎和集群資源統一管理,為大量項目提供門檻低,效率高,安全穩定編譯加速服務,減小重復建設,提升整體資源利用效率p 關鍵問題 不同項目編譯環境差異大,如何適應各種環境 集群資源異構(地域,性能,系統),如何進行管理并合理分配 服務安全穩定 用戶接入門檻低 不同編譯加速引擎支持編譯加速平臺目標和核心問題GOP S 全 球 運 維 大 會 2019上 海 站p 編譯資源集群 Linux,Windows,上海,深圳.p 編譯引擎管理器 DistccManager,FastBuildManagerp 服務網關 任務設置和任務數據p 接入端工具集編譯加速平臺架構GOP
9、S 全 球 運 維 大 會 2019上 海 站p 通過mesos對集群中異構資源進行管理 Mesos slave 管理集群中單臺主機的資源 Mesos master 將集群中資源統一管理并提供給服務調度器使用p 主機屬性和資源量 主機屬性可以通過mesos slave主動上報,也可以在調度層進行設置 主機資源量由mesos slave實時上報編譯加速集群資源管理GOP S 全 球 運 維 大 會 2019上 海 站p 標準化資源單元 屏蔽不同主機的能力差異,減小調度復雜性p 資源配比靈活 CPU/Mem配比標準化基礎上動態調整,支持個性化需求p 靈活支持多樣化運行環境 clang,gcc等20
10、多個版本 個性化編譯環境編譯加速集群資源運行時容器化GOP S 全 球 運 維 大 會 2019上 海 站p 初次啟動定額分配資源,可配置p 監測每次編譯資源使用情況調整配額 正向調整:一次觸發,大幅度 逆向調整:長周期觀測,小幅度編譯加速任務資源配額管理通過監測歷史負載情況,將任務的配額調整到合適的水平GOP S 全 球 運 維 大 會 2019上 海 站p 資源配置不合理情況:項目中加入大量的代碼 項目長時間沒有進行大規模構建導致資源配額收縮p 運行時監測動態調整 容器負載監測,并行任務監測 正向調整編譯加速資源配額實時動態調整實時監測負載情況并及時調整,對異常情況下的資源配額能快速彌補G
11、OP S 全 球 運 維 大 會 2019上 海 站p 集群充裕系數 集群中剩余資源和總資源的比例關系 集群資源剩余越多,充裕系數越大,當前配額系數越大p 資源目標使用比 目的是盡量充分利用資源的同時避免資源耗盡 經驗值編譯加速集群資源充裕情況影響資源配額通過資源充裕系數,兼顧資源利用效率和滿足更多用戶需求GOP S 全 球 運 維 大 會 2019上 海 站p提前啟動容器池,即時使用p以當前使用量為基數按比例冗余p資源緊張時不冗余,恢復即時啟動機制編譯加速服務預啟動機制使用預啟動機制,使得編譯啟動時間從10秒下降到不到2秒,大大提升用戶體驗GOP S 全 球 運 維 大 會 2019上 海
12、站p 資源申請限制 Token IP,Mac白名單 項目并發限額p 資源使用限制 動態隨機端口 連接IP限制 用完即時銷毀編譯加速安全機制GOP S 全 球 運 維 大 會 2019上 海 站p 編譯器支持 Clang GCCp 編譯工具支持 Make Cmake Bazel Blade Ninja編譯加速平臺接入GOP S 全 球 運 維 大 會 2019上 海 站p 對各編譯工具對應實現對應的bk系列工具,方便用戶快速接入 Bk_make Bk_cmake Bk_bazel Bk_blade Bk_ninja編譯加速平臺接入使用舉例:Bk_make 替換make命令,只需提前對makefile做非常簡單的替換GOP S 全 球 運 維 大 會 2019上 海 站p 通過服務網關管理編譯加速任務 云端編譯環境管理和配置 編譯機遠程操作支持 安全策略管理 加速開關設置:distcc,ccache,tmpfs等 編譯環境參數編譯加速平臺接入GOP S 全 球 運 維 大 會 2019上 海 站p 公司內各業務線總計接入近300個項目超1000個任務p 目前之前distcc和fastbuild分布式編譯加速引擎p 管理集群200左右機器,提供長期穩定的編譯加速服務p 大部分項目編譯時間縮短60%以上,平均縮短約70%編譯加速平臺服務效果