Google工程團(tuán)隊(duì)帶頭人李聰:運(yùn)維理念與實(shí)踐
原創(chuàng)2016年4月14-15日,由51CTO傳媒主辦的WOT2016互聯(lián)網(wǎng)運(yùn)維與開發(fā)者大會(huì)在北京珠三角JW萬(wàn)豪酒店召開。秉承專注技術(shù)、服務(wù)技術(shù) 人員的理念,自2012年以來(lái),WOT品牌大會(huì)已經(jīng)成功舉辦了八屆,積累了大量的技術(shù)專家資源,獲得了廣大IT從業(yè)者和技術(shù)愛(ài)好者的一致認(rèn)可,成為了業(yè)界重要 的技術(shù)分享交流平臺(tái)以及人脈拓展平臺(tái)。
本次會(huì)議分為11個(gè)技術(shù)主題,分別是:數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用,大數(shù)據(jù)與運(yùn)維,云計(jì)算與運(yùn)維,運(yùn)維安全,移動(dòng)運(yùn)維,容器體系構(gòu)建與實(shí)踐,運(yùn)維自動(dòng)化,行業(yè)運(yùn)維、監(jiān)控與性能優(yōu)化、高可用架構(gòu)和分布式存儲(chǔ)技術(shù)。51CTO作為本次大會(huì)的主辦方,將以快速報(bào)道、現(xiàn)場(chǎng)專訪與后期視頻等形式展示這場(chǎng)盛宴。
下面是來(lái)自Google工程團(tuán)隊(duì)帶頭人李聰先生給大家?guī)?lái)的是主題為《運(yùn)維理念與實(shí)踐》的精彩演講。
李聰,在Google從業(yè)七年多,帶領(lǐng)開發(fā)和維護(hù)過(guò)多個(gè)項(xiàng)目,包括前端、后端、線下作業(yè)等。
【以下為現(xiàn)場(chǎng)演講實(shí)錄】
大家好,我叫李聰。我自我介紹一下,我工作大概七八年了,主要以開發(fā)為主。運(yùn)維也做過(guò)一些,跟最前面的幾位不是特別像,但是我今天給大家?guī)?lái)的內(nèi)容,大家會(huì)發(fā)現(xiàn)為什么我做以開發(fā)為主的,也可以給大家?guī)?lái)一些分享?等一下給大家介紹。
我的內(nèi)容跟前面有些不一樣,這里面基本上不需要大家花錢,所以盡情的聽下去。我?guī)?lái)的主題就是運(yùn)維的理念與實(shí)踐,主要是比較適合于內(nèi)部使用。只有一個(gè)目標(biāo),就是99.9999%。我相信在座大部分都是運(yùn)維方面的專家,對(duì)這個(gè)比較熟悉了,我們?cè)谧龇?wù)的穩(wěn)定性的時(shí)候,最主要談服務(wù)級(jí)別協(xié)議叫SLA。如果說(shuō)最重要的一個(gè)互聯(lián)網(wǎng)指標(biāo),就是它的可用性有多少,我們把它劃為6個(gè)級(jí)別,第一個(gè)級(jí)別最低是1個(gè)9,它的意思概念化可服務(wù)時(shí)間是在90%以上,不可服務(wù)時(shí)間是在10%以下,如果說(shuō)這個(gè)服務(wù)能達(dá)到1個(gè)9以上,它就意味著說(shuō)你宕機(jī)時(shí)間保持在36.5天以下,這是很差的服務(wù)了,不過(guò)事實(shí)證明,即使到今天還是有。比如說(shuō)有一些買火車票的網(wǎng)站,頁(yè)面一般都用不了,我覺(jué)得可能到不了一個(gè)9。
每增加一個(gè)9,就相當(dāng)于它的可用性,宕機(jī)時(shí)間縮到上一級(jí)的10%。一般比較重要一點(diǎn)的服務(wù)都要到4個(gè)9、5個(gè)9、6個(gè)9,對(duì)于重要的服務(wù),我們都是要到6個(gè)9的指標(biāo),年宕機(jī)時(shí)間在31.5秒以下。在線時(shí)間比較容易理解,用戶可以正常使用的時(shí)間,宕機(jī)時(shí)間可能就比較復(fù)雜一點(diǎn),并不是說(shuō)用戶發(fā)個(gè)請(qǐng)求,發(fā)現(xiàn)服務(wù)端有錯(cuò)誤了,這才叫宕機(jī),這不一定的。比如說(shuō)我要去打開我的一個(gè)Email,本身是幾秒鐘事情,如果搞到10分鐘,這樣就可以把它裁定為宕機(jī)了。
我現(xiàn)在給大家回顧一下歷史,我們的目標(biāo)很簡(jiǎn)單,就是要達(dá)到6個(gè)9。我們是怎么實(shí)現(xiàn)的?如果運(yùn)維不能讓我重新來(lái)一次,我應(yīng)該怎么做?我就要回顧一下歷史。首先看一下我們軟件發(fā)展起來(lái)是在80年代的時(shí)候,那個(gè)時(shí)候,我們開發(fā)流程都還是用瀑布模型,從需求、分析到設(shè)計(jì),到開發(fā)測(cè)試,最后到發(fā)布這樣一個(gè)過(guò)程,比較老的一種開發(fā)流程了。這里面有一個(gè)比較明顯的地方,在開發(fā)流程里面,前面設(shè)計(jì)一直到測(cè)試完成,在發(fā)布之前都是在一個(gè)團(tuán)體,或者說(shuō)一個(gè)公司內(nèi)完成的,但是當(dāng)?shù)桨l(fā)布的時(shí)候,還是通過(guò)比如說(shuō)光盤這種形式來(lái)發(fā)布給客戶,這種客戶包括客戶公司,甚至說(shuō)個(gè)人之類的,在這種情況下,產(chǎn)品的開發(fā)整個(gè)流程到后面的運(yùn)營(yíng)是完全分開的,整個(gè)開發(fā)測(cè)試設(shè)計(jì)的過(guò)程,在軟件開發(fā)公司,運(yùn)營(yíng)運(yùn)維就是在客戶公司部分,這兩個(gè)是完全脫節(jié)的。在80年代早期,還沒(méi)有漏洞這樣的一種說(shuō)法。舉個(gè)例子,以前有顧客向軟件開發(fā)公司反映說(shuō)他們的產(chǎn)品有問(wèn)題,結(jié)果反過(guò)來(lái)被軟件開發(fā)公司給告了,說(shuō)他們這是誹謗,告他們誹謗罪,在今天看來(lái),這是一件很可笑的事情。發(fā)布周期一般少則幾個(gè)月,多則一兩年,甚至三年,那時(shí)候沒(méi)有特別激烈的競(jìng)爭(zhēng)。在那個(gè)年代做的開發(fā)是一件很爽的事情,今天的開發(fā)者不可以想象那時(shí)候有多爽。
那個(gè)時(shí)候軟件大部分是在2個(gè)9以下,一般都是達(dá)到1個(gè)9。這里面有一個(gè)例子Windows,90年代的時(shí)候,Web軟件開始出現(xiàn)了,Web軟件出現(xiàn),開發(fā)流程依然沒(méi)有很大的變化,還是以瀑布開發(fā)的流程為主的,但是因?yàn)樗且粋€(gè)Web軟件,開發(fā)與運(yùn)維不是完全脫節(jié)的。我本來(lái)說(shuō)是在同一個(gè)公司內(nèi)部的,我做軟件開發(fā),我做維護(hù)給客戶來(lái)使用,那時(shí)候出現(xiàn)了很多軟件。在軟件開發(fā)公司,一般出現(xiàn)了Ops這樣一個(gè)組來(lái)提供這樣一個(gè)支持,不過(guò)這個(gè)時(shí)候,他仍然是兩個(gè)獨(dú)立的小團(tuán)體在公司內(nèi)部,這時(shí)候發(fā)布周期加快了,一般可以幾個(gè)月發(fā)布一次,到一年的樣子。即使到這個(gè)時(shí)候,做軟件開發(fā)還是一件比較舒服的事情,因?yàn)楹芏嗟墓ぷ鲏毫Γ芏嗟倪\(yùn)營(yíng)的壓力都是在運(yùn)維,開發(fā)者相對(duì)來(lái)說(shuō)還是比較輕松。在這個(gè)時(shí)候,很多服務(wù)是可以達(dá)到2個(gè)9的樣子。
即使到這個(gè)時(shí)候,我不知道大家有沒(méi)有印象,如果說(shuō)你在辦公室里面用一臺(tái)Windows電腦,有另外一個(gè)人走進(jìn)來(lái)開了一下燈,或者關(guān)了一下燈,你這個(gè)機(jī)器可能就宕掉了。到了00年代的時(shí)候,軟件行業(yè)發(fā)生了翻天覆地的變化,包括從90年代后期瀏覽器的競(jìng)爭(zhēng),非服務(wù)的節(jié)點(diǎn)更加穩(wěn)定。就像路由器更加穩(wěn)定,如果說(shuō)服務(wù)出了問(wèn)題,在這之前,往往大家可能會(huì)檢查一下網(wǎng)絡(luò)有沒(méi)有連接,到這個(gè)時(shí)候,大家比如說(shuō)上不了網(wǎng),他可能會(huì)到另外一個(gè)社群網(wǎng)站看一下這個(gè)服務(wù)到底有沒(méi)有問(wèn)題。
發(fā)布更加重要。因?yàn)楦?jìng)爭(zhēng)過(guò)于激烈,導(dǎo)致了所有的軟件公司壓力都非常大,他們就要不停的去發(fā)布,生產(chǎn)一些新的產(chǎn)品來(lái)吸引用戶,讓用戶滿意度更強(qiáng)。同時(shí)可靠性也增加了,后面我會(huì)解釋一下為什么。到00年代的時(shí)候,競(jìng)爭(zhēng)加劇了,產(chǎn)品發(fā)布周期變短,產(chǎn)品發(fā)布?jí)毫ψ兇?,這個(gè)時(shí)候開發(fā)與運(yùn)維的矛盾也凸顯。你不停發(fā)布新的產(chǎn)品,往往就導(dǎo)致了這個(gè)產(chǎn)品不穩(wěn)定性增加,這肯定不是運(yùn)營(yíng)商希望的樣子,它希望這個(gè)產(chǎn)品更加穩(wěn)定,開發(fā)者希望發(fā)布發(fā)布、再發(fā)布,我要一直發(fā)布下去,運(yùn)營(yíng)商就希望一直穩(wěn)定下去,所以說(shuō)這兩個(gè)角色之間是一種格斗的場(chǎng)景。這時(shí)候就出現(xiàn)DevOps這樣一個(gè)概念,DevOps是一種概念、理論與手段,來(lái)促進(jìn)開發(fā)與運(yùn)營(yíng)之間更好的合作。
魚與熊掌是不是可以兼得?我們?cè)趺礃尤プ??我們看一下怎么做的?/p>
首先有人說(shuō)堆人可以做到,我只要有錢,招更多的工程師,招更多的包括開發(fā)運(yùn)營(yíng)的工程師,這是絕對(duì)不可能的。如果你靠堆人,最多也就做到3個(gè)9到4個(gè)9,基本上就不大可能了。成套技術(shù)也是不可能的,無(wú)論這個(gè)公司技術(shù)有多強(qiáng),都不可能達(dá)到6個(gè)9的級(jí)別,5個(gè)9都很難。這時(shí)候就出現(xiàn)了這兩個(gè)團(tuán)隊(duì)之間的矛盾,運(yùn)營(yíng)就說(shuō)想盡各種各樣的辦法來(lái)拖慢發(fā)布的速度,開發(fā)者就想盡各種辦法來(lái)加快發(fā)布速度。比如說(shuō)運(yùn)營(yíng)的人說(shuō)我下個(gè)月要休假,這個(gè)月就開始不要發(fā)布了,你就等一等好不好,如果你要發(fā)布的時(shí)候,我要增加你審查的流程和審查的深度,但是另外一方面開發(fā)者就會(huì)想各種辦法,比如說(shuō)我這個(gè)只是波及到5%的用戶沒(méi)有關(guān)系的,或者我只改一個(gè)UI,做一個(gè)很小的改動(dòng),雙方就扯皮起來(lái)。我們?cè)趺礃訌氐椎慕鉀Q這種問(wèn)題?我們引入了一個(gè)概念叫做SRE,這樣一個(gè)角色,跟傳統(tǒng)的運(yùn)維,甚至說(shuō)今天很多公司運(yùn)維的概念完全不一樣。SRE的工作要來(lái)保證產(chǎn)品穩(wěn)定性,這個(gè)并不完全是他的責(zé)任。他跟開發(fā)者有一個(gè)共同目標(biāo),開發(fā)者也要有責(zé)任保證產(chǎn)品穩(wěn)定性。
怎么做到?大概從四個(gè)方面做到,我敢說(shuō)是缺一不可,只要有一個(gè)環(huán)節(jié)出了問(wèn)題,都不可能做到。
第一個(gè)就是工程方法,做軟件開發(fā)與發(fā)布、運(yùn)營(yíng)的工程方法;第二個(gè)就是組織架構(gòu),可能聽起來(lái)有點(diǎn)奇怪,組織架構(gòu)為什么會(huì)影響到產(chǎn)品的穩(wěn)定性,或者說(shuō)高可用性;再就是管理理念,最后是技術(shù)支持,當(dāng)然技術(shù)支持并不是說(shuō)它是最不重要的,這四個(gè)都非常重要,都是關(guān)鍵的因素。
我們先看一下工程方法。我們把服務(wù)劃為兩類,一類是自運(yùn)營(yíng)的服務(wù),這個(gè)服務(wù)只有開發(fā)者去開發(fā),再加上開發(fā)者去運(yùn)行,沒(méi)有SRE的直接參與。當(dāng)然還是可以得到SRE的間接支持的,但是沒(méi)有SRE的直接支持,這種服務(wù)不是我們講的重點(diǎn),這種服務(wù)一般達(dá)不了6個(gè)9,5個(gè)9就已經(jīng)不錯(cuò)了。得到SRE運(yùn)營(yíng)直接支持的服務(wù),這種服務(wù)我們是有要求的,不是說(shuō)所有的服務(wù),想達(dá)到6個(gè)9,你就跟我SRE一起配套工作。
我們這個(gè)服務(wù)的要求有幾個(gè)方面,比如說(shuō)對(duì)SRE的負(fù)擔(dān)要小,不能讓SRE花很多精力在運(yùn)營(yíng)上面,基本上可以解釋為這個(gè)產(chǎn)品要足夠好,才會(huì)得到SRE的直接支持。
另外這個(gè)服務(wù)是要非常重要,比如說(shuō)6個(gè)9還好,如果到5個(gè)9,這個(gè)產(chǎn)品一年比如說(shuō)可以損失10億美元,類似于這樣的情況。還有一個(gè)有一種法律的要求,這個(gè)就沒(méi)有辦法了,如果有法律要求一定要配備SRE的。最后就是說(shuō)有沒(méi)有SRE可以供池使用,SRE的資源池有限,我們SRE的數(shù)量非常少,相比開發(fā)者來(lái)說(shuō)。我們通過(guò)錯(cuò)誤預(yù)算來(lái)做,即使是SRE直接支持運(yùn)營(yíng)的服務(wù),前期也是至少有6個(gè)月開發(fā)者自運(yùn)營(yíng)的過(guò)程,就是說(shuō)前面6個(gè)月,SRE不會(huì)直接參與來(lái)支持這樣一個(gè)項(xiàng)目。這個(gè)服務(wù)自運(yùn)營(yíng)6個(gè)月以上以后,通過(guò)SRE的審查以后,SRE就可以去做直接的支持,當(dāng)然這支持以后,就會(huì)產(chǎn)生一個(gè)很快的迭代的過(guò)程。比如說(shuō)每一天發(fā)布,比較快的是每天發(fā)布,如果說(shuō)在發(fā)布過(guò)程中出現(xiàn)了很大的問(wèn)題,SRE有可能會(huì)退出這個(gè)團(tuán)隊(duì),說(shuō)你這個(gè)服務(wù)不行,我們要把你交回去,仍然由開發(fā)者自己去負(fù)責(zé)。錯(cuò)誤預(yù)算,剛才簡(jiǎn)單提了一下。我們首先要有一個(gè)概念,就是說(shuō)影響產(chǎn)品不穩(wěn)定的最重要的因素是什么?我相信大家可能都知道,影響產(chǎn)品不穩(wěn)定性最重要的因素就是一個(gè)產(chǎn)品發(fā)布的過(guò)程,如果這個(gè)產(chǎn)品沒(méi)有新的迭代,可能運(yùn)行了幾周、幾個(gè)月,甚至于說(shuō)一年、兩年,根本不會(huì)出現(xiàn)很緊急的問(wèn)題,一旦迭代發(fā)布,問(wèn)題往往就出現(xiàn)了。我們引入的概念叫做錯(cuò)誤預(yù)算,什么概念?概念化1減去SLA。
我們實(shí)際應(yīng)用過(guò)程中,是按季度結(jié)算的,一個(gè)季度的預(yù)算沒(méi)有用完,是不能到下一個(gè)季度的,如果用完了,這個(gè)季度,我們不會(huì)允許你再做一次新的發(fā)布,是這樣的。如果你這個(gè)預(yù)算用完了就要凍結(jié),凍結(jié)的話,就是說(shuō)你就不可以再做新的發(fā)布,到下一個(gè)季度可以繼續(xù)開支。因?yàn)槲覀兺ㄟ^(guò)數(shù)字來(lái)說(shuō)話,完全有一個(gè)簡(jiǎn)單目標(biāo)SLA,簡(jiǎn)單的一個(gè)數(shù)字,這里面不涉及到政治斗爭(zhēng)的過(guò)程,不是說(shuō)老板說(shuō)了這個(gè)東西太重要了,還要發(fā)布,但是你的預(yù)算如果用完了,你不能發(fā)布,就跟社會(huì)現(xiàn)實(shí)中的法律是一樣的。這樣看起來(lái)就是一個(gè)共同的目標(biāo),我們一個(gè)季度比如說(shuō)只有0.001%的錯(cuò)誤預(yù)算,從SRE角度來(lái)說(shuō),肯定希望這個(gè)產(chǎn)品越多越好。開發(fā)者角度來(lái)說(shuō),希望這個(gè)季度結(jié)束以前,一定不能用完0.001%的錯(cuò)誤預(yù)算,一旦用完了,后面在這個(gè)季度之內(nèi),再也沒(méi)有辦法發(fā)布新的產(chǎn)品了。
比如說(shuō)我們的SLA是4個(gè)9,可用錯(cuò)誤預(yù)算是0.01,如果說(shuō)一個(gè)季度過(guò)去兩個(gè)月了,已經(jīng)用了0.003,還剩下0.007,這個(gè)還沒(méi)有什么擔(dān)心,因?yàn)榫嚯x錯(cuò)誤預(yù)算用完還有很長(zhǎng)距離。但是如果說(shuō)已經(jīng)用了0.008,只剩下0.002了,如果沒(méi)有這樣一個(gè)很好的機(jī)制,放到一般的開發(fā)與運(yùn)營(yíng)的兩種角色關(guān)系來(lái)說(shuō),開發(fā)者肯定說(shuō)我這個(gè)產(chǎn)品很重要,我一定要發(fā)布,但是這個(gè)時(shí)候,在我們的研發(fā)完全不一樣了,因?yàn)殚_發(fā)者會(huì)衡量一下,我只剩下0.002%了,如果這個(gè)發(fā)布再出現(xiàn)了問(wèn)題,我可能下面剩下的這一個(gè)月,我再也沒(méi)有機(jī)會(huì)發(fā)布新的產(chǎn)品了,責(zé)任就是從傳統(tǒng)的運(yùn)營(yíng)的角度,就轉(zhuǎn)化到了開發(fā)者的角度。
作為一個(gè)運(yùn)營(yíng)人員,他沒(méi)有辦法證明你這個(gè)新的產(chǎn)品到底有多危險(xiǎn)、到底有多安全,但是作為開發(fā)者,你有責(zé)任去衡量這個(gè)東西來(lái)使用。下一個(gè)工程方法。我這是從一個(gè)新的產(chǎn)品發(fā)布開始的,第一步比如說(shuō)產(chǎn)品需求出來(lái)了、開發(fā)出來(lái)了,正在開發(fā)測(cè)試,開始內(nèi)部上線了,內(nèi)部上線一段時(shí)間以后,要做可不可以上線的審查,這個(gè)審查純粹是SRE在幫產(chǎn)品團(tuán)隊(duì)做的一個(gè)審查,這不算是SRE直接的一個(gè)參與,他們?cè)趯彶檫^(guò)程中,因?yàn)樗麄兊倪\(yùn)營(yíng)經(jīng)驗(yàn)比較豐富,審查過(guò)程中發(fā)現(xiàn)有什么問(wèn)題,他會(huì)讓你改正提高??v坐標(biāo)是穩(wěn)定性,橫坐標(biāo)是時(shí)間軸,當(dāng)通過(guò)了以后,到T0時(shí)間,就會(huì)開始發(fā)布,發(fā)布時(shí)間開始,外部用戶就已經(jīng)可以看到產(chǎn)品了。這個(gè)時(shí)候我想說(shuō)一下,比如說(shuō)我們的目標(biāo)是6個(gè)9,這個(gè)時(shí)候只能達(dá)到5個(gè)9或者4個(gè)9,雖然外面用戶已經(jīng)看到了,但是處于自運(yùn)營(yíng)的狀態(tài),開發(fā)者自己去維護(hù)。這個(gè)過(guò)程中,開發(fā)者會(huì)不斷的增加產(chǎn)品的穩(wěn)定性,這個(gè)時(shí)候新的產(chǎn)品不是最重要的,要增加穩(wěn)定性,因?yàn)樗麄円堰@個(gè)產(chǎn)品在現(xiàn)實(shí)生產(chǎn)環(huán)境中做得更好,可以通過(guò)SRE的審查,然后可以把運(yùn)營(yíng)這一部分交接到SRE那邊去。比如說(shuō)到6個(gè)月的時(shí)候,這個(gè)產(chǎn)品的主要目的是說(shuō)要把這個(gè)產(chǎn)品交到SRE去運(yùn)營(yíng),主要就是有什么緊急狀況,就會(huì)尋呼SRE。這個(gè)時(shí)候如果達(dá)到6個(gè)9,一切審查內(nèi)容都過(guò)了,這個(gè)時(shí)候SRE就會(huì)正式介入,來(lái)支持這樣一個(gè)日常的運(yùn)營(yíng)工作。
我后面講一下這個(gè)審查的例子有哪些內(nèi)容,這是一個(gè)反交接的過(guò)程。比如說(shuō)前面那部分一直是SRE在支持運(yùn)營(yíng),結(jié)果突然有一段時(shí)間,出現(xiàn)問(wèn)題太多了,穩(wěn)定性急劇下降,也很難以改善,SRE就有權(quán)利提出來(lái)反交接,反交接就是說(shuō)產(chǎn)品回歸到開發(fā)者去運(yùn)營(yíng),我們就不管了,就是這樣的意思。剛才講的審查內(nèi)容有哪些。比較重要的就是監(jiān)視系統(tǒng),監(jiān)測(cè)你產(chǎn)品的健康程度,比如說(shuō)你的內(nèi)存、用量,什么CPU,像什么延遲之類的一系列的東西。還有儀表盤,不是用來(lái)發(fā)尋呼的,大家肉眼主動(dòng)監(jiān)測(cè)去觀看的,比如說(shuō)可以看到過(guò)去6個(gè)月或者8個(gè)月這個(gè)延遲的變化是多少。比如說(shuō)上個(gè)月延遲0.001秒,現(xiàn)在變成0.002秒這是怎么回事,類似這樣。SRE審查事件發(fā)生頻率與類型,過(guò)去6個(gè)月自運(yùn)營(yíng)過(guò)程中,出現(xiàn)了哪些事故,這些事故有多嚴(yán)重,屬于哪些類型的,過(guò)后是怎樣修復(fù)的。有兩方面作用,一方面幫助SRE了解這個(gè)產(chǎn)品的健康程度,為他們以后運(yùn)營(yíng)做一個(gè)鋪墊。另外一方面也是考核這個(gè)產(chǎn)品在過(guò)去6個(gè)月當(dāng)中,到底有沒(méi)有什么重要的問(wèn)題,你是怎么樣修復(fù)的,最后是怎么樣解決的。
還有一個(gè)審查叫做系統(tǒng)架構(gòu),他們會(huì)衡量一下這個(gè)系統(tǒng)架構(gòu)是不是合理。還有一個(gè)就是發(fā)布的過(guò)程,過(guò)去6個(gè)月,你這個(gè)發(fā)布是怎樣發(fā)布的,發(fā)布的頻率是多少類似于這種,同時(shí)還會(huì)有一些Bug,比如說(shuō)測(cè)試Bug、用戶反饋Bug這樣一種。
再下面講的是組織架構(gòu)。剛才講的是工程方法,前面一系列工程方法是保證6個(gè)9的條件。組織架構(gòu)也是一個(gè),它比較簡(jiǎn)單,就只有一頁(yè)P(yáng)PT。一種是左邊這種,開發(fā)與SRE,同時(shí)給一個(gè)產(chǎn)品主條上去,另外一個(gè)就是到上面經(jīng)理,再到上面經(jīng)理,最后到總經(jīng)理。SRE給他的經(jīng)理,再到上面的經(jīng)理,再到總經(jīng)理,我們選擇哪個(gè)總呢?很顯然應(yīng)該選擇第二種。第一個(gè)給最底層的經(jīng)理,他的權(quán)限太大了。比如說(shuō)他會(huì)認(rèn)為這個(gè)新的產(chǎn)品非常重要,我要把它給發(fā)布出去,SRE基本上就沒(méi)有什么辦法了。但是第二種組織架構(gòu)下面,經(jīng)理1和經(jīng)理2說(shuō)話都不算,他們會(huì)堅(jiān)守方法論,如果你錯(cuò)誤預(yù)算到達(dá)了,你就不能發(fā)布了,這個(gè)是可以保證的。組織架構(gòu)同時(shí)涉及到管理理念,最高級(jí)別就是剛才那個(gè)經(jīng)理3,他一定要支持我們所做的這樣一種錯(cuò)誤預(yù)算的方法論,如果錯(cuò)誤預(yù)算用完了,你一定不能發(fā)布,他必須支持這個(gè)東西。包括到下面的經(jīng)理、工程師或者SRE都必須要理解,也要去執(zhí)行,我們做得比較好的最終是數(shù)字為王,一定按數(shù)字說(shuō)話,這樣也不會(huì)傷同事之間的和氣。
我總結(jié)一下前面講的非技術(shù)方面的知識(shí),通過(guò)非技術(shù)的手段,怎么樣打造很高的SRE的。SRE與運(yùn)營(yíng)商之間要有共同的目標(biāo),他們都是希望產(chǎn)品穩(wěn)定,有共同利益和共同的手段,大家一起做。根據(jù)經(jīng)驗(yàn)就是說(shuō)每個(gè)產(chǎn)品越早與SRE合作,整個(gè)后面的過(guò)程就會(huì)越順利,我的經(jīng)驗(yàn)就是說(shuō)在我們需求分析有了以后,在做產(chǎn)品架構(gòu)的時(shí)候,就去跟SRE合作,這樣會(huì)比較好。
下面講的就是技術(shù)支持這一塊,光有這些非技術(shù)的功能方法、管理理念、組織架構(gòu)還是不夠的,我們要有足夠的技術(shù)支持。從SRE的角度來(lái)說(shuō),他們不是特別熟悉產(chǎn)品的代碼,因?yàn)橄癞a(chǎn)品開發(fā),他們每天好多小時(shí),每周好幾天都泡在代碼里面,但是SRE是從另外一個(gè)角度來(lái)考慮這個(gè)問(wèn)題,他并沒(méi)有很熟悉,但是他們要有很強(qiáng)的技術(shù)能力,他不熟悉產(chǎn)品本身沒(méi)有關(guān)系,但是他有很強(qiáng)的技術(shù)能力。
我們的SRE基本上都有一定的開發(fā)背景,大概一半一半,要有運(yùn)營(yíng)的能力,即使之前沒(méi)有進(jìn)來(lái)以后,我們也是做一個(gè)類似于50%、50%的細(xì)分,50%的時(shí)間在做跟開發(fā)相關(guān)的事情,讓你具備這個(gè)能力;另外50%的時(shí)間做其他的事情。工具角度來(lái)說(shuō),我們內(nèi)部是要有一系列的工具來(lái)支持這樣一個(gè)高可用性的服務(wù)的。從底硬件來(lái)說(shuō),機(jī)器、存儲(chǔ)、帶寬,這個(gè)存儲(chǔ)當(dāng)然包括軟件方面,然后到更高一點(diǎn)的軟件層技術(shù)架構(gòu)來(lái)說(shuō),我們要有錯(cuò)誤處理,比如說(shuō)某一個(gè)點(diǎn)出了問(wèn)題,怎么樣處理,這樣一系列的東西。包括自動(dòng)化的配置安裝、監(jiān)控、儀表盤,這里面工具幾乎所有都是自動(dòng)化的。作為一個(gè)開發(fā)者來(lái)說(shuō),他可能所有的東西對(duì)他來(lái)說(shuō)都是黑盒的。
我們的SRE做得比較好的,還給工程師開發(fā)者提供了一系列的支持,比如說(shuō)郵件系統(tǒng)的咨詢,有關(guān)問(wèn)題通過(guò)郵件方式咨詢,有公開的視頻培訓(xùn),還有一些面對(duì)面的咨詢,還有一些公布了審查的列表,同時(shí)還有一個(gè)發(fā)布委員會(huì),如果你有什么需求,提前去咨詢,發(fā)布委員會(huì)也會(huì)幫助你解決問(wèn)題。 測(cè)試方面也是很重要的一塊,也算是一個(gè)技術(shù)測(cè)試。我們的自動(dòng)化測(cè)試,從最底層的最微觀的單元測(cè)試,一直到宏觀的系統(tǒng)測(cè)試,中間組件測(cè)試,這是對(duì)每個(gè)產(chǎn)品發(fā)布的硬性要求。組件到單元測(cè)試往往是通過(guò)開發(fā)者自己來(lái)寫的,到系統(tǒng)測(cè)試往往就會(huì)有一些測(cè)試專員來(lái)做這個(gè)東西。我們還會(huì)做壓力測(cè)試,地球上發(fā)生過(guò)很多次本身小測(cè)試沒(méi)有問(wèn)題,但是上線以后,壓力變大以后可能就出現(xiàn)問(wèn)題了。這四種測(cè)試是必須的,對(duì)于每個(gè)產(chǎn)品來(lái)說(shuō)都是必須的。
手工測(cè)試,對(duì)于所有用戶可見的分析都有手工測(cè)試的設(shè)計(jì)。
下面講工具。剛才我大概講了一下,這里面有一些比較稍微細(xì)一點(diǎn)的。最重要的就是監(jiān)測(cè),一旦有問(wèn)題,那邊馬上會(huì)發(fā)這樣一個(gè)尋呼,我們監(jiān)測(cè)有黑盒、白盒,白盒的就是說(shuō)你通過(guò)services本身來(lái)暴露出來(lái)的狀態(tài),比如說(shuō)你的延遲程度。還有黑盒監(jiān)測(cè),跟剛才有點(diǎn)像,比如說(shuō)我不管你這個(gè)服務(wù)是干嗎的,我就是簡(jiǎn)單發(fā)一個(gè)過(guò)去,不管你這里面有什么,發(fā)現(xiàn)你用了多長(zhǎng)時(shí)間,反饋結(jié)果對(duì)不對(duì)。
第二點(diǎn)就是儀表盤,如果想得到SRE的支持這也是必須的,SRE要有能力在任何時(shí)間、任何地點(diǎn),在他想要看的時(shí)候,就可以看到你這個(gè)服務(wù)的狀態(tài)。
再下面就是基礎(chǔ)架構(gòu)的支持,這個(gè)也非常重要。我們做一個(gè)復(fù)雜的系統(tǒng),不是說(shuō)做一個(gè)簡(jiǎn)單的services,還要依賴很多其他的東西。比如說(shuō)你的數(shù)據(jù)庫(kù)、你的網(wǎng)絡(luò)、你的存儲(chǔ),對(duì)于每一塊來(lái)說(shuō),都要有很強(qiáng)的革命性才能夠使得你這個(gè)服務(wù)達(dá)到目標(biāo)。比如說(shuō)這個(gè)服務(wù)做得非常好,結(jié)果數(shù)據(jù)庫(kù)不行,你這個(gè)服務(wù)也是不行的。
最后一點(diǎn),如果說(shuō)上面某一個(gè)技術(shù),萬(wàn)一哪個(gè)地方出了問(wèn)題怎么辦?我們做oncall。第一個(gè)級(jí)別5分鐘必須響應(yīng),如果你的產(chǎn)品出了問(wèn)題,我們馬上發(fā)一個(gè)Page,oncall人員在5分鐘之內(nèi)必須響應(yīng),我知道這個(gè)問(wèn)題,我馬上會(huì)出現(xiàn)。oncall人員分幾個(gè)級(jí)別,第一個(gè)級(jí)別,一般來(lái)說(shuō)希望你在5分鐘之內(nèi)馬上反映,第二個(gè)級(jí)別就是說(shuō)如果第一級(jí)別有什么意外情況,比如說(shuō)你在這個(gè)地區(qū)沒(méi)有網(wǎng)絡(luò),沒(méi)有收到,或者說(shuō)你在洗澡之類的沒(méi)有收到,二級(jí)就會(huì)響應(yīng)。三級(jí)往往就是技術(shù)人員,三級(jí)往往是開發(fā)團(tuán)隊(duì)的一個(gè)人,因?yàn)樗麑?duì)這個(gè)產(chǎn)品非常熟悉,在一級(jí)、二級(jí)遇到問(wèn)題5分鐘之內(nèi)響應(yīng)了,辦了一段時(shí)間之后,發(fā)現(xiàn)不能解決這個(gè)問(wèn)題,就要找第三級(jí)oncall,找他們協(xié)助解決。
我就這樣總結(jié)了一下,大概四個(gè)方面來(lái)使我們達(dá)到這樣一個(gè)6個(gè)9的目標(biāo),希望給大家?guī)?lái)一種幫助,謝謝大家!
以上是51CTO.com記者從一線為您帶來(lái)的精彩報(bào)道。后續(xù)我們還有更加精彩的獨(dú)家報(bào)道,敬請(qǐng)關(guān)注。