作者:Roger Wattenhofer

1.1 什么是分布式系统?

如今的计算和信息系统天生就是分布式的。许多公司的业务具有全球规模,在每个大陆都有几千甚至几百万台机器。数据保存在各种数据中心,计算任务在多台机器上执行。

光谱的另一端,我们的手机也是分布式的。它不仅很可能把你的数据在云上分享,手机本身也包含多个处理和存储单元。

并且,这些年来计算机得到了长足发展。在 1970 年代早期,微芯片的时钟率大约是 1 MHz。十年后,1980 年代早期,时钟率达到大约 10 MHz。1990 年代早期,达到 100 MHz。2000 年代早期第一个 1 GHz 的处理器被送到消费者手上。几年后,2000 年代中期,已经可以买到 3 到 4 GHz 的处理器了。如果你现在买一台电脑,很可能其时钟率仍然是 3 到 4 GHz 之间,因为 2004 年后时钟率基本上停止增长了。看起来时钟率不大可能持续增长而不遇到诸如过热这样的物理问题。

作为总结,今天几乎所有的计算机系统都是分布式的,因为以下不同原因:

  • 地理:大型机构和公司天生在地理上就是分布式的。
  • 并行:为了提高计算速度,我们使用多核处理器或者计算集群。
  • 可靠性:数据复制于不同机器上以避免丢失。
  • 可得性:数据复制于不同机器上以提高存取速度,去除瓶颈,最小化延迟。

虽然分布式系统有许多好处,比如更大的存储和计算能力,以及连接不同地点资源的能力,但也带来协调 (coordination) 方面的挑战。协调问题是如此普遍,以至于它有各种风格和名字:区块链 (blockchain),一致性 (consistency),协议 (agreement),共识 (consensus),总账 (ledger),事件溯源 (event sourcing),等等。

协调问题在分布式系统挺常发生。虽然分布式系统的一个节点 (计算机,CPU 核,网络开关,等等) 几年才坏一次,当你有几百万个节点时,你得预期每分钟就有一次故障。好的一面是,可以期望拥有多个节点的分布式系统能容忍某些故障并且继续正确工作。

1.2 全书概览

本书的中心概念会在第二章介绍,一般被称作“状态复制”,参见定义 2.8。当一个分布式系统的所有节点对一串相同的指令 (顺序也相同) 取得一致时,就达到了状态复制。在金融技术行业,状态复制经常是区块链的同义语。可以通过各种算法实现状态复制,具体取决于系统必须容忍什么故障。

第二章我们介绍基本定义以及背后的动机,然后讲解 Paxos,一个即便系统中少数节点可能崩溃的情况下也能达到状态复制的算法。

第三章我们将会明白,当运气不好的时候,Paxos 可能也帮不上忙,并且事实上没有决定论性的协议能解决状态复制问题。但是,我们也会给出一个快速的随机化共识协议,能在崩溃的情况下解决状态复制问题。

第四章我们越过崩溃故障,给出同步和异步系统中即便在恶意行为下也能工作的协议。另外,我们会探索关于“正确行为”的不同定义。

第五章我们会使用一个叫做“消息认证”的密码学概念。我们先讲一个简单的同步协议,然后讲 Zyzzyva,一个先进的、在消息认证可用的情况下实现消息复制的异步协议。

第六章我们通过研究所谓的仲裁系统来探索规模性方面的话题。如果一些服务器不再足够强大,并且添加更多的服务器也无济于事,仲裁系统可能是一个优美的解决方案。

第七章我们引入较弱的一致性概念,并给出关于比特币协议的详细解释作为这种协议的主要例子。

最后在第八章我们探索更弱的一致性概念,并给出高度可规模化的分布式存储方案。

本章附记

文献推荐

TBD