關于我們
書單推薦
新書推薦
|
SRE:Google運維解密
大型軟件系統(tǒng)生命周期的絕大部分都處于“使用”階段,而非“設計”或“實現(xiàn)”階段。那么為什么我們卻總是認為軟件工程應該首要關注設計和實現(xiàn)呢?在《SRE:Google運維解密》中,Google SRE的關鍵成員解釋了他們是如何對軟件進行生命周期的整體性關注的,以及為什么這樣做能夠幫助Google成功地構建、部署、監(jiān)控和運維世界上現(xiàn)存zui大的軟件系統(tǒng)。通過閱讀《SRE:Google運維解密》,讀者可以學習到Google工程師在提高系統(tǒng)部署規(guī)模、改進可靠性和資源利用效率方面的指導思想與具體實踐——這些都是可以立即直接應用的寶貴經(jīng)驗。
任何一個想要創(chuàng)建、擴展大規(guī)模集成系統(tǒng)的人都應該閱讀《SRE:Google運維解密》!禨RE:Google運維解密》針對如何構建一個可長期維護的系統(tǒng)提供了非常寶貴的實踐經(jīng)驗。
√ 超級暢銷書,國外在線書店長居前列,打標#1 Best Seller
√ 運維高燒不退,谷歌神書問世,繼續(xù)為這一熱潮推波助瀾 √ 本書解密全球神秘又讓人仰望的技術崗位——谷歌SRE √ 未出先火,本書原著問世時各大社區(qū)火爆異常、人氣爆棚
如果用一個詞語來描述 Google 的歷史,那就是不斷地“擴大規(guī)!保╯caling up)。Google 的成長經(jīng)歷,是計算機行業(yè)中數(shù)一數(shù)二的成功故事,標志著整個社會向 IT 為中心的商業(yè)模式的轉(zhuǎn)變。Google 很早就開始實踐 IT 與商業(yè)模式的結合,也是向社區(qū)推廣DevOps 理念的先行者。本書就是由來自公司各個部門,切身參與甚至主導了整個行業(yè)轉(zhuǎn)型實踐的人寫成的。
Google 是在一個系統(tǒng)運維工程師行業(yè)轉(zhuǎn)型的階段發(fā)展壯大的。Google 的發(fā)展史就像是對傳統(tǒng)的系統(tǒng)運維理念發(fā)出的革命宣言:我們無法按照傳統(tǒng)方式運維Google 系統(tǒng),必須要思考一種新的模式,但是同時我們也沒有時間等待其他人驗證和支持我們的理論。在Principles of Network and System Administration(參見文獻[bur99])一書的介紹中,我提出了一種觀點:系統(tǒng)運維本質(zhì)上是人與計算機共同參與的一項系統(tǒng)性工程。當時的一些評論者對這種觀點表示了強烈的反對:“這個行業(yè)還遠遠沒有成熟到可以稱為一項工程”。在那時,我甚至對整個運維行業(yè)產(chǎn)生了懷疑,認為這個行業(yè)在個人英雄主義與神秘色彩中已經(jīng)永久地迷失了自己,無法前進。但是,這時Google 誕生了,Google 的高速發(fā)展將我的預言變成了現(xiàn)實。我之前的定義變成了一個具體的詞語:SRE,站點可靠性工程師。我的幾個朋友切身參與了這個新職業(yè)的創(chuàng)立,用軟件工程理念和自動化工具定義了這個行業(yè)。一開始,他們顯得很神秘,Google 公司內(nèi)的體驗和整個行業(yè)也格格不入,Google 太特殊了! 隨著時間的推移,公司內(nèi)外交流逐漸增多。這本書的目標就是將SRE 的一些思考和實踐帶給整個行業(yè),以促進交流。 在本書中,我們不僅僅展示了 Google 是如何建設維護其富有傳奇色彩的大型計算集群的。更重要的是,我們展示了在建設過程中,Google 工程師團隊是如何學習、成長、反復修改,zui后定義出一套完整的工具和科技體系的過程。IT 行業(yè)大多自我封閉,交流過少,很多從業(yè)人員都或多或少地受教條主義的限制。如果Google 工程師團隊能克服這個慣性,保持開放的精神,那么我們也能夠一起和他們面對 IT 行業(yè)內(nèi)zui尖端的挑戰(zhàn)。 這本書由一群有共同目標的 Google 工程師寫就的短文組成。本書的作者們聚集在同一個公司旗下,為了同一個目標努力,本身就是一件很特別的事情。在本書的各個章節(jié)之間經(jīng)常能看到軟件系統(tǒng)的共同點,以及工作模式上的共通之處。我們經(jīng)常可以從多個角度分析不同的決策選擇,了解他們是如何一起解決公司內(nèi)部多種利益沖突的。這些文章并不是嚴謹?shù)膶W術研究論文,而是這些人的切身經(jīng)歷。雖然本書的作者們有著不同的工作目標、寫作風格,以及技術背景,但是他們都嘗試著去真誠地描述自己遇到的問題和解決的經(jīng)歷。這和 IT 行業(yè)內(nèi)的普遍文風截然不同,風格迥異。有些作者會宣稱:“不要做A,只有做B 才是正確的! 另一些作者會更謹慎,行文更富有哲學性。這其實恰恰代表了整個 IT 行業(yè)內(nèi)不同個性融合的現(xiàn)狀。而我們作為讀者,作為觀察者,并不了解整個Google 的歷史,也沒有參與到具體的決策過程中,無法全面了解當事人所面臨的糾纏不清的挑戰(zhàn),只能帶著謙遜的態(tài)度遠遠旁觀。在閱讀本書的過程中,相信讀者一定會產(chǎn)生出許多疑問:“他們當時為什么沒有選擇X ?”“ 如果他們選擇了Y,結果會是怎樣?”“ 如果多年之后回頭再看,這個選擇會是正確的嗎?” 這些問題,恰恰是閱讀本書的zui大收獲,因為我們第1次有機會將自己的經(jīng)歷、選擇和本書陳列的決策邏輯相互對應,從中發(fā)現(xiàn)不足和缺陷。 這本書的成書過程也堪稱奇跡。今天,我們能感受到整個行業(yè)都在鼓吹厚顏無恥的 “代碼拿來主義”(just show me the code)。開源軟件社區(qū)內(nèi)部正在形成一種“不要問我問題”的風氣,過于強調(diào)平等卻忽略領域?qū)<业囊庖。Google 是行業(yè)內(nèi)為數(shù)不多的,愿意投入精英力量鉆研本質(zhì)問題的公司,而且這些公司精英很多都有工學博士學位。工具永遠只是解決方案中的一個小小組件,用來鏈接日益龐雜的軟件、人和海量的數(shù)據(jù)。這本書中沒有萬能藥,沒有什么東西能解決一切問題,但是這恰恰是本書的宗旨:相比zui后的軟件結果、架構設計而言,真實的設計過程、作者本身的思考經(jīng)歷更有價值。實現(xiàn)細節(jié)永遠只是短暫存在的,但是文檔化的設計過程卻是無價之寶。有機會了解到這些設計的內(nèi)幕真是太難得了! 這本書,歸根到底,記錄了 Google 這個公司的成長經(jīng)歷。書中的很多故事都是由相互重疊的故事組成的,這恰恰說明了擴展一個計算機系統(tǒng),要比簡單按照書本上的標準架構放大困難得多。一個公司的成長,意味著整個公司商業(yè)模式和工作模式的擴展,而不是簡單的資源擴張。僅此一點,這本書就物超所值了。 自省,是一個在 IT 行業(yè)內(nèi)部并不流行的詞語。我們不斷重復發(fā)明各種系統(tǒng)。很多年以來,只有 USENIX LISA 大會論壇以及其他幾個專注于操作系統(tǒng)的會議會討論一些 IT 基礎設施的設計和實現(xiàn)。很多年后的今天,IT 行業(yè)已經(jīng)天翻地覆,但是本書仍然彌足珍貴:它詳細記錄了Google 邁過分水嶺時期的全過程。很顯然,這些經(jīng)歷沒有辦法完全復制,也許只能被模仿,但是卻可以啟發(fā)讀者,指引未來。本書作者們表現(xiàn)出了極大的真誠,顯示了謙遜的風格,以及極強的凝聚力、領導力。這些文章記錄了作者們的希望、擔憂、成功與失敗的經(jīng)歷。我向這些作者們和編者們的勇氣致敬,正是這種坦率,讓我們能夠作為旁觀者和后來人,從前人的經(jīng)歷中學習到zui寶貴的知識。 Mark Burgess In Search of Certainty 一書作者 Oslo,2016 年3 月 序言 軟件工程有的時候和養(yǎng)孩子類似:雖然生育的過程是痛苦和困難的,但是養(yǎng)育孩子成人的過程才是真正需要花費絕大部分精力的地方。但是,傳統(tǒng)軟件工程專業(yè)花費了很多精力討論軟件的開發(fā)過程,而不是其后的維護過程。有統(tǒng)計顯示, 一個軟件系統(tǒng)的40%~90% 的花銷其實是花在開發(fā)建設完成之后不斷維護過程中的。行業(yè)內(nèi)流行的一個說法是:一個系統(tǒng)如果已經(jīng)開發(fā)完成,部署在生產(chǎn)環(huán)境上,那么它就是 “穩(wěn)定的”,就不需要那么多工程師花費精力去優(yōu)化、維護。我們認為這個說法是錯誤的。從這個視角出發(fā),我們認為如果軟件工程職業(yè)主要專注于設計和構建軟件系統(tǒng), 那么應該有另外一種職業(yè)專注于整個軟件系統(tǒng)的生命周期管理。從其設計一直到部署,歷經(jīng)不斷改進,zui后順利退役。這樣一種職業(yè)必須具備非常廣泛的技能,但是和其他職業(yè)的專注點都不同。Google 將這個職位稱為站點可靠性工程師(SRE,Site Reliability Engineering)。 那么,站點可靠性工程師究竟代表著什么呢?的確,這個詞語并不能夠特別清晰地描述這個職位的意義。基本上每個 Google SRE 都會被經(jīng)常問到這個職位到底代表什么意思,以及他們的日常工作究竟是什么。 將這個詞語展開來說:首先,也是zui重要的一點,SRE 是工程師(engineer)。SRE 使用計算機科學和軟件工程手段來設計和研發(fā)大型、分布式計算機軟件系統(tǒng)。有的時候,SRE 和產(chǎn)品研發(fā)團隊共同工作,其他時候我們需要開發(fā)這些系統(tǒng)的額外組件:例如備份系統(tǒng)和負載均衡系統(tǒng)等。理想情況下,同時推進這些組件在多個項目中復用。還有的時候,我們的任務是想出各種各樣的辦法用現(xiàn)有組件解決新的問題。 其次,SRE 的關注焦點在于可靠性。Ben Treynor Sloss,Google 負責7×24 運維的副總裁,SRE 名稱的發(fā)明者,宣稱可靠性應該是任何產(chǎn)品設計中zui基本的概念:任何一個系統(tǒng)如果沒有人能夠穩(wěn)定地使用,就沒有存在的意義。因為可靠性 是如此重要,因此SRE 專注于對其負責的軟件系統(tǒng)架構設計、運維流程的不斷優(yōu)化,讓這些大型軟件系統(tǒng)運行得更可靠,擴展性更好,能更有效地利用資源。但是,SRE 并不是無止境地追求完美:當一個系統(tǒng)已經(jīng) “足夠可靠” 的時候,SRE 通常將精力轉(zhuǎn)而投入到研發(fā)新的功能和創(chuàng)造新的產(chǎn)品中。 zui后,SRE 的主要工作是運維在分布式集群管理系統(tǒng)上運行的具體業(yè)務服務(service)。不論是遍布全球的存儲服務,還是億萬用戶賴以工作的 E-mail 服務,還是 Google zui初的 Web 搜索服務。SRE 中的“ S” zui開始指代的就是google.com 的運維服務,因為SRE的第1個工作就是維持網(wǎng)站的正常運轉(zhuǎn)。隨著時間的推移,SRE 逐漸接管了 Google 內(nèi)部絕大部分產(chǎn)品系統(tǒng),包括 Google Cloud Platform 這類開發(fā)者平臺,也包括內(nèi)部的一些非網(wǎng)站類的基礎設施系統(tǒng),例如 Bigtable。 雖然我們在這里將 SRE 的職位定義得比較寬泛,但是在這樣一個互聯(lián)網(wǎng)業(yè)務高速發(fā)展的時代,這個職位的出現(xiàn)毫不奇怪。同樣,雖然在應用系統(tǒng)運營維護的過程中有數(shù)不清的重要環(huán)節(jié)需要關注,我們zui關注的是“可靠性”這一點也不奇怪。在Web 服務領域里,對服務器端軟件的優(yōu)化和修改是相對可控的,變更管理與生產(chǎn)安全又結合得非常緊密,一種類似于 SRE 的職業(yè)早晚會在這個環(huán)境下誕生。 雖然 SRE 這個行業(yè)是在 Google 內(nèi)部,從Web 社區(qū)中誕生的,但我們認為這個職業(yè)對其他團隊和組織也有很多值得借鑒的地方。本書是對闡述SRE 發(fā)展過程的一次嘗試:我們既希望將這些寶貴經(jīng)驗共享給其他相關行業(yè),也希望能從其他行業(yè)中汲取知識,從而更好地定義各種角色和術語。為了這個目的,本書將通用的理論、設計理念和思想,與實際的應用工具介紹等分開。在某些需要結合Google 內(nèi)部信息討論主題的時候,我們相信讀者可以進行類比,將書中的理念與自己的實際環(huán)境相結合,以便得出更為有效的結論。本書中也包含了一些對 Google 內(nèi)部生產(chǎn)環(huán)境的介紹,將 Google 內(nèi)部環(huán)境與外部常見的開源類軟件相對應。這樣可以讓本書的一些設計理念與實踐的結合度更強,應用起來更容易。 zui后,我們當然希望社區(qū)內(nèi)出現(xiàn)更多、更可靠的軟件系統(tǒng)。我們知道,創(chuàng)業(yè)企業(yè)甚至中型企業(yè)經(jīng)常對如何應用這些理念和技術感到困惑。可靠性就像安全性,越早關注越好。這就意味著一些小型創(chuàng)業(yè)公司,在應付日常面臨的種種挑戰(zhàn)時,也應該抽出一部分精力來面對可靠性這個話題。這與蓋房子有些類似,如果一開始將整個地基打好并保持繼續(xù)修繕,要比蓋好房子之后再重新修改設計要容易得多。本書第4 部分著重介紹了 SRE 團隊如何進行內(nèi)部培訓、如何加強內(nèi)部溝通等zui佳實踐,很多都可以直接拿來應用。 對中型企業(yè)來說,企業(yè)內(nèi)部可能已經(jīng)有這樣的一組人在做著與SRE 非常類似的工作。這些人可能并不叫 SRE 這個名字,甚至可能沒有受到管理層的重視。在這樣的企業(yè)中,提高可靠性zui好的辦法往往就是去認可這些人的工作,并配備足夠的激勵機制。在牛頓被世界正式認可為物理學家之前,他經(jīng)常被稱作是zui后的煉金術師。而這些專注于可靠性的工程師們,正如當年的牛頓一樣,是一個新時代的開拓者。 如果一定要為SRE 尋找一個起源的話,誰才能夠被稱為世界上第1個SRE 呢?我們選擇了 Margaret Hamilton,MIT 教授,參與了阿波羅登月計劃的軟件開發(fā)工作。她的工作具有現(xiàn)代SRE 的一切特性。用她自己的話來講:“團隊文化就是從一切經(jīng)歷中不斷學習,包括來自那些我們zui意想不到的地方的經(jīng)歷! 在Apollo 7 飛船研發(fā)期間的某一天,Margaret 帶著她的小女兒 Lauren 一起來到公司。在 Margaret 忙著和組員們在大型計算機上運行飛行模擬測試的時候,她的小女兒偷偷地按下了控制臺上的 DSKY 鍵。整個模擬程序出乎意料地崩潰了,導致整個火箭發(fā)射程序意外終止。Margaret 和組員調(diào)試后發(fā)現(xiàn),原來Lauren 意外觸發(fā)了 P01 這段子程序的執(zhí)行,導致了整個模擬過程的失敗。(該子程序是起飛前調(diào)試程序,執(zhí)行時會刪除現(xiàn)存的導航信息,如果在火箭飛行過程中執(zhí)行這段程序,計算機將無法繼續(xù)維持火箭航線,后果將是災難性的。) 憑借著 SRE 的直覺, Margaret 為項目組提交了一個軟件改動,申請在飛行程序中增加一項特殊狀態(tài)檢查,以避免飛行員在飛行過程中意外觸發(fā)P01 程序的執(zhí)行。但不幸的是,NASA 管理層認為,這項錯誤發(fā)生的可能性太小,根本不值得為此添加這項修改。于是Margaret 沒有能夠成功提交這項軟件修改。她只能在火箭飛行手冊中添加了一段文字,寫道:“在飛行過程中,請勿觸發(fā)P01 程序! (當時增加這段文字時,很多NASA 工程師都認為這很好笑,認為Margaret 是小題大做,幾乎所有人都認為宇航員經(jīng)過如此長時間的專業(yè)訓練,是絕對不會犯如此低級的錯誤的。) 幾天后,在Apollo 8 飛船執(zhí)行下一項飛行任務時。宇航員 Jim Lovell、William Anders和Frank Borman 三人執(zhí)行一個長達四天的飛行計劃途中,Jim Lovell 意外地觸發(fā)了 P01程序的執(zhí)行。更巧的是,當天正好是美國圣誕節(jié),大部分工程師都休假去了?上攵敃rNASA 的一片混亂狀態(tài)。這次不是演習,而是人命關天的危急時刻,如果不能及時解決,三名宇航員將永遠無法安全返回了。所幸,當時 Margaret 的飛行手冊更新中恰恰提到了這種情形,并且提供了重新上傳數(shù)據(jù)以及恢復執(zhí)行的有效辦法,在有限的時間內(nèi)解決了問題,使任務可以繼續(xù)進行。 Margaret 曾經(jīng)說過:“無論對一個軟件系統(tǒng)運行原理掌握得多么徹底,也不能阻止人犯意外錯誤! 在這次危機過后,Margaret 之前提交的修改申請很快就被批準了。 雖然Apollo 8 的事故發(fā)生在幾十年前,但是工程師們一定不會對此感到陌生, 類似的場景總是在不斷重演。希望讀者以史為鑒,只有靠著對細節(jié)的不懈關注,做好充足的災難預案和準備工作,時刻警惕著,不放過一切機會去避免災難發(fā)生。這就是SRE zui重要的理念!歡迎加入SRE 的大家庭! 如何閱讀本書 這本書是由一系列短文組成的, 由Google SRE 成員和前成員共同寫就。相比之下,這本書更像是一本會議文集。本書的每一章都可以作為一個獨立部分進行閱讀,但是讀者也可以根據(jù)自己的興趣選擇某些章節(jié)重點閱讀。(如果本書中引用了某些額外文章,你可以在參考文獻中找到。) 讀者可以按照任何順序閱讀本書,但是我們推薦從第2 章和第3 章開始。這兩章描述了Google 的生產(chǎn)運行環(huán)境,以及SRE 是如何系統(tǒng)化認知與量化“風險”的(畢竟 “風險” 是SRE zui關注的要點)。讀者當然也可以選擇逐章閱讀,本書邏輯上分為以下幾個部分:理念性介紹(第Ⅱ部分)、zui佳實踐(第Ⅲ部分)和管理經(jīng)驗(第Ⅳ部分)。每一部分都配有簡介,并且配有SRE 成員以前發(fā)表的文章的引用地址。 最后,本書配有網(wǎng)站https://g.co/SREBook,其中包括了一些有益讀物, 希望讀者能從中獲得閱讀的樂趣。 ……
Betsy Beyer,是Google 紐約負責SRE 的一名技術文檔作家。她之前曾為遍布全球的Google 數(shù)據(jù)中心與Mountain View 硬件運維團隊編寫文檔。在搬到紐約之前,Betsy 是Stanford 大學技術性寫作課程的講師。她曾經(jīng)學習國際關系與英文文學,并在Stanford和Tulane 獲得學歷。
Chris Jones,是Google App Engine 的一名SRE。Google App Engine 是一個PaaS 服務,每天處理超過280 億個請求。他的辦公室在舊金山,他之前的工作包括Google 廣告統(tǒng)計、數(shù)據(jù)倉庫,以及用戶支持系統(tǒng)的維護。在之前,Chris 曾經(jīng)在學校IT 行業(yè)任職,同時參與過競選數(shù)據(jù)分析,以及一些BSD 內(nèi)核的修改。他有計算機工程、經(jīng)濟學,以及技術政策學的學位。同時他也是一名有執(zhí)照的職業(yè)工程師。 Jennifer Petoff,是Google SRE 團隊的一名項目經(jīng)理,工作地點在都柏林,愛爾蘭。她曾經(jīng)負責管理大型全球項目,包括:科學研究、工程、人力資源,以及廣告等。Jennifer在加入Google 之前,曾在化工行業(yè)任職八年。她獲得了Stanford 大學的化學博士與學士學位,同時她還擁有Rochester 大學的心理學學位。 Niall Murphy,是Google 愛爾蘭團隊廣告SRE 的負責人。他擁有20 年互聯(lián)網(wǎng)行業(yè)經(jīng)驗,目前是INEX(愛爾蘭網(wǎng)絡互聯(lián)樞紐)的主席。他曾經(jīng)寫作以及參與寫作很多科技文章與書籍,包括O’Reilly 出版的IPv6 Network Administration,以及很多RFC。他目前在參與書寫愛爾蘭互聯(lián)網(wǎng)發(fā)展史。他擁有計算機科學、數(shù)學,以及詩歌學的學歷(他當時一定是想錯了!)。他目前與妻子和兩個兒子居住在都柏林。 孫宇聰,前Google SRE(2007-2015),山景城總部,曾參與構建運維Youtube 全球CDN網(wǎng)絡,2008年奧運會直播項目,構建維護海量視頻編碼傳輸系統(tǒng)。后參與Google內(nèi)部云平臺運維工作,負責運維全球百萬級別服務器集群,以及Borg、Omega等大規(guī)模集群理系統(tǒng)。2015年加入Coding,任CTO一職;貒螅e極推動國內(nèi)容器化運維架構升級。目前是開放運維聯(lián)盟之應用運維規(guī)范制定組,高可用運維規(guī)范制定者。
前言 xxxi
序言 xxxv 第Ⅰ部分 概覽 第1 章 介紹 2 系統(tǒng)管理員模式 2 Google 的解決之道:SRE 4 SRE 方法論 6 確保長期關注研發(fā)工作 6 在保障服務SLO 的前提下最大化迭代速度 7 監(jiān)控系統(tǒng) 8 應急事件處理 8 變更管理 9 需求預測和容量規(guī)劃 9 資源部署 10 效率與性能 10 小結 10 第2 章 Google 生產(chǎn)環(huán)境:SRE 視角 11 硬件 11 管理物理服務器的系統(tǒng)管理軟件 13 管理物理服務器 13 存儲 14 網(wǎng)絡 15 其他系統(tǒng)軟件 16 分布式鎖服務 16 監(jiān)控與警報系統(tǒng) 16 軟件基礎設施 17 研發(fā)環(huán)境 17 莎士比亞搜索:一個示范服務 18 用戶請求的處理過程 18 任務和數(shù)據(jù)的組織方式 19 第Ⅱ部分 指導思想 第3 章 擁抱風險 23 管理風險 23 度量服務的風險 24 服務的風險容忍度 25 辨別消費者服務的風險容忍度 26 基礎設施服務的風險容忍度 28 使用錯誤預算的目的 30 錯誤預算的構建過程 31 好處 32 第4 章 服務質(zhì)量目標 34 服務質(zhì)量術語 34 指標 34 目標 35 協(xié)議 36 指標在實踐中的應用 37 運維人員和最終用戶各關心什么 37 指標的收集 37 匯總 38 指標的標準化 39 目標在實踐中的應用 39 目標的定義 40 目標的選擇 40 控制手段 42 SLO 可以建立用戶預期 42 協(xié)議在實踐中的應用 43 第5 章 減少瑣事 44 瑣事的定義 44 為什么瑣事越少越好 45 什么算作工程工作 46 瑣事繁多是不是一定不好 47 小結 48 第6 章 分布式系統(tǒng)的監(jiān)控 49 術語定義 49 為什么要監(jiān)控 50 對監(jiān)控系統(tǒng)設置合理預期 51 現(xiàn)象與原因 52 黑盒監(jiān)控與白盒監(jiān)控 53 4 個黃金指標 53 關于長尾問題 54 度量指標時采用合適的精度 55 簡化,直到不能再簡化 55 將上述理念整合起來 56 監(jiān)控系統(tǒng)的長期維護 57 Bigtable SRE :警報過多的案例 57 Gmail :可預知的、可腳本化的人工干預 58 長跑 59 小結 59 第7 章 Google 的自動化系統(tǒng)的演進 60 自動化的價值 60 一致性 60 平臺性 61 修復速度更快 61 行動速度更快 62 節(jié)省時間 62 自動化對Google SRE 的價值 62 自動化的應用案例 63 Google SRE 的自動化使用案例 63 自動化分類的層次結構 64 讓自己脫離工作:自動化所有的東西 66 舒緩疼痛:將自動化應用到集群上線中 67 使用Prodtest 檢測不一致情況 68 冪等地解決不一致情況 69 專業(yè)化傾向 71 以服務為導向的集群上線流程 72 Borg :倉庫規(guī)模計算機的誕生 73 可靠性是最基本的功能 74 建議 75 第8 章 發(fā)布工程 76 發(fā)布工程師的角色 76 發(fā)布工程哲學 77 自服務模型 77 追求速度 77 密閉性 77 強調(diào)策略和流程 78 持續(xù)構建與部署 78 構建 78 分支 79 測試 79 打包 79 Rapid 系統(tǒng) 80 部署 81 配置管理 81 小結 82 不僅僅只對Google 有用 83 一開始就進行發(fā)布工程 83 第9 章 簡單化 85 系統(tǒng)的穩(wěn)定性與靈活性 85 乏味是一種美德 86 我絕對不放棄我的代碼 86 “負代碼行”作為一個指標 87 最小 API 87 模塊化 87 發(fā)布的簡單化 88 小結 88 第Ⅲ部分 具體實踐 第10 章 基于時間序列數(shù)據(jù)進行有效報警 93 Borgmon 的起源 94 應用軟件的監(jiān)控埋點 95 監(jiān)控指標的收集 96 時間序列數(shù)據(jù)的存儲 97 標簽與向量 98 Borg 規(guī)則計算 99 報警 104 監(jiān)控系統(tǒng)的分片機制 105 黑盒監(jiān)控 106 配置文件的維護 106 十年之后 108 第11 章 on-call 輪值 109 介紹 109 on-call 工程師的一天 110 on-call 工作平衡 111 數(shù)量上保持平衡 111 質(zhì)量上保持平衡 111 補貼措施 112 安全感 112 避免運維壓力過大 114 運維壓力過大 114 奸詐的敵人—運維壓力不夠 115 小結 115 第12 章 有效的故障排查手段 116 理論 117 實踐 119 故障報告 119 定位 119 檢查 120 診斷 122 測試和修復 124 神奇的負面結果 125 治愈 126 案例分析 127 使故障排查更簡單 130 小結 130 第13 章 緊急事件響應 131 當系統(tǒng)出現(xiàn)問題時怎么辦 131 測試導致的緊急事故 132 細節(jié) 132 響應 132 事后總結 132 變更部署帶來的緊急事故 133 細節(jié) 133 事故響應 134 事后總結 134 流程導致的嚴重事故 135 細節(jié) 135 災難響應 136 事后總結 136 所有的問題都有解決方案 137 向過去學習,而不是重復它 138 為事故保留記錄 138 提出那些大的,甚至不可能的問題:假如…… 138 鼓勵主動測試 138 小結 138 第14 章 緊急事故管理 140 無流程管理的緊急事故 140 對這次無流程管理的事故的剖析 141 過于關注技術問題 141 溝通不暢 141 不請自來 142 緊急事故的流程管理要素 142 嵌套式職責分離 142 控制中心 143 實時事故狀態(tài)文檔 143 明確公開的職責交接 143 一次流程管理良好的事故 144 什么時候?qū)ν庑际鹿省?144 小結 145 第15 章 事后總結:從失敗中學習 146 Google 的事后總結哲學 146 協(xié)作和知識共享 148 建立事后總結文化 149 小結以及不斷優(yōu)化 151 第16 章 跟蹤故障 152 Escalator 152 Outalator 153 聚合 154 加標簽 155 分析 155 未預料到的好處 156 第17 章 測試可靠性 157 軟件測試的類型 158 傳統(tǒng)測試 159 生產(chǎn)測試 160 創(chuàng)造一個構建和測試環(huán)境 163 大規(guī)模測試 165 測試大規(guī)模使用的工具 166 針對災難的測試 167 對速度的渴求 168 發(fā)布到生產(chǎn)環(huán)境 170 允許測試失敗 170 集成 172 生產(chǎn)環(huán)境探針 173 小結 175 第18 章 SRE 部門中的軟件工程實踐 176 為什么軟件工程項目對SRE 很重要 176 Auxon 案例分析:項目背景和要解決的問題 177 傳統(tǒng)的容量規(guī)劃方法 177 解決方案:基于意圖的容量規(guī)劃 179 基于意圖的容量規(guī)劃 180 表達產(chǎn)品意圖的先導條件 181 Auxon 簡介 182 需求和實現(xiàn):成功和不足 183 提升了解程度,推進采用率 185 團隊內(nèi)部組成 187 在SRE 團隊中培養(yǎng)軟件工程風氣 187 在SRE 團隊中建立起軟件工程氛圍:招聘與開發(fā)時間 188 做到這一點 189 小結 190 第19 章 前端服務器的負載均衡 191 有時候硬件并不能解決問題 191 使用DNS 進行負載均衡 192 負載均衡:虛擬IP 194 第20 章 數(shù)據(jù)中心內(nèi)部的負載均衡系統(tǒng) 197 理想情況 198 識別異常任務:流速控制和跛腳鴨任務 199 異常任務的簡單應對辦法:流速控制 199 一個可靠的識別異常任務的方法:跛腳鴨狀態(tài) 200 利用劃分子集限制連接池大小 201 選擇合適的子集 201 子集選擇算法一:隨機選擇 202 子集選擇算法二:確定性算法 204 負載均衡策略 206 簡單輪詢算法 206 最閑輪詢策略 209 加權輪詢策略 210 第21 章 應對過載 212 QPS 陷阱 213 給每個用戶設置限制 213 客戶端側的節(jié)流機制 214 重要性 216 資源利用率信號 217 處理過載錯誤 217 決定何時重試 218 連接造成的負載 220 小結 221 第22 章 處理連鎖故障 223 連鎖故障產(chǎn)生的原因和如何從設計上避免 224 服務器過載 224 資源耗盡 225 服務不可用 228 防止軟件服務器過載 228 隊列管理 229 流量拋棄和優(yōu)雅降級 230 重試 231 請求延遲和截止時間 234 慢啟動和冷緩存 236 保持調(diào)用棧永遠向下 238 連鎖故障的觸發(fā)條件 238 進程崩潰 239 進程更新 239 新的發(fā)布 239 自然增長 239 計劃中或計劃外的不可用 239 連鎖故障的測試 240 測試直到出現(xiàn)故障,還要繼續(xù)測試 240 測試最常用的客戶端 241 測試非關鍵性后端 242 解決連鎖故障的立即步驟 242 增加資源 242 停止健康檢查導致的任務死亡 242 重啟軟件服務器 242 丟棄流量 243 進入降級模式 243 消除批處理負載 244 消除有害的流量 244 小結 244 第23 章 管理關鍵狀態(tài):利用分布式共識來提高可靠性 246 使用共識系統(tǒng)的動力:分布式系統(tǒng)協(xié)調(diào)失敗 248 案例1 :腦裂問題 249 案例2 :需要人工干預的災備切換 249 案例3 :有問題的小組成員算法 249 分布式共識是如何工作的 250 Paxos 概要:協(xié)議示例 251 分布式共識的系統(tǒng)架構模式 251 可靠的復制狀態(tài)機 252 可靠的復制數(shù)據(jù)存儲和配置存儲 252 使用領頭人選舉機制實現(xiàn)高可用的處理系統(tǒng) 253 分布式協(xié)調(diào)和鎖服務 253 可靠的分布式隊列和消息傳遞 254 分布式共識系統(tǒng)的性能問題 255 復合式Paxos :消息流過程詳解 257 應對大量的讀操作 258 法定租約 259 分布式共識系統(tǒng)的性能與網(wǎng)絡延遲 259 快速Paxos 協(xié)議:性能優(yōu)化 260 穩(wěn)定的領頭人機制 261 批處理 262 磁盤訪問 262 分布式共識系統(tǒng)的部署 263 副本的數(shù)量 263 副本的位置 265 容量規(guī)劃和負載均衡 266 對分布式共識系統(tǒng)的監(jiān)控 270 小結 272 第24 章 分布式周期性任務系統(tǒng) 273 Cron 273 介紹 273 可靠性 274 Cron 任務和冪等性 274 大規(guī)模Cron 系統(tǒng) 275 對基礎設施的擴展 275 對需求的擴展 276 Google Cron 系統(tǒng)的構建過程 277 跟蹤Cron 任務的狀態(tài) 277 Paxos 協(xié)議的使用 277 領頭人角色和追隨者角色 278 保存狀態(tài) 281 運維大型Cron 系統(tǒng) 282 小結 283 第25 章 數(shù)據(jù)處理流水線 284 流水線設計模式的起源 284 簡單流水線設計模式與大數(shù)據(jù) 284 周期性流水線模式的挑戰(zhàn) 285 工作分發(fā)不均造成的問題 285 分布式環(huán)境中周期性數(shù)據(jù)流水線的缺點 286 監(jiān)控周期性流水線的問題 287 驚群效應 287 摩爾負載模式 288 Google Workflow 簡介 289 Workflow 是模型—視圖—控制器(MVC)模式 290 Workflow 中的執(zhí)行階段 291 Workflow 正確性保障 291 保障業(yè)務的持續(xù)性 292 小結 294 第26 章 數(shù)據(jù)完整性:讀寫一致 295 …… 第27 章 可靠地進行產(chǎn)品的大規(guī)模發(fā)布 322 …… 第Ⅳ部分 管理 第28 章 迅速培養(yǎng)SRE 加入on-call 341 …… 第29 章 處理中斷性任務 355 …… 第30 章 通過嵌入SRE 的方式幫助團隊從運維過載中恢復 363 …… 第 31 章 SRE 與其他團隊的溝通與協(xié)作 370 …… 第32 章 SRE 參與模式的演進歷程 383 …… 第Ⅴ部分 結束語 第33 章 其他行業(yè)的實踐經(jīng)驗 398 …… 第34 章 結語 408 附錄A 系統(tǒng)可用性 411 附錄B 生產(chǎn)環(huán)境運維過程中的最佳實踐 412 附錄C 事故狀態(tài)文檔示范 417 附錄D 事后總結示范 419 附錄E 發(fā)布協(xié)調(diào)檢查列表 423 附錄F 生產(chǎn)環(huán)境會議記錄示范 425 參考文獻 427 索引 439
譯者序
當我在2016 年年初聽說本書的英文版即將面世時,第一時間就意識到這將是一本不可多得的經(jīng)典之作。我作為Google SRE 曾經(jīng)的一員,看到本書中提到的那些熟悉的技術和理念時非常興奮——現(xiàn)在終于有機會用一種體系化、結構化的方式將這些知識和技術與大家分享了! Google SRE 全球共計約1000 人,負責運維Google 的大部分家喻戶曉、不可或缺的商業(yè)應用。同時,SRE 還負責運維幕后那些全球首屈一指的計算基礎設施,不管是全球百萬臺級別的服務器集群,還是全球一流的網(wǎng)絡架構,背后都有SRE 的身影。每個小的傳統(tǒng)運維問題在這個平臺上似乎都被無限放大了。但是與此同時,Google 恰恰又是利用最傳統(tǒng)、最樸素的軟件工程方法將其一一解決的。 SRE 是一群天生的懷疑論者,我們懷疑一切宣傳起來“高大上”的技術,以及任何“神奇”的產(chǎn)品——我們只想看具體的設計架構、實現(xiàn)細節(jié),以及真實的監(jiān)控圖表。SRE 在保障系統(tǒng)可靠性方面并沒有什么萬能藥,有的只是這種極強的務實態(tài)度(pragmatic)。這種務實的態(tài)度決定了SRE 會認真對待運維問題。在設計評審中,他們會認真推演各種災難場景。在每周例會時,他們又會討論如何消除和防范事故發(fā)生、優(yōu)化各種警報策略以及增強自動化功能。在平時工作中,他們則會精心維護團隊的各種文檔和項目源代碼,一點一點地提高服務質(zhì)量;仡^看來,SRE 其實是一群崇尚工匠主義的人,我們堅信只要不斷地解決根源問題,服務質(zhì)量就一定會得到提升。而SRE 正是用這種“日拱一卒”的方法造就了Google 這個世界級的奇跡。 本書的風格亦是如此。書中很多章節(jié)用務實的語言記錄了Google SRE 團隊在面臨各種困難時的思考過程、所采用的解決方案以及事后總結的經(jīng)驗教訓。本書中沒有介紹任何“魔法系統(tǒng)”,也沒有提供任何“奇技淫巧”,有的只是對問題本質(zhì)發(fā)人深省的深入探討。從這種意義上講,本書體系化地覆蓋了運維工作的方方面面,是一本運維行業(yè)的教科書。我希望通過翻譯此書,能將這種體系和理念分享給更多的人。期待與大家更深入地探討與交流! 回首在Google 度過的8 年時光,我想感謝我所有的前同事,感謝他們對我的各種幫助,這段職業(yè)經(jīng)歷是我終生難忘的。而且,我還要感謝我的家人,是他們的耐心陪伴和幫助才讓我踏踏實實地度過了這200 多個小時,完成了我人生中最大的一個Project。 孫宇聰 2016 年8 月3 日 傍晚
你還可能感興趣
我要評論
|