沒有比“可視化”更好的一個(gè)詞能概括運(yùn)維的本質(zhì),而“可視化”又應(yīng)該分成兩部分:可視化的服務(wù)交付和可視化的服務(wù)度量!
第一部分:可視化的服務(wù)交付
早期的運(yùn)維是從ITIL開始的,那個(gè)時(shí)候大家都不知道運(yùn)維是什么,幸好找到了一個(gè)IT服務(wù)最佳實(shí)踐——ITIL。開始了互聯(lián)網(wǎng)運(yùn)維的摸索之路,從CMDB、服務(wù)臺、事件管理、變更管理、可用性管理、容量管理等逐步去了解,并同步建設(shè)對應(yīng)的管理平臺。但我們很快發(fā)現(xiàn),這一完備的流程框架如果遇到了大規(guī)模運(yùn)維的情況,就無法應(yīng)對,原因在于過多的聚焦于流程以及規(guī)范,我們發(fā)現(xiàn)很難提升運(yùn)維敏捷度和精細(xì)性,并且我們還是不知道一個(gè)完整的IT服務(wù)邊界在哪兒?如何實(shí)現(xiàn)它?
不過在ITIL的實(shí)踐過程中,其實(shí)提出了一個(gè)很好的概念——IT服務(wù)。對于運(yùn)維來說,提供一種高效、一致性、透明化、面向用戶的服務(wù)是運(yùn)維的價(jià)值所在,這樣就要求運(yùn)維屏蔽其提供的服務(wù)背后的所有實(shí)現(xiàn)細(xì)節(jié)。
從運(yùn)維具體事務(wù)或者活動的角度來說,如何對其進(jìn)行一次或者多次的組合封裝,把它們變成一個(gè)完整的IT運(yùn)維服務(wù),是此時(shí)的運(yùn)維自動化重點(diǎn)方向。畢竟繁雜的運(yùn)維事務(wù)不進(jìn)一步封裝,對個(gè)人或者團(tuán)隊(duì)來說,都意味著很高的學(xué)習(xí)成本和事務(wù)執(zhí)行成本。在傳統(tǒng)的IT運(yùn)維組織中,我們能看到彼此事務(wù)之間的割裂非常明顯,比如說網(wǎng)絡(luò)、機(jī)房、服務(wù)器、應(yīng)用部署等,都是在不同的團(tuán)隊(duì)完成,彼此工作獨(dú)立進(jìn)行。在敏捷和精益運(yùn)維驅(qū)動之下,必須要求有一個(gè)集成平臺來把這些事務(wù)流調(diào)度起來,否則無法提高事務(wù)執(zhí)行的效率和質(zhì)量,真正地把運(yùn)維交付功能變成了交付服務(wù)的模式
對于如何封裝這些事務(wù)或者活動,從DevOps提倡的“自動化一切” (Auto everything)可以找到些答案,其核心的自動化主線就是面向用戶的敏捷持續(xù)交付。我把持續(xù)交付又分成兩類場景:一種是持續(xù)交付基礎(chǔ)設(shè)施,一個(gè)是持續(xù)應(yīng)用交付 (持續(xù)構(gòu)建、持續(xù)測試、持續(xù)部署、持續(xù)反饋),他們有點(diǎn)近似IAAS和PAAS的關(guān)系。
持續(xù)交付基礎(chǔ)設(shè)施在公有云IAAS平臺中得到很好的解決,利用軟件定義計(jì)算、存儲、網(wǎng)絡(luò)等技術(shù)來實(shí)現(xiàn)對上層應(yīng)用所需資源的快速交付。在私有IT環(huán)境中,當(dāng)前有大量客戶采用虛擬機(jī)方案或者私有云方案來解決交付難和慢的問題。最新的輕量級虛擬化技術(shù)Docker更是熱點(diǎn),根本的原因是把應(yīng)用的交付在鏡像級別完成,從而讓應(yīng)用交付更加快速。
持續(xù)交付軟件從代碼產(chǎn)生的那一刻就開始進(jìn)行管理,到編譯、到測試、到灰度環(huán)境驗(yàn)收再到正式環(huán)境部署,并且希望這條主線完全自動化。面向程序包的持續(xù)集成非常簡單,現(xiàn)在有很多的開源解決方案來實(shí)現(xiàn),如Jenkins、Go等,但有一種情況需要特別注意,就是程序包的配置管理問題,這個(gè)也往往是影響部署的重要因素。所以我們很多時(shí)候使用開源平臺只是為了構(gòu)建程序包,后續(xù)包及其其中的配置管理以及實(shí)例化部署,特別是大規(guī)模集群部署,都是由單獨(dú)的持續(xù)部署平臺來解決,而非之前的持續(xù)集成工具(雖然它們也支持發(fā)布),但持續(xù)部署平臺需要有和持續(xù)集成平臺無縫對接的能力。
基于軟件包的交付解決之后,我們希望交付的粒度更大,如何實(shí)現(xiàn)全應(yīng)用(從應(yīng)用的前端接入到后端存儲)的交付,此時(shí)便有了PAAS平臺和基于應(yīng)用架構(gòu)的可視化部署服務(wù)兩種方案。這兩種實(shí)現(xiàn)思路有很大的不同,我們知道完整的PAAS平臺提供了對底層公共服務(wù)的向上API統(tǒng)一抽象,比如說數(shù)據(jù)庫服務(wù)、存儲服務(wù)、Cache服務(wù)。PAAS平臺最經(jīng)典的實(shí)現(xiàn)應(yīng)該是Cloud Foudry了,國內(nèi)很多PAAS平臺基本上都是參考CF來實(shí)現(xiàn)的。阿里UC也有一個(gè)類似的PAAS平臺,示意圖如下:
而在現(xiàn)實(shí)的情況中,很少公司有能力把MySQL、MC、Fastdfs封裝公共服務(wù)供上層應(yīng)用直接調(diào)用,意味著對研發(fā)程序有著一定的要求,是否還有一種更輕量的無約束自動化方式呢?我們可以把運(yùn)維的全應(yīng)用部署轉(zhuǎn)變下思路,此時(shí)把應(yīng)用架構(gòu)中的各個(gè)部分拆解成對象組件(包含屬性和狀態(tài)),比如說機(jī)房、OS、應(yīng)用包等,全應(yīng)用部署就是這些對象的編排,類似可視化IDE編程環(huán)境。
綜上所述,運(yùn)維的自動化最終要實(shí)現(xiàn)可視化,復(fù)雜的運(yùn)維工作流必須通過可視化來表達(dá),可視化后的自動化才能讓所有人理解一致、執(zhí)行一致、結(jié)果一致。
第二部分,可視化服務(wù)度量
“除了上帝,一切人都必須用數(shù)據(jù)說話”,這是運(yùn)維人員必須恪守的信條。
最近也在進(jìn)行一個(gè)數(shù)據(jù)實(shí)踐,就是建立面向應(yīng)用的端到端數(shù)據(jù)分析體系,該體系對數(shù)據(jù)有個(gè)標(biāo)準(zhǔn)化的分層歸類,從基礎(chǔ)設(shè)施、上層組件、到應(yīng)用服務(wù)、到接口、再到用戶側(cè),基于應(yīng)用的拓?fù)浼軜?gòu),收集各類指標(biāo),統(tǒng)一到一個(gè)分析平臺中展現(xiàn),如下圖所示:
基于這套分層化的數(shù)據(jù)體系標(biāo)準(zhǔn),我們也有對應(yīng)的系統(tǒng)實(shí)現(xiàn),如下圖所示:
當(dāng)形成標(biāo)準(zhǔn)的數(shù)據(jù)采集、分析和展現(xiàn)體系之后,可以向其他應(yīng)用不斷去復(fù)制這套方案,大家只需要遵循一套數(shù)據(jù)標(biāo)準(zhǔn)即可,最后數(shù)據(jù)的采集、分析、展現(xiàn)和告警都是標(biāo)準(zhǔn)化完成。這套數(shù)據(jù)體系建設(shè)完成之后,可以在運(yùn)維的故障定位、服務(wù)優(yōu)化、架構(gòu)改進(jìn)、運(yùn)維規(guī)劃等各方面找到應(yīng)用場景。
此時(shí)有人會有疑問如何面向應(yīng)用把這些數(shù)據(jù)整合關(guān)聯(lián)起來?我們當(dāng)前是基于配置文件的靜態(tài)視圖和基于接口調(diào)用而生成的動態(tài)視圖來集成。動態(tài)調(diào)用視圖生成會復(fù)雜一點(diǎn),可以讓線上的接口調(diào)用統(tǒng)一由名字服務(wù)中心來接管調(diào)度,抽樣對接口調(diào)用進(jìn)行染色,從而生成動態(tài)的訪問關(guān)系。
以上視圖能快速發(fā)現(xiàn)和定位規(guī)模故障,但對于單個(gè)用戶的故障指標(biāo)上則應(yīng)對乏力。此時(shí)分布式Trace服務(wù)的作用就顯現(xiàn)出來了,可以借鑒Twitter的Zippkin和Google的Dapper的實(shí)現(xiàn)思路。當(dāng)前我們就結(jié)合自身的業(yè)務(wù)架構(gòu)特點(diǎn),實(shí)現(xiàn)了一個(gè)統(tǒng)一的服務(wù)調(diào)度框架和名字服務(wù)中心,在業(yè)務(wù)代碼無侵入的情況下,可以把業(yè)務(wù)調(diào)度鏈的染色數(shù)據(jù)上報(bào)和關(guān)聯(lián),實(shí)現(xiàn)對于單個(gè)問題的快速定位。
數(shù)據(jù)的可視化能力非常重要,需要在面向整體和面向某個(gè)業(yè)務(wù)流上都有實(shí)現(xiàn)。它首先體現(xiàn)出你對運(yùn)維的理解是什么樣的,從可視化Dashboard上可以看到最直接的運(yùn)維經(jīng)驗(yàn);其次基于可視化之上的數(shù)據(jù)共享,讓大家對數(shù)據(jù)的理解達(dá)成一致;最后利用一致化的可視化數(shù)據(jù)發(fā)揮運(yùn)維的驅(qū)動能力,驅(qū)動DevOps,數(shù)據(jù)的核心價(jià)值就在于此。
因此可視化的能力就代表了運(yùn)維的能力,可視化的程度越高,運(yùn)維的能力越高。