Skip to content

Commit

Permalink
更新共识算法
Browse files Browse the repository at this point in the history
  • Loading branch information
isno committed Dec 6, 2024
1 parent 36bf76f commit f2e8bb4
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 15 deletions.
12 changes: 6 additions & 6 deletions consensus/Paxos-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ Paxos 算法最初的论文名称为《The Part-Time Parliament》,翻译成

为了说明 Paxos 算法并增强演讲效果,Lamport 演讲中多次扮演《夺宝奇兵》中的主角印第安纳·琼斯。遗憾的是,Paxos 论文中采用的希腊民主议会的比喻显然不太成功。Lamport 像写小说一样,把一个复杂的数学问题写成了一篇带有考古色彩的历史小说,听众没有记住 Paxos 算法,仅仅记住了印第安纳·琼斯。

1990 年,Lamport 将《The Part-Time Parliament》论文提交给学术期刊 TOCS。根据 Lamport 的本人的回忆[^1],TOCS 审稿人阅读后认为“这篇论文不怎么重要,但还有些意思”,并建议删掉与 Paxos 相关的故事背景。Lamport 对这些缺乏幽默感的审稿人颇为不爽,拒绝对论文进行修改。于是,论文的发表被搁置。
1990 年,Lamport 将《The Part-Time Parliament》论文提交给 TOCS 期刊。根据 Lamport 的本人的回忆[^1],TOCS 审稿人阅读后认为“这篇论文不怎么重要,但还有些意思”,并建议删掉与 Paxos 相关的故事背景。Lamport 对这些缺乏幽默感的审稿人颇为不爽,拒绝对论文进行修改。于是,论文的发表被搁置。

虽然论文没有发表,但不代表没有人关注这个算法,Bulter W.Lampson(1991 年图灵奖获得者)认识到这个算法的重要性,在他的论文《How to Build a Highly Availability System using Consensus》对 Paxos 进行了讲述。后来,De Prisco、Lynch 和 Lampson 几人又联合在《理论计算机科学》期刊发表了论文《Revisiting the PAXOS algorithm》对 Paxos 算法进行了详细地描述和证明。经过 Lampson 等人的大力宣传,Paxos 算法逐渐被学术界重视。
虽然论文没有发表,但不代表没有人关注这个算法,Bulter W.Lampson(1991 年图灵奖获得者)认识到 Paxos 算法的重要性,在他的论文《How to Build a Highly Availability System using Consensus》对 Paxos 算法进行了讲述。后来,De Prisco、Lynch 和 Lampson 几人联合在《理论计算机科学》期刊发表了论文《Revisiting the PAXOS algorithm》对 Paxos 算法进行了详细地描述和证明。经过 Lampson 等人的大力宣传,Paxos 算法逐渐被学术界重视。

另一方面,这些介绍 Paxos 论文的发表使 Lamport 觉得《The Part-Time Parliament》重新发表的时间到了。
另一方面,这些介绍 Paxos 算法的论文使 Lamport 觉得《The Part-Time Parliament》重新发表的时间到了。

或许作为玩笑的延续,或许为保留原有的工作,更直白的说法是 Lamport 认为论文内容的描述和证明足够清晰,根本不需要任何修改,这次论文的发布仅增加了一段编辑注解。有意思的是,编辑也在注解上也风趣了一把
或许作为玩笑的延续,或许为保留原有的工作,更直白的说法是 Lamport 认为论文描述和证明足够清晰,根本不需要任何修改,这次论文的发布仅增加了一段编辑的注解。有意思的是,编辑也风趣了一把

:::tip <span></span>

Expand All @@ -37,7 +37,7 @@ Paxos 算法最初的论文名称为《The Part-Time Parliament》,翻译成
图 6-4 《Paxos Made Simple》论文摘要
:::

然而,这篇论文还是非常难以理解,引用斯坦福大学的学者 Diego Ongaro 和 John Ousterhout 设计 Raft 时发表的论文[^4]中对 Paxos 的描述:
然而,这篇论文还是非常难以理解,引用斯坦福大学学者 Diego Ongaro 和 John Ousterhout 在设计 Raft 时的论文[^4]中对 Paxos 的描述:

:::tip 《In Search of an Understandable Consensus Algorithm》节选

Expand All @@ -57,4 +57,4 @@ we were not able to understand the complete protocol until after reading several
[^1]: 参见 https://lamport.azurewebsites.net/pubs/pubs.html#lamport-paxos
[^2]: 参见 https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
[^3]: 参见 https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
[^4]: 参见 https://raft.github.io/raft.pdf USENIX ATC 2013 年 best paper
[^4]: 参见 https://raft.github.io/raft.pdf
3 changes: 2 additions & 1 deletion consensus/Paxos.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 6.3 Paxos 算法

Paxos 算法由 Leslie Lamport 于 1990 年提出,是一种基于消息传递、具备高度容错特性的共识算法,是当今分布式系统中最重要的理论基础,几乎就是“共识系统”的代名词。
Paxos 算法由 Leslie Lamport[^1] 于 1990 年提出,是一种基于消息传递、具备高度容错特性的共识算法,是当今分布式系统中最重要的理论基础,几乎就是“共识系统”的代名词。

Paxos 算法因其复杂性而广为人知,围绕它发生过许多有趣的故事,这些已成为人们津津乐道的一段轶事。直接切入 Paxos 算法本身未免望文生畏,我们不妨从这段轶事开始学习 Paxos 算法之旅。

