01 / 導讀
導讀
引用
Coulouris, G., Dollimore, J., Kindberg, T., & Blair, G. (2011). Distributed Systems: Concepts and Design (5th ed.). Pearson.
章節概要
全書共 21 章,作者把它們安排在七個主題領域之下。他們宣告的目標,是闡明網際網路和其他分散式系統所依據的原理,以及它們的架構、演算法和設計;採用自頂向下的方法,用抽象模型、演算法和詳細的案例研究來講述。下面各章按作者自己的組織方式封包。
第 1–2 章:Characterization of Distributed Systems(分散式系統的特徵);System Models(系統模型)
前兩章提供概念性的總覽。第 1 章涵蓋分散式系統的例項、趨勢、資源共享、主要挑戰(前言指出可擴充性、異構性、安全和故障處理最為重要),並以全球資訊網作為案例研究。第 2 章為行程互動、故障和安全建立實體模型、架構模型和基礎模型。
第 3–7 章:Networking and Internetworking(網路與網際網路絡);Interprocess Communication(行程間通訊);Remote Invocation(遠端呼叫);Indirect Communication(間接通訊);Operating System Support(作業系統支援)
這些基礎章節先講與分散式系統相關的網路(網路型別、網路原理、網際網路協定,以及乙太網路、WiFi 和藍牙作為案例研究),然後是網際網路協定的 API、資料編組、多播、覆蓋網路和 MPI。遠端呼叫涵蓋請求-應答協定、遠端程式呼叫和 Java RMI。本版新增的第 6 章間接通訊涵蓋組通訊、釋出-訂閱、訊息佇列和共享記憶體方法,第 7 章則講作業系統層、保護、行程與執行緒,以及作業系統級虛擬化。
第 8–10 章:Distributed Objects and Components(分散式物件與元件);Web Services(Web 服務);Peer-to-Peer Systems(對等系統)
中介軟體各章考察支援分散式應用的不同方式。第 8 章從分散式物件(以 CORBA 為案例研究)講到元件(Enterprise JavaBeans 和 Fractal)。第 9 章涵蓋 Web 服務、服務描述與目錄服務、XML 安全、協調及應用。第 10 章涵蓋對等系統,從 Napster 到中介軟體、路由覆蓋網路(Pastry、Tapestry)和應用案例研究(Squirrel、OceanStore、Ivy)。
第 11–13 章:Security(安全);Distributed File Systems(分散式檔案系統);Name Services(名字服務)
第 11 章介紹安全技術、密碼演算法、數字簽名和密碼學實務,以 Needham–Schroeder、Kerberos、TLS 和 802.11 WiFi 作為案例研究。第 12 章描述檔案服務架構,以 Sun NFS 和 Andrew 檔案系統為案例研究;第 13 章涵蓋名字服務、DNS 和目錄服務,以全域性名字服務(Global Name Service)和 X.500 為案例研究。
第 14–15 章:Time and Global States(時間與全域性狀態);Coordination and Agreement(協調與協定)
這是本書關於定時與協調演算法的章節:實體時鐘同步、邏輯時間、全域性狀態和分散式除錯,然後是分散式互斥、選舉、組通訊中的協調與協定,以及共識。
第 16–18 章:Transactions and Concurrency Control(事務與並行控制);Distributed Transactions(分散式事務);Replication(複製)
與資料相關的各章,從事務、巢狀事務、鎖、樂觀並行控制和時間戳排序,講到分散式事務(原子提交、分散式死鎖、恢復),再到複製(容錯服務、gossip 架構、Bayou 和 Coda,以及帶複製資料的事務)。
第 19–20 章:Mobile and Ubiquitous Computing(行動與普適計算);Distributed Multimedia Systems(分散式多媒體系統)
第 19 章涵蓋關聯、互操作、感知與情境感知、安全與隱私、自適應,並以 Cooltown 作為案例研究。第 20 章涵蓋多媒體資料的特點、服務質量與資源管理、流適應,以及 Tiger、BitTorrent 和 End System Multicast 案例研究。
第 21 章:Designing Distributed Systems: Google Case Study(設計分散式系統:Google 案例研究)
最後一章是對 Google 基礎設施的一個相當詳盡的案例研究:整體架構和設計理念、通訊範式、資料儲存與協調服務,以及分散式計算服務。前言把它說成是展示本書的架構概念、演算法和技術如何匯聚成一個完整設計的一章。
核心概念
第 1–7 章:基礎
- 挑戰與模型:可擴充性、異構性、安全和故障處理,由實體模型、架構模型和基礎模型來刻畫。
- 遠端呼叫與間接通訊:請求-應答、RPC 和 RMI,以及組通訊、釋出-訂閱和訊息佇列。
第 8–13 章:中介軟體與服務
- 分散式物件與元件、Web 服務、對等系統:支援分散式應用的三種方式。
- 安全、檔案服務與命名:密碼學與認證協定、NFS 與 AFS,以及 DNS 與目錄服務。
第 14–18 章:演算法與資料
- 邏輯時間與全域性狀態:在沒有共享時鐘的情況下對事件排序。
- 協調與協定:互斥、選舉與共識。
- 事務與複製:並行控制、原子提交和容錯的複製服務。
第 19–21 章:新興領域與 Google 案例
- 行動與普適計算及多媒體:情境感知、服務質量和流適應。
- Google 基礎設施:本書思想的端到端應用。
評析
優點
- 廣度與案例研究並重。 許多章節把概念與具體的真實系統配對:Java RMI、CORBA、Enterprise JavaBeans、Pastry、OceanStore、NFS、AFS、Kerberos、Bayou 和 Coda 等,最後一章則展示許多思想如何在 Google 基礎設施中匯聚。
- 演算法單獨成章。 時間、協調與協定、事務和複製各有專門的章,所以演算法核心與系統描述分開。
- 清晰的閱讀路線。 前言把各章分入七個主題領域,附有展示全書結構和建議閱讀路線的圖,並指出第 6 章內容很多,教師可以從中挑選幾種技術來講。
- 教學支援。 作者網站提供各章的講授要點、幻燈片、實驗專案、書中程式的源程式碼和補充材料,習題解答則只面向教師。
侷限
- 篇幅很大。 21 章,加上範圍很廣的中介軟體和應用主題,一門課程不可能全部講完,教師和自學者必須做取捨。
- 成書於 2011 年。 本版早於該領域後來的發展,Web 服務、分散式物件和 Google 各章中的技術反映的是寫作時的實踐狀況。
- 移出的內容。 第四版的兩章(CORBA 案例研究和分散式共享記憶體)已不在書中,只能從作者網站獲得。
- 前向引用。 前言提醒,有些主題需要前向引用;例如第 9 章中的 XML 安全內容,要在讀過其所引用的第 11 章相關小節之後才更容易理解。
在課程中的定位
Coulouris 等人的這本書是分散式系統課程中廣泛而案例豐富的教材。van Steen 和 Tanenbaum 的 Distributed Systems 以原理優先的方式組織架構、行程、通訊、命名、協調、一致性、容錯和安全,版本較新(2023 年,作者網站提供免費副本);兩書可互為替代,本書則給中介軟體、安全和詳細案例研究更多篇幅。Vitillo 的 Understanding Distributed Systems 是面向開發者的簡明入門,可以先讀;Kleppmann 和 Riccomini 的 Designing Data-Intensive Applications 從實踐角度討論複製、分割槽和資料系統的權衡,與第 16 至 18 章互補。
Cachin、Guerraoui 和 Rodrigues 的 Introduction to Reliable and Secure Distributed Programming 是研究生教材,精確規定廣播和共識抽象,是讀完第 14、15 章之後自然的下一步。Pacheco 的 An Introduction to Parallel Programming 適合關注並行機器和叢集程式設計的讀者,本書主要透過 MPI 涉及這一領域。
如何使用本書
作者面向本科和入門研究生課程,也適合自學。他們假定讀者具備面向物件程式設計、作業系統和基本電腦架構的基礎知識;演算法用 Java 或 ANSI C 以及由它們衍生的偽程式碼給出。
實用的安排:
- 核心: 先讀第 1、2 章,然後讀第 4、5 章和第 6 章的若干部分,再讀第 14、15 章,以及關於演算法和資料的第 16 至 18 章。
- 按需閱讀: 不熟悉網路的讀者讀第 3 章;想了解作業系統支援的讀第 7 章;根據對中介軟體、Web 服務或對等系統的興趣選讀第 8 至 10 章;第 11 至 13 章講安全、檔案系統和命名。
- 可選: 第 19、20 章,關於行動、普適和多媒體系統。
- 壓軸: 概念熟悉之後讀第 21 章,看它們如何一起體現在 Google 基礎設施中。
- 練習: 使用作者網站上的實驗專案和源程式碼,以及書中的習題。
