索引 / 001 ZH-CN
Distributed Systems(分布式系统) cover

计算机科学

计算机科学

Distributed Systems(分布式系统)

Maarten van Steen; Andrew S. Tanenbaum

英文原名: Distributed Systems

一部以原理为先的分布式系统教材,讲解体系结构、进程、通信、命名、协调、一致性、复制、容错与安全,并把现有系统的实例放在所阐释的原理旁边。第4版增加了区块链系统的内容,并把全部代码示例更新为Python 3。读者登记电子邮箱后,可从作者处免费获得个人专属的数字版。

需要的基础: 具备入门级的操作系统与计算机网络知识以及编程经验;书中的Python示例短小易读。

难度等级
中级
学术层次
本科
distributed systemsconsistencyreplicationfault toleranceopen access教科书

01 / 导读

导读

引用

van Steen, M., & Tanenbaum, A. S. (2023). Distributed Systems (4th ed.). distributed-systems.net. 作者网站提供免费的个人化副本:https://www.distributed-systems.net/index.php/books/ds4/

章节概要

全书共九章。据作者的页面介绍,本版与第三版的结构保持接近:现有分布式系统的实例放在与其相应的一般原理旁边,初读时可以跳过的内容放在加框的小节里,区块链系统及其组成部分贯穿全书讨论。所有 Python 代码都已更新到 Python 3,完整的示例可从作者网站获得。

第 1 章:Introduction(引言)

开篇一章从联网系统讲到分布式系统,并区分分布式系统与去中心化系统。它提出设计目标(资源共享、分布透明性、开放性、可靠性、安全和可扩展性),对分布式系统进行分类(集群和网格计算等高性能计算、分布式信息系统与应用集成,以及包括移动计算和传感器网络在内的普适系统,并涉及云-边缘连续体),最后讨论开发分布式系统时的陷阱。

第 2 章:Architectures(体系结构)

第 2 章从体系结构风格(分层、基于对象、RESTful,以及发布-订阅或基于协调的风格)和中间件的作用讲起,然后比较系统体系结构:分层与多层的集中式设计,对称分布式设计(结构化与非结构化对等系统、超级节点、BitTorrent),以及混合设计(云计算、边缘服务器体系结构和区块链)。

第 3 章:Processes(进程)

本章涵盖线程、虚拟化(包括容器,以及虚拟机与云计算的关系)、客户端、服务器(总体组织、状态、对象服务器,示例包括 Apache 和内容分发网络),以及代码迁移,包括虚拟机的迁移。

第 4 章:Communication(通信)

本章从分层协议和通信类型讲起,然后讲远程过程调用、面向消息的通信(套接字、请求-应答、发布-订阅、管道、MPI,以及基于消息代理的队列式消息传递)和多播通信,包括应用层多播和用于信息传播的流行病协议。

第 5 章:Coordination(协调)

第 5 章涵盖时钟同步、逻辑时钟与向量时钟、互斥与选举算法,以 ZooKeeper、Raft 以及工作量证明或权益证明式选举为例。随后转向基于 gossip 的协调、分布式事件匹配,以及 GPS 和 Vivaldi 等定位系统。

第 6 章:Naming(命名)

命名一章区分名字、标识符和地址,涵盖平面命名(广播、转发指针、基于家乡的方法、Chord 等分布式散列表)、结构化命名(名字空间、解析、DNS、NFS)、基于属性的命名(目录服务、LDAP)和命名数据网络。

第 7 章:Consistency and Replication(一致性与复制)

本章先解释为什么要复制数据,然后讲以数据为中心的一致性模型(顺序一致性、因果一致性、最终一致性和连续一致性)、以客户为中心的一致性模型(单调读与单调写、读己之写、写跟随读)、副本管理、一致性协议(基于主节点的协议和复制写协议),以及 Web 中的缓存与复制。

第 8 章:Fault Tolerance(容错)

本章先介绍可靠性与故障模型,然后讲进程弹性与共识,涵盖基于泛洪的共识、Raft、Paxos 和拜占庭容错(PBFT),并包括 CAP 定理。接着是可靠的客户端-服务器通信与组通信、分布式提交(两阶段提交),以及通过检查点和消息日志进行的恢复。

第 9 章:Security(安全)

安全一章涵盖安全威胁、策略和机制(包括隐私与 GDPR)、密码学、认证(共享密钥、Needham-Schroeder、公钥、Kerberos、TLS)、分布式系统中的信任(女巫攻击与日蚀攻击、区块链方法)、授权(访问控制、委托、OAuth),以及通过防火墙和入侵检测进行监控。

