《實(shí)戰(zhàn):阿里巴巴 DevOps 轉(zhuǎn)型后的運(yùn)維平臺(tái)建設(shè)》要點(diǎn):
本文介紹了實(shí)戰(zhàn):阿里巴巴 DevOps 轉(zhuǎn)型后的運(yùn)維平臺(tái)建設(shè),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
本文轉(zhuǎn)載自公眾號(hào)「DevOps 時(shí)代」,高效運(yùn)維社區(qū)致力于陪伴您的職業(yè)生涯,與您一起愉快的成長(zhǎng).
作者簡(jiǎn)介:
陳喻(亞松)
阿里巴巴 高級(jí)技術(shù)專家
2014年入職阿里負(fù)責(zé) Aone(持續(xù)集成,持續(xù)交付平臺(tái))研發(fā)團(tuán)隊(duì),2015年調(diào)入運(yùn)維團(tuán)隊(duì),負(fù)責(zé)交易運(yùn)維、無(wú)線運(yùn)維2個(gè)團(tuán)隊(duì),帶領(lǐng)團(tuán)隊(duì)保障日常運(yùn)維及雙11大促運(yùn)維.2016年負(fù)責(zé)中間件的 DevOps 平臺(tái)團(tuán)隊(duì),團(tuán)隊(duì)主要業(yè)務(wù)方包括淘寶、天貓和聚劃算等.個(gè)人獲得2016年雙11卓越貢獻(xiàn)獎(jiǎng).
本文根據(jù) DevOpsDays 北京站演講記錄整理而成,重點(diǎn)是關(guān)于阿里巴巴DevOps 轉(zhuǎn)型之后,運(yùn)維平臺(tái)如何建設(shè)的.
首先講一下轉(zhuǎn)型,以前的 PE 人員可以去做運(yùn)維平臺(tái),有一個(gè)很大的原因是轉(zhuǎn)型里非常重要的策略—“我是這個(gè)應(yīng)用的 Owner.”
當(dāng)時(shí),我們 CTO 跟所有研發(fā)同學(xué)說(shuō):
從轉(zhuǎn)型開(kāi)始的時(shí)候,所有的應(yīng)用要自己去做運(yùn)維,我是這個(gè)應(yīng)用的 Owner.
運(yùn)維有這一個(gè)策略以后,PE大量的日常工作就可以釋放出來(lái),就有更多的時(shí)間去做思考,去做沉淀,去做編碼,去做我們以前不曾做的事情.
本文主要分為兩大塊內(nèi)容:
第一,怎么去思考我們這個(gè)運(yùn)維平臺(tái),有一些結(jié)合運(yùn)維自身的理解,結(jié)合業(yè)務(wù)場(chǎng)景的分析,包括業(yè)界的方法論的一些思考,結(jié)合我們自身的問(wèn)題,得出來(lái)的一些最佳的實(shí)踐.
第二,介紹一下我們整體運(yùn)維平臺(tái)主要的功能.希望大家聽(tīng)我第一塊的時(shí)候就知道你怎么建設(shè)你的運(yùn)維平臺(tái),我后面做的,場(chǎng)景問(wèn)題你沒(méi)有必要按照我們這樣去設(shè)計(jì).
我們做自動(dòng)化運(yùn)維,我認(rèn)為有四大基礎(chǔ).做這個(gè)事情不做,它一直會(huì)讓你痛.
我們的標(biāo)準(zhǔn)有什么好處,讓研發(fā) follow 這個(gè)標(biāo)準(zhǔn),標(biāo)準(zhǔn)會(huì)在工具里固化.
泛監(jiān)控,不是說(shuō)傳統(tǒng)的監(jiān)控,是把線上想知道的一切都數(shù)據(jù)化,最終數(shù)據(jù)不是給人看的,是給機(jī)器去消費(fèi)的,數(shù)據(jù)是我們的生產(chǎn)資料,不是可視化,那不是我們的目標(biāo).
今天說(shuō)得太多了,非常重要,我想回答兩個(gè)問(wèn)題:
第一,CMDB 應(yīng)該放什么,一般放服務(wù)器相關(guān)的、網(wǎng)絡(luò)相關(guān)的、應(yīng)用相關(guān)的這三個(gè)維度的相關(guān)信息.
第二,經(jīng)常有人會(huì)說(shuō) CMDB 不準(zhǔn),數(shù)據(jù)不準(zhǔn)是因?yàn)槟銢](méi)有把數(shù)據(jù)生產(chǎn)和數(shù)據(jù)的消費(fèi)形成閉環(huán),如果你形成了閉環(huán),數(shù)據(jù)不準(zhǔn),只是你不敢用,很多人就是這樣的,因?yàn)槟銛?shù)據(jù)不準(zhǔn),所以我不敢用.這不是理由,你用,出了問(wèn)題,是誰(shuí)就搞誰(shuí),CMDB 就這么搞,其實(shí)方法很土,你不用這個(gè)數(shù)據(jù)永遠(yuǎn)不準(zhǔn).
最后一個(gè),我們一定要具備快速的交付能力,主要體現(xiàn)這兩個(gè)方面,第一個(gè)新開(kāi)發(fā)的能力能不能快速上線,第二是想擴(kuò)容一臺(tái)機(jī)器能不能快速擴(kuò)出來(lái).這兩個(gè)能力我抽象出來(lái)是三個(gè)東西.
持續(xù)集成里最重要的一點(diǎn)就是要推行我們的測(cè)試單測(cè)、集成測(cè)試還有系統(tǒng)測(cè)試,單測(cè)是保證自己沒(méi)問(wèn)題,集成測(cè)試是保證跟上游下游沒(méi)問(wèn)題,系統(tǒng)測(cè)試是保證整個(gè)系統(tǒng)沒(méi)問(wèn)題.
持續(xù)交付里面很關(guān)鍵的一點(diǎn),我們要去解決掉,就是它的環(huán)境一致性、配置一致性.環(huán)境一致性可以用Docker去解決,Docker 其實(shí)本身就是一種標(biāo)準(zhǔn)化的東西.
所以說(shuō)第一條用 Docker,肯定是標(biāo)準(zhǔn)化的,另外一個(gè)問(wèn)題,配置是不是一致性,是不是動(dòng)靜分離.
PS:持續(xù)部署的幾個(gè)痛點(diǎn).
第一個(gè),對(duì)你包的文件的分發(fā),大家可以看看我們阿里自己做的,是一個(gè)同學(xué)做的一個(gè)叫蜻蜓的產(chǎn)品,他是做了 SP2P,在 P2P 的基礎(chǔ)上加了一個(gè) Super,
第二個(gè),我的應(yīng)用啟動(dòng),這個(gè)說(shuō)是挑戰(zhàn),其實(shí)是我以前做這個(gè)產(chǎn)品對(duì)別人的挑戰(zhàn),很多應(yīng)用啟動(dòng)的時(shí)候要兩三分鐘,這是很有問(wèn)題的.
第三個(gè),我們部署起來(lái)以后這個(gè)業(yè)務(wù)是不是正確的,大家一定要做一個(gè) HealthCheck,不是我們運(yùn)維來(lái)做,是PE來(lái)做,一定要把這個(gè)要求說(shuō)出來(lái),執(zhí)行 HealthCheck 這個(gè)腳本.
我們的中間件研發(fā)關(guān)注穩(wěn)定性,其二是效率,其三是易擴(kuò)展,什么是中間件,大家應(yīng)該都知道,運(yùn)維研發(fā)里面我說(shuō)的這六個(gè)東西,其實(shí)每一個(gè)都是非常重要的,如果你沒(méi)做好,真的可以引起災(zāi)難性的問(wèn)題,但是還是強(qiáng)調(diào)幾個(gè)我感觸比較深的.
我們?cè)谧鐾侨轂?zāi)演練的時(shí)候,我把網(wǎng)一切,結(jié)果發(fā)現(xiàn)運(yùn)維系統(tǒng)掛了,救命的東西沒(méi)有了,怎么搞,當(dāng)然這種情況我們沒(méi)有發(fā)生過(guò).所以說(shuō)我們的運(yùn)維系統(tǒng)一定要是高可用,不一定是高并發(fā).
冪等性是分布式系統(tǒng)設(shè)計(jì)中十分重要的概念,這個(gè)也非常重要.
這個(gè)是我們做運(yùn)維最基本的一個(gè) sense,你做的任何操作是不是可控的,大家最近知道很多故障,包括亞馬遜的,其實(shí)都是一個(gè)小的誤操作.我們?nèi)绻嬲隹苫貪L,其實(shí)事情沒(méi)有這么復(fù)雜.
如果你的企業(yè)發(fā)展非??焖?你的規(guī)模性效應(yīng)已經(jīng)來(lái)了,你的運(yùn)維系統(tǒng)一定要具備很高效率,主要體現(xiàn)在什么地方,其實(shí)運(yùn)維很多地方不一定要求效率非常高,但是有幾個(gè)地方要求非常高,快速擴(kuò)容、快速部署這個(gè)效率我們要追求極致.
其實(shí)我們有時(shí)候做決策最困難的是信息不對(duì)稱,如果我去炒股,旁邊坐個(gè)專家跟我炒,如果我知道內(nèi)幕消息,他死活炒不贏我.
因?yàn)槲抑纼?nèi)幕,就知道明天要收購(gòu),這就是信息不對(duì)稱,我們今天的企業(yè),信息不對(duì)稱,部門與部門之間,子公司之間,包括系統(tǒng)與系統(tǒng)之間,信息大部分不對(duì)稱,這么多不對(duì)稱,你又不知道你的現(xiàn)狀,你又不知道你的目標(biāo).
這個(gè)是2015年11月4號(hào),那個(gè)時(shí)候雙十一剛剛搞完,我去思考,就是我想做一種能力,這個(gè)倒下的讓它舉起來(lái),這個(gè)能力把它搞起來(lái),就是不倒翁原理,我想到這樣的架構(gòu).
從最下面講,這是我們基礎(chǔ)設(shè)施,提供三種能力,集散、存儲(chǔ)、網(wǎng)絡(luò)、無(wú)論你是怎么樣搞,就是提供這三種能力.從右下角的位置上,我先畫的是一個(gè)泛監(jiān)控,它會(huì)知道系統(tǒng)、應(yīng)用等等,我把它旁邊標(biāo)了一個(gè)字,現(xiàn)狀,我要通過(guò)這個(gè)現(xiàn)狀把線上的系統(tǒng)全部數(shù)據(jù)化,然后我放到?jīng)Q策中心.
左上角有 CMDB,我們現(xiàn)在很多變更系統(tǒng),很多強(qiáng)調(diào)流程,說(shuō)實(shí)在的,其實(shí)我本人是做研發(fā)出身的,我非常抵觸流程,流程不是一個(gè)效率工具,它是阻礙效率的.
我指的流程就是說(shuō),我們故障搞完以后就是一堆的流程,流程非常阻礙效率,是質(zhì)量控制的一個(gè)工具.流程不是不要,是把流程做到系統(tǒng)里面去,讓系統(tǒng)去幫人做決策,而不是人在那里點(diǎn),天天打個(gè)電話讓你去點(diǎn),然后我們還要做到事后審計(jì).
CMDB 定義了我剛才說(shuō)的目標(biāo),我的現(xiàn)狀通過(guò)監(jiān)控拿到了,目標(biāo)也知道了,這個(gè)時(shí)候你覺(jué)得這個(gè)事情很復(fù)雜嗎,我認(rèn)為這看你怎么去做,如果你想做成人工還是做成自動(dòng)還是做成智能,都取決于這個(gè)地方.
所以我們智能里一定要具有數(shù)據(jù)的,你知不知道你的目標(biāo)是什么,所以智能對(duì)大家來(lái)說(shuō)就是我說(shuō)的決策中心里該干的事情,把目標(biāo)的數(shù)據(jù)拿到了,就能快速進(jìn)行決策.
說(shuō)個(gè)最簡(jiǎn)單的例子,通過(guò)智能分析出目標(biāo)狀態(tài)是使這個(gè)應(yīng)用有100個(gè)VM,但是現(xiàn)在狀態(tài)只有80個(gè),一看這兩個(gè)不一樣,要擴(kuò)容20臺(tái),如果系統(tǒng)做得更智能一點(diǎn),通過(guò)圖上左邊的事件中心提示我20臺(tái)負(fù)載較輕的放在哪,就可以調(diào)度過(guò)去,然后去做執(zhí)行變更.
我基于這些東西得出來(lái)兩個(gè)結(jié)論,“研發(fā)定義運(yùn)維”,“配置驅(qū)動(dòng)變更”.
為什么是研發(fā)定義運(yùn)維?
我在2015年11月時(shí)說(shuō)研發(fā)定義運(yùn)維,我取了個(gè)名字,DDO,為什么是研發(fā)定義運(yùn)維,研發(fā)最貼近業(yè)務(wù),最應(yīng)該清楚這個(gè)業(yè)務(wù)應(yīng)該具備什么樣的能力,所以說(shuō)只有研發(fā)才能夠知道這個(gè)業(yè)務(wù)KPS應(yīng)該是多少,我后面還會(huì)講去做容量預(yù)測(cè)等等這些事情,但是一般來(lái)說(shuō),它的目標(biāo)狀態(tài)是研發(fā)會(huì)去說(shuō)的,這是我這個(gè)服務(wù)上來(lái)提供多少的服務(wù)能力.
為什么是配置驅(qū)動(dòng)變更?
配置就把目標(biāo)改變一下,你隨便跟我說(shuō)一個(gè)運(yùn)維場(chǎng)景,我可以給你在這個(gè)圖里面 run 起來(lái),我們配置只需要改你的目標(biāo)狀態(tài),我把你的狀態(tài)10VM 變成15個(gè)VM.這就是我說(shuō)的研發(fā)定義運(yùn)維,配置驅(qū)動(dòng)變更,前因后果的思考就是這樣的.
精益發(fā)現(xiàn)價(jià)值
我看到的最大的感觸是價(jià)值,價(jià)值來(lái)源于用戶的需求,我們價(jià)值很多時(shí)候是來(lái)源于自己的YY,我們的價(jià)值來(lái)源于用戶.
精益對(duì)我最大的感觸就是我們要發(fā)現(xiàn)價(jià)值.我發(fā)現(xiàn)了價(jià)值,我們做的目標(biāo),很多人在定 KPI 的時(shí)候跟我講我做了 A、B、C、D 功能,我說(shuō)三個(gè)字,然后呢?
為什么要引入 Docker、kubernetes、Jenkins?你知道現(xiàn)在的痛點(diǎn)是什么嗎?如果你不能就不要做這些東西,我們往往看別人是看得最清楚的,看自己看得不清楚.
今天也有人問(wèn)我,DevOps 團(tuán)隊(duì)是該拆還是該合,我說(shuō)你面對(duì)什么樣的問(wèn)題你知不知道,你思考過(guò)沒(méi)有,你的問(wèn)題優(yōu)先級(jí)是什么,如果只給你解決一個(gè)問(wèn)題是哪個(gè),也許并不是 DevOps 團(tuán)隊(duì)拆不拆的問(wèn)題.
精益思想,什么東西是有價(jià)值的,能夠?qū)τ脩魩?lái)物質(zhì)上的或者身體上的愉悅的東西就是有價(jià)值的.
敏捷交付價(jià)值
敏捷也是對(duì)我影響很多的,很多人談敏捷,我團(tuán)隊(duì)里也搞敏捷,敏捷這種運(yùn)動(dòng)這種方法是非??孔V的,它是一系列的方法論.但是在你引入的時(shí)候,千萬(wàn)要注意,別人行的東西你不一定行,你需要的東西并不一定是敏捷.
敏捷里面,我們快速去交付價(jià)值,在引入敏捷的時(shí)候,一定要看,因團(tuán)隊(duì)而異,跟團(tuán)隊(duì)的成熟度不一樣,它的方法也不一樣,如果一個(gè)非常成熟的團(tuán)隊(duì),任何跟他講都是影響他效率的.
如果一個(gè)不成熟的團(tuán)隊(duì),你就要告訴他,一開(kāi)始啟動(dòng)會(huì)議,然后站會(huì),嚴(yán)格按著這個(gè)動(dòng)作來(lái).武功最高境界有兩種,一共是天下武功唯快不破,還有一種是無(wú)招勝有招,別人做這個(gè)事情蹲馬步了幾十年,你上來(lái)就說(shuō)無(wú)招勝有招.敏捷里我們要形成一個(gè)環(huán),持續(xù)反饋.
OODA環(huán)
OODA 環(huán),一定要形成環(huán).我看了這些東西,我所看到的東西是什么,就是形成閉環(huán),讓價(jià)值快速流動(dòng).
這是架構(gòu)圖,因?yàn)槟愕钠髽I(yè)可能不一樣,我們這個(gè)系統(tǒng)每一個(gè)小塊可能就是一個(gè)系統(tǒng).
我們的基礎(chǔ)設(shè)施是一層,二層是運(yùn)維中臺(tái),最上面一塊是要做的 PaaS 平臺(tái),這個(gè)平臺(tái)我分了幾步.
這個(gè)工具不定所有人都需要,可以解決什么問(wèn)題,機(jī)房的搬遷,湊框遷移.
我們還做了單機(jī)閉環(huán),這是騰挪工具的關(guān)鍵,如果企業(yè)發(fā)生了一定規(guī)模,這個(gè)東西一定是會(huì)需要的.
然后是彈性伸縮,就是我們的決策中心,解決什么痛點(diǎn),讓你的資源流動(dòng)起來(lái)的決策,它決定你的資源怎么去流,往哪個(gè)地方流,這個(gè)東西非常關(guān)鍵.
最后它也是說(shuō)運(yùn)維領(lǐng)域里面技術(shù)含量最深的一個(gè)地方,要搞機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等等,算法一堆的東西,我們?cè)谶@里去弄.
彈性平臺(tái)主要解決什么問(wèn)題,這是我們的架構(gòu),這個(gè)平臺(tái)不一定很多企業(yè)都需要,但是我想講個(gè)應(yīng)用場(chǎng)景就是在雙十一的時(shí)候是怎么用的.
我們建一個(gè)站點(diǎn)起來(lái)只有5000的交易能力,可以通過(guò)10分鐘時(shí)間讓它具有30000萬(wàn)的能力,快速?zèng)Q策,快速調(diào)動(dòng)起來(lái).彈性里面就是一個(gè) OODA 環(huán),拿他的數(shù)據(jù),跟應(yīng)用極限做比較,得出來(lái)一個(gè)策略中心.
彈性一般有水平伸縮、垂直伸縮,對(duì)線上去做管理,當(dāng)然我們有額度,這是比較精細(xì)化的管理,今天可能沒(méi)那么多時(shí)間分享.彈性有觀察者模式還有自動(dòng)化執(zhí)行,每次彈性完以后有一個(gè)控制臺(tái),因?yàn)殡p十一做全年壓測(cè)的時(shí)候一般情況下不看這個(gè)東西.
我剛才講的很多東西,沒(méi)有說(shuō)怎么做成本,怎么做效率,等等這些東西,但是我們做了這些事情,的確是為公司省了錢,帶來(lái)一些收益.
我們的展望,PE 轉(zhuǎn)型以后,我們是希望讓研發(fā)來(lái)使用我們的運(yùn)維,降低他運(yùn)維的復(fù)雜度,降低運(yùn)維的門檻,我們是通過(guò)系統(tǒng)化的方式來(lái)做,研發(fā)只需要把他的目標(biāo)寫出來(lái),讓運(yùn)維這個(gè)東西像山一樣沉下去,感知不到.
然后是資源的閉環(huán).規(guī)模化,現(xiàn)在PE做兩大塊,第一是規(guī)模化運(yùn)維,然后是單應(yīng)有運(yùn)維,很多人理解把線上系統(tǒng)發(fā)布到線上去,擴(kuò)容幾臺(tái),這就是單應(yīng)用運(yùn)維.其實(shí)我們應(yīng)用的藍(lán)海是規(guī)?;\(yùn)維,這會(huì)涉及到方方面面的事情.
本文講的四條,希望大家真的能夠理解:
首先:為什么 CMDB 很重要,為什么監(jiān)控很重要,為什么標(biāo)準(zhǔn)很重要;
第二:研發(fā)定義運(yùn)維,配置驅(qū)動(dòng)變更,這是我們做這個(gè)系統(tǒng)的一個(gè)最基礎(chǔ)的理念;
第三:基于目標(biāo)管理,你產(chǎn)品有沒(méi)有理念,如果沒(méi)有,我認(rèn)為這只是功能的堆砌;
第四:形成閉環(huán),讓資源流動(dòng)起來(lái),讓你的 CMDB 里的數(shù)據(jù)流動(dòng)起來(lái),讓你的資源流動(dòng)起來(lái).
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/2214.html