下面的表述是否真實?1)最為可靠的系統是使用廉價、不可靠的組件構建的。
2) Google為數十億用戶服務所用的技術遵循的模式,與你處理數千名用戶的系統所遵循的模式相同。
3)某種過程的風險越大,你越應該嘗試。
4)某些最重要的軟件功能是用戶從未發現的。
5)你應該隨意選擇一些機器,并關閉其電源。
6) Facebook在接下來六個月中所要發布的代碼,其功能可能已經在你的瀏覽器中出現了。
7)每天多次更新軟件所需要的人工很少。
8)隨時待命并不一定是一種緊張、痛苦的體驗。
9)你不應該監控機器是否啟動。
10)運營和管理可以通過試驗和證明的科學原理進行。
11)Google已經對僵尸攻擊時的對策進行了演練。
這些表述都是真實的,當你讀完本書,就會知道原因。
本書講述的是大規模云服務(數百萬甚至數十億用戶使用的基于互聯網的服務)的構建和運行。每天,都有越來越多的企業采用這些技術,因此,本書是為所有人寫的。
本書的目標讀者是系統管理員和他們的經理。你無需計算機科學的背景,但是你應該有Unix/Linux系統管理、聯網的經驗,以及操作系統的概念。
我們重點關注構建和運營組成“云”的服務,而不是指導云服務的使用。
云服務必須是可用的、快速的和安全的。考慮到云的規模,這將是獨特而杰出的工程成就。因此,云規模服務設計不同于典型的企業服務。可用性很重要,因為互聯網是7×24開放的,用戶處于各個時區。快速的重要性在于用戶會因為慢速的服務而感到沮喪,所以緩慢的服務會被更快的競爭者所取代。安全的重要性則在于,作為他人數據的托管者,我們義不容辭(而且負有法律責任)地要保護人們的數據。
這些要求是互相交織的。如果網站不安全,當然也就不可能可靠。如果網站速度不快,可用性也就不足。如果網站下線,當然就不可能快速。
最明顯的云規模服務是網站。但是,還有一個巨大的無形互聯網訪問服務生態系統,這些服務不是通過瀏覽器訪問的。例如,智能手機應用通過API調用訪問云服務。
在本書余下的部分中,我們傾向于使用“分布式計算”而非“云計算”。云計算是一個營銷用語,對不同的人有不同的含義。分布式計算描述了使用許多機器(而非單一機器)提供應用程序和服務的一種架構。
本書介紹的是不受時間影響的基本原理及方法。因此,我們不推薦使用特定的產品或者技術。我們可以提供前5種最流行的Web服務器、NoSQL數據庫或者持續構建系統的對比,但是如果這么做,本書就會在出版的那一刻過時。相反,我們討論的是選擇這些系統時應該注意的特質,提供一種工作模式。這種方法的意圖是幫助你在技術不斷變化的漫長職業生涯中始終做好準備。當然,我們將用具體的技術和產品說明我們的觀點,但是不代表我們支持這些產品和服務。
本書有時看似理想化,這是故意為之。我們想為讀者提供事物將會如何發展、該堅持什么原則的愿景,目的是更上一層樓。
關于本書本書分為兩個部分——設計和運營。
第一部分捕捉我們在大規模、復雜、基于云的分布式計算系統設計上的想法。在引言之后,我們從下向上逐層介紹設計的每個要素。我們從系統管理員(而非計算機科學家)的角度介紹分布式系統,要運營一個系統就必須理解其內部原理。
第二部分描述如何運營這些系統。前面幾章介紹最基本的問題。后面幾章深入更為復雜的技術活動,然后是概要規劃和將以上要素組合起來的戰略。
最后是附加材料,包括運營團隊的評估系統、被歪曲的分布式計算歷史、正文中提及的表單模板、建議閱讀的材料以及其他參考材料。
我們滿懷興奮之情介紹本系列書籍中的一個新特征:運營評估系統。這個系統由一系列評估活動組成,你可以用它們評估自己的運營,找出需要改進的領域。評估問題和“搜索”建議可以在附錄A中找到。第20章是該系統的說明。
致謝沒有我們所在社區及來自全球的幫助及反饋,本書就不可能出版。DevOps社區慷4慨地提供了幫助。
首先,我們要感謝我們愛人和家人:Christine Polk、Mike Chalup、Eliot和Joanna Lear。
他們的愛和耐心成就了一切。
之所以我們能夠看得更遠,那是因為我們站在巨人的肩上。某些章節在很大程度上得到了下列人士的支持和建議:John Looney和Cian Synnott(第1章);Marty Abbott和Michael Fisher(第5章);Damon Edwards\ Alex Honor和Jez Humble(第9章和第10章);John Allspaw(第12章);Brent Chapman(第15章);Caskey Dickson和Theo Schlossnagle(第16章和17章);Arun Kejariwal和Bruce Yan(第18章);Benjamin Treynor Sloss(第19章);Geoff Halprin(第20章和附錄A)o感謝Gene Kim“有策略”的啟發和鼓勵。有幾十位人士幫助過我們——有些人提供奇聞軼事,有些人審核某些部分或者整本書。感謝他們所有人的公平方式是按照字母順序排列,并預先向我們遺漏的所有人道歉:Thomas Baden. George Beech. RaymondBlum. Kyle Brandt. Mark Burgess. Nick Craver. Geoff Dalgas\ Robert P.J.Day,Patrick Debois. Bill Duane. Paul Evans. David Fullerton. Tom Geller. Peter Grace.Elizabeth Hamon Reid. Jim Hickstein\ Zachary Hueras. Matt Jones. Jennifer Joy. JimmyKaplowitz. Daniel v.Klein. Steven Levine. Cory Lueninghoener. Shane Madden. JimMaurer. Stephen McHenry. Dinah McNutt. Scott Hazen Mueller\ Steve Murawski. MohitMuthanna. Lenny Rachitsky. Amy Rich. Adele Shakal\ Bart Silverstrim. Josh Simon.Joel Spolsky. Desiree Sylvester. Win Treese. Todd Underwood\ Nicole Forsgren Velasquez和Dave Zwiebacko最后(但并非不重要),感謝Addison-Wesley的所有人,特別要感謝Debra WilliamsCauley將我們引見給Addison-Wesley,并在整個過程中為我們掌舵;感謝Michael Thurston對本書初稿的編輯和改進,使之更加完美;感謝Kim Boedigheimer的協調工作以及在我們驚慌的時候幫助我們保持鎮靜;感謝我們的LaTeX奇才Lori Hughes;感謝產品經理Julie Nahil;感謝文字編輯Jill Hobbs;還要感謝John Fuller和Mark Taub忍受我們的特殊要求!
第一部分設計:構建系統第1章分布式世界中的設計概述分布式系統的設計。
第2章為運營而設計為了實現平穩運營而應該具備的軟件功能。
第3章選擇服務平臺物理機和虛擬機,私有云和公共云。
第4章應用程序架構創建Web和其他應用程序的基本組件。
第5章伸縮性設計模式擴增服務所用的基本組件。
?第6章彈性設計模式
創建可幸免于故障的系統的基本組件。
第二部分運營:運行系統
第7章分布式世界中的運營
分布式系統運行方式概述。
第8章 DevOps文化
DevOps文化、歷史和實踐簡介。
第9章服務交付:構建階段
如何構建服務和準備投產。
第1 0章服務交付:部署階段
服務如何測試、批準和投產。
第11章升級運行中的服務
如何在不停機的情況下升級服務。
第1 2章 自動化
創建工具和自動化運營工作。
第1 3章設計文檔
書面交流設計和意圖。
第14章隨時待命
處理異常情況。
第1 5章災難準備
通過規劃和實踐強化系統。
第1 6章監控基礎知識
監控術語和策略。
第1 7章監控架構與實踐
監控組件和方法。
第1 8章容量規劃
在需要之前規劃并提供附加資源。
第19章建立KPI
通過計量和反思科學地推動行為。
第20章卓越運營
持續改善的戰略。
第三部分附錄
附錄A評估
?附錄B分布式計算和云的起源及未來
附錄C伸縮性術語和概念
附錄D模板和示例
附錄E推薦讀物
后記
最后的一些想法。
參考文獻
機工授權書