核心概念

第 1–4 章:基础

  • 分布透明性与可扩展性:对用户和应用隐藏分布,并在规模和地域上增长。
  • 体系结构风格与中间件:组件和连接器如何组织,包括对等、云、边缘和区块链系统。
  • 虚拟化与代码迁移:在多台机器之间运行和迁移软件。
  • RPC 与面向消息的通信:进程交换数据的主要方式。

第 5–6 章:协调与命名

  • 逻辑时钟与向量时钟:在没有全局时钟的情况下给事件排序。
  • 互斥与选举:协调访问并选出领导者。
  • 平面、结构化与基于属性的命名:定位实体,以 Chord 和 DNS 为例。

第 7–9 章:一致性、容错与安全

  • 一致性模型:针对复制数据的以数据为中心和以客户为中心的保证。
  • 共识与分布式提交:Paxos、Raft、PBFT 和两阶段提交。
  • 认证、授权与信任:密码协议与访问控制。

评析

优点

  • 原理优先,系统相伴。 作者说明现有系统的实例被放在讨论一般原理的地方,各章围绕反复出现的问题(命名、协调、一致性、容错)展开,而不是罗列产品。
  • 可运行的代码。 所有 Python 代码已更新到 Python 3,作者称几乎所有示例都可以通过一个简单脚本运行;完整的示例和插图放在可下载的压缩包中。
  • 主题新。 区块链系统贯穿全书,目录中包括云与边缘体系结构、容器、Raft 与 Paxos、拜占庭容错、GDPR 和 OAuth。
  • 开放获取。 个人化的电子版是免费的,另有 PDF 和 PPTX 格式的整套幻灯片,并提供幻灯片的 LaTeX 源文件。
  • 标出可选内容。 加框的小节初读时可以跳过,新手可以顺着主线读下去。

局限

  • 关于数据系统的章节较少。 事务、分布式文件系统和多媒体都没有独立成章:NFS 示例出现在体系结构和命名之下,嵌套事务出现在第 1 章应用集成的讨论中。想多了解存储和事务的读者需要另一本书。
  • 实践中的摩擦。 作者指出,有些示例需要安装 Redis 等特殊软件包,而且免费副本的申请可能需要一段时间才能处理。
  • 自行出版。 本书由作者自己发行,纸质版通过 Amazon 出售,后来的版本(4.01 到 4.03)带有小的更正,所以读者应确认自己和课程使用的是哪个版本。
  • 代码经过简化。 正如作者所说,代码示例为了易读省略了许多细节,所以它们用于说明思想,而不是生产级实现。

在课程中的定位

van Steen 和 Tanenbaum 的这本书是本课程书目中原理优先的分布式系统教材。Coulouris、Dollimore、Kindberg 和 Blair 的 Distributed Systems: Concepts and Design 更长(21 章)、更早(2011 年),给中间件、安全、事务和详细的案例研究更多篇幅,所以两书可以互相替代或互补。Vitillo 的 Understanding Distributed Systems 是面向开发者的简明入门,可以先读;Kleppmann 和 Riccomini 的 Designing Data-Intensive Applications 是对数据系统的实用研究,涵盖复制、分区和流处理,填补了上面提到的存储和事务方面的空白。

Cachin、Guerraoui 和 Rodrigues 的 Introduction to Reliable and Secure Distributed Programming 是研究生教材,精确规定广播、共享内存和共识抽象,是读完本书第 5 章和第 8 章之后自然的下一步。Pacheco 的 An Introduction to Parallel Programming 则是另一条路线,教人在多核机器和集群上编写并行程序。

如何使用本书

本书适合高年级本科生和研究生一年级学生的分布式系统课程,也适合构建联网服务的软件工程师。作者的页面没有列出先修要求;一些编程经验有助于理解 Python 示例,操作系统和网络方面的一些背景则有助于理解进程和通信两章。

实用的安排:

  • 核心: 第 1、2 章,然后是第 4 章(通信)、第 5 章(时钟、互斥、选举)、第 7 章(一致性与复制)和第 8 章(容错与共识)。
  • 选读: 操作系统背景薄弱的读第 3 章;第 6 章讲命名;第 9 章讲安全,可以独立阅读。
  • 练习: 下载代码和插图压缩包,运行 Python 示例(安装所需软件包),并用幻灯片复习。初读时跳过加框的小节。
  • 核对版本: 使用免费副本的当前版本(4.03 或更高),因为作者在做小的更正时保持页码不变。