📘 深度概覽
作者背景#
伯恩斯(Brendan Burns)是 Kubernetes 的共同創造者之一。他在 Google 期間參與網頁搜尋基礎設施的建置,隨後與 Joe Beda、Craig McLuckie 一同啟動 Kubernetes 專案;離開 Google 後轉任微軟,主導 Azure 的容器與雲原生產品線。學術背景上,他擁有電腦科學博士學位(研究領域為機器人學),並曾在大學任教。
本書的寫作動機直接來自他的職涯挫折感。他在前言中自陳:從網頁搜尋到雲端,他打造過大量可擴展、可靠的分散式系統,但這些系統幾乎都是從零開始重建——概念相同、甚至邏輯幾乎一致,套用模式或重用元件卻始終非常困難,時間因此浪費在重複實作上,系統品質也不如預期。容器與容器編排器的出現,在他看來終於提供了「一種物件與介面」,讓核心的分散式系統模式第一次有機會被表達成可重用的元件。這個判斷同時解釋了他為何要創造 Kubernetes,以及為何要寫這本書。
完整摘要#
本書的中心類比只有一個,但它撐起全書:容器之於分散式系統,正如物件之於單機程式。作者指出,今日建構分散式系統的處境,與物件導向語言出現之前的軟體開發驚人地相似——每個系統都是一次性的客製解法(one-off bespoke solutions),沒有共用詞彙,沒有可重用的建構區塊。而這種處境已經不可持續,因為「幾乎所有應用都必須是分散式系統」:永遠在線的可用性要求、病毒式成長帶來的即時擴展需求,把過去只有少數關鍵任務服務才需面對的難題,推給了每一個消費性 App 與後端服務。
作者要做的事,是把資深工程師腦中的隱性知識結晶成一套模式語彙,讓分散式系統開發「從藝術轉變為科學」。全書因此依模式的作用範圍分成三部。
第一部:單節點模式。 一本談分散式系統的書卻從單機開始,理由是「共同部署在單一機器上的容器群組,正是分散式系統模式的原子元素」。作者先論證為何單機上的元件也該拆成多個容器——容器邊界同時提供資源隔離(可為背景載入器與面向使用者的伺服器設定不同優先級,讓前者機會性地使用空閒 CPU)、團隊所有權與關注點分離三種價值。在此基礎上展開 Sidecar(在不修改既有容器的前提下擴充功能,如加上 HTTPS 轉接或日誌收集)、Ambassador(以代理解耦對外部服務的存取,如分片路由或實驗流量切分)與 Adapter(把異質元件轉換成統一介面,如監控與日誌格式的標準化)三個模式。這一部是全書最具原創性、也最常被後續文獻引用的部分。
第二部:服務模式。 轉向多節點,關鍵差異是耦合方式——單節點模式依賴磁碟、網路介面與行程間通訊等本地共享資源,是緊耦合共生系統;多節點模式則透過網路呼叫、平行發送與鬆散同步協調。本部涵蓋長時間運行服務的模式:無狀態的複製式負載平衡服務(含健康檢查與就緒探針的設計)、分片服務(分片函式的選擇與熱點問題)、Scatter/Gather(把查詢廣播到所有分片再彙整,以及尾端延遲問題)、函式與事件驅動處理(FaaS 適用與不適用的場景),以及所有權選舉(分散式鎖與租約)。
第三部:批次運算模式。 與長時間運行的服務相反,批次行程只運行一小段時間,特徵是需要快速處理大量資料並以平行化加速。除了已自成產業的 MapReduce 之外,本部整理了工作佇列、事件驅動的批次處理與協調式批次處理等模式。
結語回到全書的歷史論證:軟體史上每一次「需求超出人力供給」的局面,都由新的抽象層化解——編譯器與高階語言是一次,物件導向與受控程式碼是另一次。每一次躍進的機制都相同:把專家的知識與實務結晶成一系列演算法與模式,讓範圍大得多的實務工作者得以套用,開發者的圈子因而擴大。作者主張容器編排正處在同樣的時刻,而本書是那套「標準函式庫」的初稿。
本書的貢獻與定位#
本書的獨特貢獻是詞彙而非技術。Sidecar、Ambassador、Adapter 這組命名經由本書進入業界共同語言,此後的 service mesh 論述幾乎都建立在這個詞彙表上。它填補的空缺介於兩類既有書籍之間:一類是《Designing Data-Intensive Applications》這樣講原理與取捨的理論著作,另一類是 Kubernetes 操作手冊;本書兩者都不是,它處理的是「已經有了編排平台,該怎麼組織你的系統」這個中間層問題。
與同工作區的《Kubernetes Patterns》相比,兩本書的關係值得留意:本書更抽象、更短(約 160 頁)、刻意保持平台中立——雖然範例用 Kubernetes,但模式本身不依賴它;《Kubernetes Patterns》則深入平台細節,覆蓋面廣得多。先讀本書建立心智模型、再讀後者補齊實作,是合理的順序。
它挑戰的既有觀點是「分散式系統只能靠資深工程師的直覺與經驗打造」。作者的立場是這種狀態不是分散式系統的本質,而是抽象層尚未成熟的症狀。主要受眾是要為既有應用設計容器化架構的工程師與架構師。它的限制也很明顯:模式的深度有限,每個模式大約十頁,缺乏失敗模式與生產環境細節的討論;且成書於 2018 年,服務網格與 serverless 生態此後變化甚大,書中對這些領域的判斷需要以今日的視角重新檢視。
