DevOps 的概念提出接近10年了,提升協作效率,降低開發成本,更穩健可持續的業務營運是DevOps的主旋律。阿裡巴巴是如何開展DevOps的? 阿裡集團基礎架構事業群運維中台負責人如柏,在2017杭州雲栖大會上,詳細介紹了阿裡運維體系的演進和在智能化運維方面的工作,希望能給大家帶來一些啟發和借鑒。
阿裡巴巴是怎麼看運維的?
阿裡大緻也是經曆了這麼幾個階段:從最開始的人肉運維, 到簡單的工具、自動化, 到系統化和平台的過程, 自動化到一定程度後,開始探索智能化,無人化運維這些領域, 并在阿裡的多個運維系統裡有所沉澱。
在這個演進過程中,我們始終秉承一種原則, 能用機器去做的就不要讓人去做,自動化一切可以自動化的。很多簡單重複的日常運維操作,開始由研發通過運維平台來完成。
上圖是阿裡對運維領域的大緻分層。每個層都會有不同平台/系統來承載,運維團隊整體上會幫助業務團隊搞定資源,實作高可用的架構,資源成本優化等問題。有了資源,業務就可以部署代碼,對外提供服務, 代碼上線後會有各種運作時的變更操作, 當然也會有橫向的運維操作, 比如作業系統更新,網絡更新,DNS,IP等等變更操作。監控也是分層的,橫向的有伺服器的監控,網絡監控, IDC監控, 縱向來看, 有面向業務的監控,確定系統的各種異常能被檢測到,并及時提供多種途徑的報警。當業務真的發生故障時,我們也有系統需要能及時的恢複故障,定位故障,甚至能故障自愈,故障預測等。
針對雙11這樣的大型活動,我們會做大規模全鍊路的壓測模拟,來發現各種系統異常,為大促做好充分準備。我們也有定期的故障演練系統,來不斷提升故障恢複速度。橫向,縱向之外,我們還有規模化的運維,這個在大促和業務快速擴張時非常有用。
運維是很大的一個概念,裡面有很多專業,這5個能力層次每一層就有很多産品組成。從雲效2.0-智能化運維平台(以下簡稱:StarOps)産品的角度來看, 我們可以劃分為兩個平台,基礎運維平台和應用運維平台。基礎運維平台是統一的,在阿裡有且隻有一個,内部叫StarAgent。但是應用類型比較多,每個業務都有特殊性,是以允許除了通用的“應用運維平台”外,有多個面向業務的特色的“應用運維平台”,但也都是建構在通用的“應用運維平台”之上,内部叫Normandy。
StarOps當然不會包含所有的運維能力。但對于網際網路企業或者傳統企業+網際網路的場景,大部分公司需要的是運維能力,StarOps會全部包含,主要集中在基礎運維能力(伺服器管理)到應用運維能力(PaaS平台)上。而且可以根據使用者自身的需求來自定義選擇。兩個平台本身也具備擴充能力,可以根據我們的SDK來擴充企業自身的業務特色。
除了運維平台本身外,還包含軟性的一些運維規範,故障治理的原則等。另外,我們在智能化運維方面已經有了實踐, 通過算法平台融入到了兩個平台的能力上。在界面上,我們提供Web, API,指令行工具,手機用戶端,甚至提供大屏産品。
基礎運維平台
基礎運維平台可以說是IT運維的基礎設施, 阿裡非常重視運維基礎設施的建設,這個系統是對衆多運維系統共性部分的抽象,對上層的運維業務建設至關重要。 在前面提到的5個運維能力層次中的所有系統都要依賴他, 是以重要性也尤其突出。基礎運維平台主要功能是伺服器通路的通道(指令通道、檔案通道、資料通道),職責是維護企業所有伺服器通路的安全,這裡的伺服器包括實體機、虛拟機和容器。
StarOps産品裡主要包含有三大系統:1.堡壘機 2.StarAgent 3. 蜻蜓
堡壘機
堡壘機,也可以叫跳闆機, 是伺服器通路的一道屏障。阿裡的堡壘機是全球部署的,具備統一的賬号/權限/密鑰等管理,通路控制,高危攔截,操作錄屏等功能, 最高可以承載5000人同時線上, 并通過了ISO27001等認證。
StarAgent
StarOps套件中的基礎運維平台,就是在阿裡巴巴運維多年實踐上沉澱的結果。這個産品的名字叫StarAgnet,它可以當之無愧的說是阿裡巴巴IT運維的基礎設施。
從1萬伺服器發展到10萬台,又逐漸達到百萬級伺服器,基礎設施重要性并不是一開始就被意識到的,是逐漸被發現的過程。無論是運維系統穩定性、性能、容量顯然已經無法滿足伺服器數量和業務的快速增長。在2015年我們做了架構更新,StarAgent日均的通路量從1000萬提升到了1億多,系統穩定性從90%提升到了99.995%。
穩定性另外展現在高可用上,我們内部有定期的斷網演練,任何一個機房網絡斷掉,自身服務終止影響面都控制在一定範圍,都不會對整體的穩定性産生影響, 隻要網絡、服務恢複,受影響的叢集就自動恢複。這種演練在内部是常态進行的,保證我們每個版本的代碼都保持健壯。
StarAgent 是安全的,我們有非常多的安全政策,比如指令執行的範圍控制,賬号控制,白名單、黑名單控制,高危指令審計/攔截,全鍊路加密簽名等,在阿裡内部安全部有定期的攻防演練,StarAgent無疑就是演練重點。
在阿裡内部如果說運維效率比較高,原因之一就是我們的StarAgent基本上統一了運維的通道,任何BU任何系統都不會擅自也不允許去建設自己的通道,統一的好處就是可以統一監管,同時也減少了不必要的重複建設。每個業務運維系統隻要建設自己的業務即可。
剛才提到了基礎設施影響面比較大,是以在建設的時候必須有預見性,在性能方面我也對未來5年伺服器和業務的增長作出了預估,使我們的這次架構更新至少5年内不需要再次重構, 我們可以在此架構之上建構更多的業務,不會讓穩定性和性能羁絆運維業務的發展。目前StarAgent可以滿足每分鐘55萬次調用,幾乎對外部系統沒有強依賴,資料庫、緩存即使失敗也不會對系統造成非常重大的影響。
StarAgent的架構是靈活的,新的架構是基于插件的模式,插件可以是靜态的(腳本、指令),也可以是動态的(背景服務),Agent Core 會保證這些插件執行的安全,同時又保證在一定的資源消耗之内, 否則就會殺掉(重新開機)這個插件程序,插件的開發者當然會收到消息。插件的使用者可以決定在自己的機器上(業務範圍内)運作哪些插件,或者停用哪些插件,以及插件需要的版本,預設情況下插件的版本會自動更新。預設的插件當然是平台來維護的, 目前在阿裡内部我們已經有了150多個插件,其中包括監控、日志服務、排程、檔案分發等。每個插件都可以看作是一個運維系統,而StarAgent的職責就是守護這些運維系統的執行,保證全集團伺服器和業務的安全運作。
插件的模式同時也簡化了Agent本身的運維,Agent Core 是沒有任何業務屬性的, 職責清晰簡單,隻做插件的維護和必要的自運維, 是以在版本穩定後,基本上不需要太頻繁的更新, 這也符合裝機鏡像3個月更新一次的頻率。
對于一個運維百萬級伺服器的基礎平台,本身的運維負擔也是比較重的,以前至少需要3個專職的運維,尤其是阿裡的網絡、伺服器環境比較複雜,每天答疑工作也不少。但很多工作其實可以總結出規律,提煉抽象,讓機器去做, 是以目前新版的StarAgent自運維能力已經達到95%,不再需要專職的運維了。
蜻蜓
蜻蜓是基于P2P的檔案分發系統,不管是什麼類型的業務運維都需要檔案分發,是以也是基礎設施之一。它的好處是保護資料源,加速分發速度,節約跨IDC和跨國的帶寬。
下圖是一個500MB檔案分發的對比測試,X軸是用戶端數量,Y軸是分發時長,可以看出傳統的檔案分發系統随着用戶端數量的增加,時長就會增加,而且到1200用戶端後就沒有資料了, 因為資料源已經被打爆, 在該測試中蜻蜓可以完美的支援到7000用戶端,分發時長基本保持在10秒左右。
在阿裡内部,典型的應用場景包括:軟體安裝包、配置檔案、資料檔案、靜态檔案、鏡像等。鏡像包括了實體機鏡像、虛拟機鏡像、容器鏡像。對于容器可以支援Docker,Pouch(阿裡自研的容器技術),Hyper等。架構上非常靈活,沒有侵入性,不需要對容器技術做任何改造。
進階的功能特性還包括斷點續傳、智能網絡流控、智能磁盤流控、動态壓縮、鏡像預熱等。
在阿裡内部這個系統的業務覆寫率在95%以上,月均分發量達到了15億次,容量達到3000TB以上。蜻蜓同時也是雙11背後的支撐技術,在雙11前,需要完成15GB的資料檔案分發到超過1萬台伺服器上。
應用運維平台
StarOps套件中另一個是應用運維平台,是架構在基礎平台之上的混合雲PaaS平台,在内部我們叫Normandy。
應用運維平台總體上來說是有三大組成部分: 資源管理、釋出部署、日常運維。
一個應用要正常運作,需要資源,資源不僅僅是伺服器(實體機、虛拟機、容器), 還包括網絡(VIP、SLB、DNS等),存儲,資料庫,中間件等,凡是一個應用正常運作需要的所有的實體資源和服務資源都包括。
Normandy是通過資源編排實作資源的provision(生産)的,通常也被叫做Infrastructure as Code。通過代碼的形式将一個應用需要的所有的實體資源和服務資源,以及他們之間的關系都編寫在一段類JSON的代碼裡, 并儲存在CMDB中,而且是版本化的, 也就是說資源的任何一次變更改動都會被記錄在案。 這也就形成了使用者(通常就是應用的研發)對應用部署的基礎架構(infrastrucure)的基本需求或者定義。
Normandy對于資源的需求和資源實際情況(通常稱為資源執行個體Instance)會做對比(difference),如果資源執行個體和資源的使用者的定義不同,則會觸發資源的生産(provision)直到資源的需求被滿足。這也可以被稱為自動化的資源生産,也可以被稱為資源管理的自愈。如果僅僅就伺服器來說,它的功能和Kubernates的ReplicaController是一緻的。
既然是混合雲PaaS平台當然是支援企業内部IDC的同時也支援阿裡雲,是以應用可以是部署在自有IDC也可以部署在阿裡雲,也可以一部分在自有IDC,一部分在阿裡雲上。
混合的模式适合那種初步嘗試公有雲的企業, 也适合那種在個别時間段(比如大促場景,或者壓力測試)下需要額外資源的企業,需要的時候在公有雲上“彈”(scale out),用完了再縮回來(scale in)。
釋出(Release)和部署(Deploy)其實是兩個不太一樣的概念, 釋出是使用者可見的,部署則未必。Normandy當然可以同時滿足客戶兩種不同的選擇。預設情況下部署就等同于釋出,當然使用者可以自己定制部署而不釋出應用(這種需求比較小衆)。
Normandy支援的釋出模式比較多樣,釋出政策也很多,這跟阿裡内部需求的多樣性有關。同時也支援容器釋出和非容器的釋出(我們叫基線模式)。此外,還支援動态配置或者開關類型的釋出(需要中間件支援)。在能力上則支援2萬台伺服器同時釋出,日均可以支援50萬次釋出。
在釋出上我們有運維算法平台的支援,可以做到“無人值守”釋出, 所謂的“無人值守”釋出意味着使用者不再需要盯着釋出了, 釋出系統如果發現系統有故障就會自動停止釋出并通知使用者, 如果一切正常則自動釋出完成,無需人的幹預。
運維越來越需要得到算法平台的幫助,将人的經驗“沉澱”到系統裡,不斷的累積和完善資料,并依靠算法的幫助來提高運維系統的自動化程度,讓人少犯錯,尤其是低級的錯誤。而釋出部署是很多故障造成的根源,這種故障給很多企業造成了巨大損失。如果能在這個地方堵住故障,将極大地提升企業運維穩定性。
監控
StarOps套件還提供了不同次元的監控系統,我們有基礎監控(IDC層面)、系統監控和業務監控,可以分别部署。監控系統我們也在做智能化運維探索,比如智能基線,可以讓我們徹底結束一個業務監控數十個監控配置的困擾,可以預測下一個時間點的業務走向,監控配置隻要根據這個“智能基線”來配置門檻值即可。同時我們的監控系統還具備智能故障定位的功能。
曆經阿裡紛繁複雜的業務和雙11的各種考驗,監控除了豐富的功能和穩定健壯的核心,還提供了非常炫目的視覺産品,除了傳統的PC屏外,我們還有大屏産品可以獨立部署。
除了前面提到的基礎運維平台、應用運維平台、監控、算法平台外, StarOps套件還包括了諸如掌上運維(支援IOS, Android),ChatOps等功能。
智能運維 AIOps
簡單的講運維本質是幫助業務持續穩定的運作所要做的所有維護性的工作。 在保持業務穩定性的基礎上能降低運維成本,提升運維效率,是運維系統的核心本質。
智能運維(AIOps)是需要融入在平台方方面面的。智能運維是從手工運維到自動化運維一步步走過來的一個自然的結果, 需要場景、資料和算法。
我個人對智能運維的了解是:利用運維算法實作運維的自動化,最終走向無人化運維。是以Gartner對AIOps的解釋是Algorithm IT Operations,并不是一開始以為的人工智能(Artificial Intelligence)運維。
我個人認為AIOps可以在兩方面來幫助運維:
一、穩定性:運維的本質就是維護系統的穩定性,如何能讓系統平穩的運作,變更更加穩定,故障全面治理是首要考量的,是以穩定性方面的智能運維技術演進大緻是:
異常檢測(Reactive)-> 根因分析(Root Cause Analysis)->根源定位(real time) -> 故障自愈(auto-healing)-> 故障預測(proactive)
無人值守釋出中應用的是異常檢測的算法,而智能故障定位需要用到的就是後兩種技術。
二、效率:在穩定的基礎上我們希望能看到極緻的運維的效率,極低的運維成本。
智能運維的場景很多,在運維的每層都有用武之地。每個點的微創新的累積最終會給智能運維帶來颠覆性的變化。真正實作這種專家經驗和”拍腦袋“運維模式轉變為基于算法和人工智能的自動化運維,最終走向無人化運維。
“無人化”當然短期内隻是一個“自動化程度非常高的”的代名詞,在可以看到的未來,“無人化”還是由人來幹預或者參與的,尤其是故障處理。
其實自動化被叫做“自働化”更為合理, 人和機器更多是職能上的差別,需要優勢互補,人不再做具體的操作了,由機器替代,但人依然是運維的靈魂,是運維的制定者和修改者,機器隻是執行者,機器隻是幫助人或者提醒人來完成運維操作。
總結
運維對企業很重要,可以說是核心競争力,不能讓運維拖了業務的後腿。
基礎運維平台是運維體系建設的基礎設施, 是運維成敗的關鍵。
穩定是運維的本質, 在穩定性的基礎上追求極緻的運維效率和極低的運維成本。
智能運維不能一蹴而就,必須按部就班,重在場景和資料的建設。
很多公司業務發展的非常好,但就是運維做的不好,導緻業務非常不穩定,三天兩頭出故障,一出故障半天才能恢複,一做釋出變更就交易跌0造成資損。如果長期這樣,再好的業務也會做黃。這種例子我們看到的比較多。
随着阿裡巴巴越來越重視技術,也越來越開放,運維的幾個産品會逐漸開源,同時也會有商業化的産品孵化,比如最近在做的雲效2.0-智能化運維産品StarOps,我們希望阿裡在運維領域多年來沉澱的經驗、走過的彎路,能給大家帶來些啟發,也希望StarOps産品能真正為企業的業務保駕護航。
原文釋出時間為:2017-10-27