歡迎光臨
每天分享高質量文章

管中窺豹看百度的自動化運維:持續部署系統

來源:AIOps智慧運維

ID:AI——Ops

乾貨概覽

業務部署(熟稱上線)是運維領域最常見的業務型別,主要涉及線上程式碼變更、配置檔案變更(資料變更由於其高頻、大量的特點,我們已在資料傳輸文章《嗖的一下,讓資料自動生效!》中專門討論過)。一般的業務上線具有不定時操作、業務部署情況複雜、單機啟停策略複雜等特點。在手工運維時代,運維人員需要花費大量精力進行此類重覆性工作,且易於出錯。從公佈的資料顯示,Google 70%的生產事故由上線變更觸發,如何減少變更過程中人為誤操作,提供一個靈活、穩定的部署系統是運維平臺研發人員所亟需解決的問題。

基本介紹

在運維自動化的大潮下,百度運維管理平臺Noah釋出了一鍵上線部署系統——Archer。Archer致力於提供一套產品線全過程的可遷移釋出解決方案,實現一鍵完成機器初始化、服務部署、新增模組監控、新增CT任務、動態資料檔案的分發等全過程的自動操作。在操作方面,Archer提供了命令列工具作為發起一次上線的操作入口,這種設計樣式也決定了其易於整合的特點。在DevOps流水線作業中,Archer可以作為一個環節結合進整條測試釋出流水線中。另外,Archer也可作為上層服務託管平臺的底層工具鏈,為PaaS平臺提供穩定的底層部署服務。

圖1  Archer與持續部署

通用場景

在百度內部,通用的部署系統需要適用於以下場景:

  • 各業務線擁有各自的包規範,語言、框架不統一,部署策略不一致;

  • 支援分級釋出,及時攔截部署引入的線上故障;

  • 業務的多地域部署;

  • 多種網路環境及大包部署;

  • 提高自動化效率,能夠整合測試釋出自動化流水線。

後面,我們將結合上面場景,向大家介紹百度持續部署是如何實現的。

服務架構

整個系統由命令列工具、web服務、中轉服務及單機agent+部署外掛幾部分組成(如圖2所示)。使用者透過命令列工具觸發一次變更,在web端進行引數解析及任務分發,對應執行機器agent透過心跳獲取任務後,呼叫部署外掛執行實際任務。涉及大包及不同網路環境的部署會進行中轉下載。

圖2  服務整體架構

解決方案

各業務線擁有各自的包規範,語言、框架不統一,部署策略不一致

為避免雜亂無章又不規範的服務程式碼及配置檔案的目錄結構,Archer規定了一套既靈活又完整的包規範。Archer的配置檔案路徑、服務的啟停指令碼及運維命令具有固定的標準並且支援定製化,使用Archer進行部署的服務具有統一的包結構;

支援分級釋出,及時攔截部署引入的線上故障

針對分級釋出的使用場景,Archer支援串並行上線暫停點功能,可按照單實體、單機房、單地域等級別設定暫停點,並支援部署過程中進行暫停、繼續、重試、撤銷等操作;

業務的多地域部署

服務的多地域部署主要需要解決不同地域配置不同的問題。Archer提供了配置派生功能以支援多地域部署的場景。Archer支援在同一份配置檔案中設定配置變數,併在特定地域(機房)中生成特定配置值;

多種網路環境及大包部署

針對多種網路環境及大包部署的使用場景,Archer提供了部署資料中轉傳輸。採用中轉的上線在發起任務後,部分程式碼將首先被轉存至中轉機上。後面任務下發至具體機器,具體機器再從中轉機拉取需要被部署的檔案;中轉機服務也為跨網路環境的部署提供了可能,隔離網段中的機器無法訪問內網機器,透過中轉服務的“搭橋”完成了跨網段的資料傳輸;

提高自動化效率,能夠整合測試釋出自動化流水線

自動化效率方面,Archer提供了命令列工具,可接入各種指令碼、平臺。另外,Archer也可定製化單機流程:針對不同的業務場景,Archer提供了名為“operation_list” 的配置檔案,採用YAML語法。單機執行流程步驟被定製化成固定幾個種類。使用者透過簡單的配置,即可實現“啟停監控”、“啟停服務”、“資料傳輸”、“執行某些命令或指令碼”、“啟停定時任務”等上線過程中的常見操作的自由組織及編排。這種形式大大擴充套件了Archer的適用範圍。在瞭解Archer使用方法的情況下,OP幾分鐘內即可配置出適用於數十條不同產品的上線方案。

其他設計點

每次的部署流程透過web總控端的引數解析後,就被作為任務下發到每臺被部署的標的機器。當部署任務從總控端發到被部署機器上時,任務的具體執行依賴agent及一系列指令碼。因此,在部署系統的開發後期,自身的功能變更主要集中於單機部署工具。為了提高自身開發迭代效率,指令碼未採用全網部署的方案,只部署到特定外掛叢集。每次執行時,單機agent會從外掛叢集下載最新MD5,如果有變更,將重新下載最新外掛進行任務的執行。這種設計形式增強了執行端功能的可橫向擴充套件性,並且極大降低了每次自身升級的成本。每次升級只需更新一個叢集的外掛程式碼,在全部機器上即可生效。

總結

百度部署服務經歷了手工上線->Web化->開放化一系列發展行程,目前正在向智慧化逐步發展。Archer作為開放化一代的運維產品,在百度內部具有極高的使用率。期待本文的介紹能為您提供一些思路,也歡迎同行們與我們進行交流,共同促進AIOps的發展!

作者簡介:

運小博    百度高階研發工程師

負責百度通用部署系統研發工作,在部署系統架構、單機agent方面有著較為廣泛的實踐經驗。

《Linux雲端計算及運維架構師高薪實戰班》2018年05月14日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~

    *宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

    – END –


    更多Linux好文請點選【閱讀原文】

    ↓↓↓

    贊(0)

    分享創造快樂