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 基础设施中。
- 练习: 使用作者网站上的实验项目和源代码,以及书中的习题。
