谷歌的全套應(yīng)用似乎總是堅(jiān)如磐石,穩(wěn)固可靠。
對于身處墻外以及自備科學(xué)上網(wǎng)技能的你,還記得上一次是什么時候,你想上谷歌搜索點(diǎn)什么結(jié)果網(wǎng)頁崩潰了嗎?
真相是,這個答案本身就不成立,因?yàn)楣雀杷坪跻恢倍荚谀抢铮瑥膩頉]有宕機(jī)過,除非你連不上網(wǎng)。而除了搜索引擎,谷歌提供的各種線上服務(wù),無論是Gmail、Google Docs還是其他,都似乎是同樣地穩(wěn)定可靠。根據(jù)谷歌提供的統(tǒng)計數(shù)字,在2015全年99.97%的時間里,你都能暢通無阻地使用包括Gmail和Docs在內(nèi)的全套谷歌應(yīng)用。
似乎全世界的用戶都對此習(xí)以為常,但這完全稱得上是非常了不起的成績,只是使用谷歌的我們很少會去思考,這家公司是怎樣把“奇跡”變成日常的。
谷歌只用了短短三個詞來解釋:網(wǎng)站可靠性管理(Site Reliability Engineering,簡稱SRE)。
聽起來沒什么厲害的,但谷歌在十幾年前就提出了這一影響深遠(yuǎn)的設(shè)想。這種管理哲學(xué)其實(shí)意蘊(yùn)深厚且適用范圍廣泛,簡而言之,可以歸結(jié)為這么一個中心思想:
不要讓擅長管理網(wǎng)絡(luò)服務(wù)的IT人員來管理你司的網(wǎng)絡(luò)服務(wù)。讓編寫軟件的程序員自己來管理。
這么做的話,程序員就會自己開發(fā)有助于程序運(yùn)作的工具,而不需要其他人另外花力氣找bug。
“我們期待著有朝一日,不需要人進(jìn)行任何管理。”
——TODD UNDERWOOD,谷歌網(wǎng)站可靠性主管
谷歌工程副總裁Ben Treynor Sloss在新近的一篇文章里寫到:“我們的方法呈現(xiàn)出來的效果是,整個團(tuán)隊(duì)的成員都會對手動執(zhí)行任務(wù)很快地產(chǎn)生厭倦,也因此都掌握了編寫程序的能力來代替之前的手動操作。”
對許多硅谷中的人來說,這并不算什么新鮮的觀點(diǎn)。或者這么說,從亞馬遜到Box.com,整個科技界基本上都是這么干的。人們稱之為DevOps,即開發(fā)(development)和運(yùn)維(operation)的合并,整合編程人員的技術(shù)與系統(tǒng)管理員的目標(biāo)。不過,這場DevOps運(yùn)動的發(fā)展雖然源自谷歌內(nèi)部的SRE管理體系和亞馬遜內(nèi)部類似的管理原則,但也大有不同并自成一體。只是谷歌一直都秘而不宣,就像人們好奇谷歌高效的線上運(yùn)維是怎么實(shí)現(xiàn)的時候,他們還是保持低調(diào)行事。
但谷歌已經(jīng)進(jìn)入了新時期,現(xiàn)在的它比以前更愿意對這類話題開門見山展開討論,很大一部分原因在于谷歌想借此推廣自家的云服務(wù),以引進(jìn)更多外部的公司,在谷歌的數(shù)據(jù)和機(jī)器網(wǎng)絡(luò)之上運(yùn)行他們的軟件,甚至還出了一本專門論述SRE內(nèi)功心法的書,就叫《網(wǎng)站可靠性管理》(Site Reliability Engineering)。
無論是科技業(yè)的從業(yè)人士還是圈子外的每一個小白,系統(tǒng)管理或曰運(yùn)維都是計算機(jī)技術(shù)領(lǐng)域最無趣的一個方面,往往出了問題才會事后諸葛亮。然而,負(fù)責(zé)谷歌日常運(yùn)作的副總裁Sloss可不這么認(rèn)為。恰恰相反,他認(rèn)為網(wǎng)站可靠性是“任何一款產(chǎn)品最基礎(chǔ)的特性”,畢竟“如果沒人能用得上,這個系統(tǒng)就毫無用處。”
從無到有的SRE
Sloss算是這場SRE運(yùn)動的“發(fā)起人”。一開始,谷歌把他招進(jìn)來負(fù)責(zé)運(yùn)維,正是他后來提出了SRE這個詞。“SRE就是你讓一個軟件工程師去設(shè)計一個運(yùn)維團(tuán)隊(duì),”他說,“我假設(shè)自己就是一個SRE系統(tǒng),并按著那樣的方式來設(shè)計并管理我的團(tuán)隊(duì)。”
而對Todd Underwood來說,公司聘請Sloss這樣的程序員是再自然不過的事。他向《連線》雜志表示,“當(dāng)谷歌還處于創(chuàng)業(yè)階段的時候,其實(shí)還有很多其他的優(yōu)秀軟件工程師,他們更清楚問題可能以怎樣的形式出現(xiàn),也更明白整個工程該怎么做好。但沒有人真的想去親手落實(shí)。”
這是非常“谷歌”的一種現(xiàn)象。配置管理工具Chef的首席技術(shù)官Adam Jacob非常同意Underwood的看法并解釋道,當(dāng)線上的運(yùn)營成長到足夠大的體量時,這是一種意料之中的轉(zhuǎn)型。“把軟件開發(fā)和實(shí)際運(yùn)營結(jié)合起來,乃至讓二者密不可分,這是很自然要討論的問題。全面地看問題才能有更好的產(chǎn)出。”
若聯(lián)想到開發(fā)和運(yùn)維原本是兩個“死對頭”,這種轉(zhuǎn)型就顯得格外有趣了。開發(fā)團(tuán)隊(duì)希望開發(fā)新軟件,并盡可能快地讓公眾得到不同的體驗(yàn),但運(yùn)維人員更希望確保萬事俱備、毫無差錯,最好的辦法就是盡可能減少變化。
“這是不相稱的兩個目標(biāo)。”Underwood說。
竅門就在于,把開發(fā)和運(yùn)維結(jié)合起來,消除這種對立。
Underwood把這稱為“黑格爾式的正題-反題綜合體”。他也承認(rèn),這種說法沒人會真正買單,因?yàn)?ldquo;沒人還會讀黑格爾了”,他打趣道。但這種說法恰恰正中命門,谷歌正是在這樣的哲學(xué)思想指導(dǎo)下,把其他的業(yè)務(wù)都結(jié)合起來,加速了整個SRE的轉(zhuǎn)型進(jìn)程。
把犯錯概率編入預(yù)算
其中一個重要的觀點(diǎn)是,為了減少開發(fā)和運(yùn)維之間的沖突,公司不會苛求正常運(yùn)作時間達(dá)到100%。Sloss在文章中寫到,真實(shí)情況是用戶并不需要網(wǎng)絡(luò)服務(wù)達(dá)到百分百可用。退一步說,用戶也分不清正常運(yùn)作時間達(dá)到100%和99.999%的區(qū)別(手提電腦、WiFi、電力和ISP宕機(jī)的概率可遠(yuǎn)遠(yuǎn)大于0.001%)。如果設(shè)定好一個合理的、低于100%的正常運(yùn)作時間目標(biāo),也就是“錯誤預(yù)算”,你就有了更大的空間來調(diào)整變化,進(jìn)行試驗(yàn)。
“引入’錯誤預(yù)算’解決了開發(fā)和SRE目標(biāo)之間的結(jié)構(gòu)性沖突問題,”Sloss寫道,
“‘停電’再也不是壞事,而是創(chuàng)新過程可預(yù)見的一部分,也是開發(fā)團(tuán)隊(duì)和SRE團(tuán)隊(duì)可以管理并且無需畏懼的正?,F(xiàn)象。”
與此同時,谷歌也制定了配套的制度,為的是確保新的SRE成員不會淪落成以前的系統(tǒng)管理員角色。大體上,谷歌規(guī)定了SRE組的成員不能把超過一半的時間用在開發(fā)之外的傳統(tǒng)運(yùn)營上。如果運(yùn)營的部分開始大于開發(fā),谷歌就會把一些運(yùn)營工作交給一般只負(fù)責(zé)開發(fā)軟件的團(tuán)隊(duì),也就是軟件工程師。“有意識地保持運(yùn)營和開發(fā)工作的平衡,讓我們得以確保SRE團(tuán)隊(duì)的工作帶寬,能夠投入開發(fā)創(chuàng)造性的自動化工程,同時保留在運(yùn)維工作中手機(jī)得來的經(jīng)驗(yàn)智慧。”Sloss寫到。
Chef公司的Jacob則認(rèn)為,50%的比例并不是那么重要,但他喜歡這種態(tài)度。他說:“這就是經(jīng)濟(jì)學(xué)。我們總需要一些人來做運(yùn)營的破事兒,人們總有無限的破事兒希望運(yùn)營人員能夠解決。所以,給這些破事兒設(shè)個限額是完全合理的。”
在招聘SRE人員方面,谷歌甚至出臺了嚴(yán)格的指導(dǎo)方針。約有五成到六成SRE人員是通過工程師的招聘流程進(jìn)來的,其他人則有“85%到99%”的同等技術(shù)能力,再加上“大部分軟件工程師缺乏、但對SRE工作非常有用的技術(shù)技能”,比如深入了解UNIX操作系統(tǒng)的內(nèi)部原理或硬件聯(lián)網(wǎng)協(xié)議。這也是為了確保開發(fā)和運(yùn)營保持適當(dāng)?shù)钠胶狻?/p>
登月計劃的啟示
從許多方面來看,這是一種新的管理原則。但在進(jìn)一步的闡述中,谷歌團(tuán)隊(duì)用了一個很老的案例。
谷歌SRE原則的精神祖先其實(shí)是“代碼女神”Margaret Hamilton,她是MIT的程序員,也是數(shù)學(xué)和電腦科學(xué)的先鋒,在上世紀(jì)六十年代為阿波羅登月計劃開發(fā)程序。Hamilton描述到,阿波羅項(xiàng)目的文化之一就是“從每個人、每件事上學(xué)習(xí),包括你最不抱希望的人和事。”
Hamilton雖身為技術(shù)人員,卻在運(yùn)維方面起到了重要作用。當(dāng)年,她經(jīng)常把自己的小女兒Lauren帶到實(shí)驗(yàn)室去。有一天Lauren不小心按下一個按鈕,結(jié)果把一個用于阿波羅發(fā)射前的程序輸入到正在運(yùn)行發(fā)射后方案的電腦。這立馬使得電腦崩潰,此后Hamilton便嘗試給系統(tǒng)加入一個新的錯誤校驗(yàn)代碼,讓其能夠在真正的飛行中預(yù)防這類突發(fā)情況的發(fā)生。上司對她的想法表示反對,認(rèn)為宇航員永遠(yuǎn)不會犯這樣的錯誤。然而,在阿波羅八號的飛行中,宇航員真的發(fā)生了這樣的狀況,所幸Hamilton早在系統(tǒng)文檔中加入了一個變通方案。在此后的發(fā)射中,她給系統(tǒng)加入了錯誤校驗(yàn)代碼。
“光是指出‘那樣做會崩潰的’真的沒啥作用。但如果你說,‘那樣做會崩潰的,我來告訴你怎么做’,這就非常了不起了。”Underwood是這樣解讀的,“她看到了程序?qū)罎?,并看清了會怎么崩潰,然后設(shè)計出了預(yù)防方案。”
這就是DevOps,用谷歌的說法就是SRE。聽起來沒什么大不了,卻是非常強(qiáng)大的理念。它已經(jīng)成就了谷歌。不過,像Underwood這樣的哲學(xué)家型SRE人士還有更大的雄心。他們設(shè)想,在未來的世界里,運(yùn)維能夠更進(jìn)一步變成代碼的一部分。Underwood說:“我們期待著有朝一日,不需要人進(jìn)行任何管理。”(本文首發(fā)鈦媒體)