Paxos 为什么难以理解?

2022-11-21 20:17:41 浏览数 (2)

这是个好问题,我很喜欢回答这类问题。因为国内对共识算法的印象都是难以学习,难以实现,而事实上并非如此。

Paxos算法本身就是几轮消息交互的事情,理解起来能有多难?真正理解Paxos算法的设计思路以及设计选择,这的确并非易事,而这是Lamport的工作,并不是入门Paxos需要关心的事情。所以不要携带太重的负担学习Paxos。

为什么对Paxos误解如此之深?

Paxos难以理解这个观点,来源于两个方面:

  1. Lamport提交给ACM(TOCS)的《The Part-Time Parliament》论文未通过。
  2. Lamport在一些视频(TLA 课程、访谈等)中提及Paxos并不是一个简单的算法。

事实上,对于这两个事件,我们对其理解的有些片面。ACM委员会拒绝《The Part-Time Parliament》论文,流传的有两个原因:

  1. Lamport以故事的形式描述Paxos不严谨。
  2. ACM委员会未能理解Paxos算法。

很多时候,我们都只关心了第2个原因,却没有考虑第2个原因是不是第1个原因导致的。这一点在后续发表的《Paxos Made Simple》论文中可以看出,Paxos并不复杂。而第2个原因的流传,使得我们对Paxos的误解颇深。

另外,Lamport在一些视频中提及Paxos并不是一个简单的算法,这一点个人认为Lamport想表达的是Paxos的设计思路,推导过程是一件困难的事情,而并非算法本身。

既然简单,为什么Paxos难学习

Paxos难以学习这个问题,也可以总结几个方面:

  1. 大部分论文都是国外发表的。
  2. 没有详细的实现论文。
  3. Basic-Paxos与Multi-Paxos区分不明确。

第1点,除了英语的学习门槛之外,还有国内外对问题的阐述习惯有所区别,这一点也增加了学习门槛。

第2点,我并不是说没有详细的介绍论文,而是没有详细的编程细节论文。在《Paxos Made Simple》论文中,对Paxos的协商过程、推导过程、证明过程都很详细了,但是在编程实现的细节方面并没有权威论文,实现过程中,能借鉴的只有Google对Chubby的实现文章。不能大规模实现,自然也没有这方面紧迫的人才需求,也导致Paxos学习受阻。

这里可以总结一些如何做好一个技术产品,首先要有官方的实现方案,其次要提供大量可扩展的点,使得更多的用户参与进来,用户自然会推广自己所实现的功能,这一点Paxos很好,导致后来共识算法的蓬勃发展,后来的诞生了许多变种,例如:Disk Paxos、Cheap Paxos、Fast Paxos、Vertical Paxos等。另外还需要有大量的人才缺口,这样才会有更多的人学习。

第3点,在《Paxos Made Simple》论文中,Lamport提到了优化Basic-Paxos的方案,即Multi-Paxos。这些内容在同一篇论文中,导致两个问题。一是,读者对Multi-Paxos定义不明,把Multi-Paxos难以理解也归于Basic-Paxos身上。二是,Multi-Paxos篇幅过短,让读者产生许多过度解读的内容。

庆幸的事

接着要介绍一件不要脸的事。看到共识领域面临的问题,而我自己也比较喜欢共识算法,所以经过许多大佬的帮助,完成了一本《深入理解分布式共识算法》的书,本书介绍了:2PC、3PC、Paxos、Raft、Raft、ZAB、Disk Paxos、Cheap Paxos、Mencius、Vertical Paxos、Fast Paxos、EPaxos等,几乎涵盖了现在流行的共识算法,给出学习共识算法的roadmap,并且本书配套了视频、以及相关权威产品的源码解读。

值得期待的是,本书将于今年12月出版。

0 人点赞