索引 / 001 ZH-CN
Distributed Systems: Concepts and Design(分布式系统:概念与设计) cover

计算机科学

计算机科学

Distributed Systems: Concepts and Design(分布式系统:概念与设计)

George Coulouris; Jean Dollimore; Tim Kindberg; Gordon Blair

英文原名: Distributed Systems: Concepts and Design

一本由以英国为主的作者团队编写的分布式系统原理与设计教材,最初源于伦敦大学玛丽女王学院的教学。全书从系统模型和通信出发,经过中间件、安全、分布式文件服务和名字服务,讲到时间、协调、事务和复制,最后以对谷歌基础设施的详细案例研究收尾。

需要的基础: 程序设计、操作系统和计算机网络课程;熟悉 Java 有助于理解代码示例。

难度等级
中级
学术层次
本科
distributed systemsmiddlewarefault tolerancereplicationdistributed algorithms教科书

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