[^1]: Lamport 在分布式系统理论方面有非常多的成就,比如 Lamport 时钟、拜占庭将军问题、Paxos 算法等等。除了计算机领域之外,其他领域的无数科研工作者也要成天和 Lamport 开发的一套软件打交道,目前科研行业应用最广泛的论文排版系统 —— LaTeX (名字中的 La 就是指 Lamport)
2 changes: 1 addition & 1 deletion consensus/Replicated-State-Machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

这里的“日志“,并不是工程师熟悉的,通过 log4j 或者 syslog 输出的描述发生事情的文本。而是 MySQL 中的 binlog(Binary Log)、MongoDB 中的 Oplog(Operations Log)、Redis 中的 AOF(Append Only File)、PostgreSQL 中的 WAL(Write-Ahead Log)...。这些日志名字不同,但它们的全都是**只能追加、完全有序的记录序列**

图 6-1 展示了日志结构,日志是有序的、持久化的记录序列,日志以追加的方式在末尾添加记录,读取时则从左到右顺序扫描。
图 6-1 展示了日志结构,日志是有序的、持久化的记录序列,日志在末尾追加记录,读取时则从左到右顺序扫描。
:::center
![](../assets/log.png) <br/>
图 6-1 日志是有序的、持久化的记录序列 [图片来源](https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying)
Expand Down
13 changes: 6 additions & 7 deletions consensus/consensus.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# 6.1 什么是共识

讨论 Paxos 或 Raft 时,很多文献使用“分布式一致性协议”或“分布式一致性算法”来描述这些技术。例如,Google Chubby 系统的作者 Mike Burrows 曾评价 Paxos:“There is only one consensus protocol...”,这一句话常被翻译为“世界上只有一种一致性算法”。
业内讨论 Paxos 或 Raft 算法时,常使用“分布式一致性协议”或“分布式一致性算法”来描述。例如,Google Chubby 系统的作者 Mike Burrows 曾评价 Paxos:“There is only one consensus protocol...”,这一句话常被翻译为“世界上只有一种一致性算法”。

尽管“共识”和“一致”在汉语中含义相近,但在计算机领域,这两个术语具有截然不同的含义:

- 共识(Consensus):指所有节点就某项操作(如选主、原子事务提交、日志复制、分布式锁管理等)达成一致的过程及其算法。
- 一致性(Consistency):描述多个节点的数据是否保持一致,关注数据最终达到稳定状态的结果。
- **共识**(Consensus):指所有节点就某项操作(如选主、原子事务提交、日志复制、分布式锁管理等)达成一致的过程及其算法。
- **一致性**(Consistency):描述多个节点的数据是否保持一致,关注数据最终达到稳定状态的结果。

因此,Paxos、Raft ZAB 等算法应归类为“共识”算法,而 CAP 定理中的 C 和数据库 ACID 模型中的 C 则描述的是“一致性”问题。将 Paxos 等算法称为“共识算法”更为准确
Paxos、Raft 或者 ZAB 等算法研究的是达成一致的过程,CAP 定理中的 C 和数据库 ACID 模型中的 C 描述的是“一致性”状态问题。因此,将 Paxos 等算法归类到“共识算法”更准确

在分布式系统中,节点故障是不可避免的。为提高系统可靠性,可以通过增加节点数量,依据“少数服从多数”的原则确保系统在多数节点(n/2+1)正常工作的情况下仍能达成决策。这种通过多数节点(Quorum)保证系统容错性的机制被称为 Quorum 机制。
在分布式系统中,节点故障是不可避免、什么都是不可靠的。为提高系统整体的可靠性,增加节点数量,依据“少数服从多数”的原则确保系统在多数节点(n/2+1)正常工作的情况下仍能达成决策。这种通过多数节点(Quorum)保证系统容错性的机制被称为 Quorum 机制。

:::tip Quorum 机制

Expand All @@ -21,7 +21,7 @@ Quorum 机制下,一个 N/2+1 节点个数的集群最多容忍 ⌊N/2⌋ 个

:::

根据上述的讨论,以 Quorum 为基础,在充满不确定的环境下(如节点故障、网络不可靠、消息延迟或丢失),仍然能够协商出一致的决策,从而对外呈现出一致的运行结果,这个过程称为节点间”协商共识“。
根据上述的讨论,以 Quorum 为基础,在充满不确定的环境下(如节点故障、网络不可靠、消息延迟或丢失),仍然能够协商出一致的决策,从而对外呈现出一致的运行结果,这个过程称为节点间”达成共识“。

一旦解决了共识问题,就能提供一套屏蔽内部复杂问题的抽象机制,为应用层提供一致性保证,满足多种目标需求,例如:
- **主节点选举**:对于一个主从复制的数据库,所有的节点需要就“谁来当主节点”达成一致。如果由于网络问题出现节点间无法通信,很容易出现争议。不解决争议问题,就会出现多个节点同时认为自己是主节点,也就是出现分布式系统中最头疼的情况 —— “脑裂”。
Expand All @@ -30,4 +30,3 @@ Quorum 机制下,一个 N/2+1 节点个数的集群最多容忍 ⌊N/2⌋ 个
- **日志复制**:日志复制是指将主节点的“操作日志”复制到从节点。日志条目的顺序必须在所有节点上形成一致,即日志条目需要按相同的顺序被写入(“顺序”相当重要,笔者将在下一节介绍)。


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

0 comments on commit f2e8bb4

Please sign in to comment.