版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
Markdown
allowHtmltrue
# 第五章:分布式系统共识概论

微服务架构设计有个服务无状态(stateless)的原则,无状态服务不存储任何信息,这样更容易的横向扩展,实现高可用目标。无状态服务如果需要存储数据时,就往中间件转移。比如持久化的数据往关系数据库存储,缓存的数据往 Redis 存储,消息的接收往 MQ 转移等等。

数据存储到中间件,问题只是被转移,并没有解决,这些带有数据的中间件该如何保证高可用呢?单个节点无论设计都和高可用搭不上边,还是得用分布式多个节点的方式才行。能让分布式集群即使是在部分节点故障、网络延时、网络分割的情况下,整体集群仍具有容错性并最终表现出整体一致的过程,就是我们本章要讨论的话题 -- 分布式共识。

# 5.1 分布式的核心:共识问题

受翻译影响,网上很多讨论 paxos 或 raft 的内容多使用“分布式一致性协议”或者“分布式一致性算法”这样的描述字眼。例如,Mike Burrows 对 Paxos 的评价原话是 “There is only one consensus protocol...”,很多文章翻译成 “世界上只有一种一致性算法...” 。

虽然在汉语中“共识(consensus)”和“一致(consistency)”是一个意思,但在计算机工程中它们之间还是有明显的区别:consistency 描述的是存储的数据之间不自相矛盾,是数据应该达到的**结果**;而 consensus 则是大家关心的某件事情(比如选举、分布式锁、全局ID、数据复制等等)达成一致的**过程**。paxos、raft、ZAB 等等属于 consensus 的理论/实现,所以使用“共识”来表达更清晰一些,而 CAP 定理中的 C 和数据库 ACID 的 C 才是真正的“一致性” —— consistency 问题。

# 5.2 Paxos 的起源

Paxos 是由 Leslie Lamport[^1] 于 1990 提出的一种基于消息传递且具有高度容错特性的协商共识算法,是当今分布式系统最重要的理论基础,几乎就是“共识”两个字的代名词。不幸的是 Paxos 论文中采用希腊民主议会的比喻很明显失败了,Lamport 像写小说一样,把一个复杂的数学问题弄成了一篇带有考古色彩的历史小说。根据 Lamport 自己的描述[^2],三个审稿者都认为该论文虽然不怎么重要但还有些意思,只是应该把其中所有 Paxos 相关的故事背景删掉。Lamport 对这些缺乏幽默感的人感到生气,所以他不打算对论文做任何修改。

多年后,两个在 SRC(Systems Research Center,DEC 于 1984 年创立,Lamport 也曾在此工作过)工作的人需要为他们正在构建的分布式系统寻找一些合适算法,而 Paxos 恰恰提供了他们想要的。Lamport 就将论文发给他们,他们也没觉得该论文有什么问题。因此,Lamport 觉得论文重新发表的时间到了,《The Part-Time Parliament》[^3] 最终在 1998 年公开发表。

可还是有很多人抱怨这篇论文看不懂,人们只记住了那个奇怪的故事,而不是 Paxos 算法。Lamport 走到哪都要被人抱怨一通。于是他忍无可忍,2001 年使用计算机领域的概念重新描述了一遍算法,并发了论文 《Paxos Made Simple》[^4]。

<div  align="center">
	<img src="https://wiki.waringid.me/download/attachments/5636357/paxos.png" width = "350"  align=center />
</div>

是的,你没看错,摘要只有一句话 “The Paxos algorithm, when presented in plain English, is very simple.”!

然而,可能是表述顺序的原因,这篇论文还是非常难以理解,以至于到今天,尽管 Paxos 算法已经面世 30 多年,还是有仍有层出不穷的文章来解释这篇论文(重复造论文),以及在工程上如何实现它。

直到 Google 的 Chubby 横空出世,使用 Paxos 解决了分布式共识的问题,并将其整理成正式的论文发表之后,得益于 Google 的行业影响力,辅以 Chubby 作者 Mike Burrows 那略显夸张但足够吸引眼球的评价推波助澜,Paxos 逐渐被大家熟知和认可。Lamport 凭借他在分布式领域的贡献,最终于 2013 年获得图灵奖。

[^1]: Lamport 在分布式系统理论方面有非常多的成就,比如 Lamport 时钟、拜占庭将军问题、Paxos 算法等等。除了计算机领域之外,其他领域的无数科研工作者也要成天和 Lamport 开发的一套软件打交道,目前科研行业应用最广泛的论文排版系统 --  LaTeX (名字中的 “La” 就是指 Lamport)。
[^2]: 参见 https://lamport.azurewebsites.net/pubs/pubs.html#lamport-paxos
[^3]: 参见 https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
[^4]: 参见 https://lamport.azurewebsites.net/pubs/paxos-simple.pdf