Paxos 化繁为简

Posted 网事如烟云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paxos 化繁为简相关的知识,希望对你有一定的参考价值。


Paxos 化繁为简(1)

  

分布式系统中,有一个著名的“三性”:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。Paxos 算法是分布式一致性的典型算法。

Google Chubby 的作者Mike Burrows说过there is only one consensus protocol, and that’s Paxos - all other approaches are just broken versions of Paxos”——世上只有一种一致性算法,那就是Paxos,所有其他一致性算法都是 Paxos 算法的不完整版,甚至还有人将broken versions”直接翻译为“残次品”

在分布式一致性的领域中,根据其是否包含恶意节点,可以分为:拜占庭将军问题(有恶意节点)和非拜占庭将军问题(无恶意节点)。其中,非拜占庭将军问题,有两个基本算法:Paxos、Raft。如图1所示 

 

Paxos 化繁为简(1)

图1 分布式一致性问题分类

 

1中的 Raft 算法,其实是对 Paxos的简化和改进,以期变得更加容易理解和实现。

 Paxos问世以来就持续垄断了分布式一致性算法,Paxos 这个名词几乎等同于分布式一致性。Google 的很多大型分布式系统都采用了 Paxos算法来解决分布式一致性问题,如 Chubby、Megastore 以及 Spanner 等。开源的ZooKeeper,以及 mysql 5.7 推出的用来取代传统的主从复制的 MySQL Group Replication 等纷纷采用 Paxos 算法解决分布式一致性问题。

不过,就算 Paxos 如此辉煌,它也只是解决非拜占庭将军问题,还有一大类“拜占庭将军问题”它还没解决,为什么说其他算法都是“残次品”呢?这个倒不用纠结,因为两者的作者都是2013年图灵奖得主,大神 Leslie Lamport。

 

Paxos 化繁为简(1)

 

1982年 Lamport 与另两人(Robert Shostak,Marshall Pease)共同发表论文“拜占廷将军问题(The Byzantine Generals Problem)”,既允许军中可能有叛徒,又要保证战争胜利,引申到计算机领域,成为一种容错理论

 

Paxos 化繁为简(1)

 

如果您感兴趣,可以到“https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fbyz.pdf”下载该论文。

拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都Lamport 借用战争时拜占庭将军的比喻,对现实世界进行模型化:由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这些协议还要满足所要解决的问题要求的规范。

同样地,Paxos 也是从一个故事开始:在古希腊有一个岛屿叫做Paxos,这个岛屿通过议会的形式修订法律。执法者(legislators,后面称为牧师priest)在议会大厅(chamber)中表决通过法律,并通过服务员传递纸条的方式交流信息,每个执法者会将通过的法律记录在自己的账目(ledger)上。问题在于执法者和服务员都不可靠,他们随时会因为各种事情离开议会大厅、服务员也有可能重复传递消息(或者直接彻底离开),并随时可能有新的执法者(或者是刚暂时离开的)回到议会大厅进行法律表决,因此,议会协议要求保证上述情况下可以能够正确的修订法律并且不会产生冲突 ......

故事写得荡气回肠,悬念迭生(我开玩笑的,^_^),然而,很不幸,Lamport 在1990年提交给 TOCS(ACM Transactions on Computer Systems (TOCS))的这篇论文“The Part-Time Parliament(兼职议会)”,里面虽然提到了 Paxos 算法,但是却不受待见。编辑认为该论文虽然不太重要,但是还算有趣,不过若想发表,那些 Paxos 的故事必须移除。Lamport 本人是这样说的I submitted the paper to TOCS in 1990. All three referees said that the paper was mildly interesting, though not very important, but that all the Paxos stuff had to be removed. I was quite annoyed at how humorless everyone working in the field seemed to be, so I did nothing with the paper”。

由于比较不爽,Lamport 就将该论文束之高阁,直到几年后,SRC(Science Research Council,(美国)科学研究委员会)的几个人构建分布式系统需要相关算法时,Lamport 才将该论文发给他们。这才有1998年该论文被正式发表(当然,还是做了一些修改,并添加了数学证明):A number of years later, a couple of people at SRC needed algorithms for distributed systems they were building, and Paxos provided just what they needed. I gave them the paper to read and they had no problem with it

转眼到了2001年的 PODC(Principles Of Distributed Computing)大会,Lamport 实在是受够了会上众多人抱怨 Paxos 算法太难于理解,于是回家后就写了一个简化版本的论文“Paxos Made Simple(Paxos 化繁为简)”

Lamport 论文的摘要(Abstract)只有一句话“The Paxos algorithm, when presented in plain English, is very simple”。看来大神也是非常有个性啊!

 

 

您可以在“https://lamport.azurewebsites.net/pubs/paxos-simple.pdf”下载该论文。

本文,也是基于这篇论文“Paxos Made Simple”进行讲述,尽量在大师论文的基础上,再讲得通俗易懂一点。请原谅我的不自量力,咱们明天见。


【参考资料】

1、https://blog.csdn.net/u012613251/article/details/79001790

2、https://segmentfault.com/a/1190000018844326

3、https://baike.baidu.com/item/Leslie%20Lamport/3942241?fr=aladdin

4、https://blog.csdn.net/u012613251/article/details/79001790

5、https://www.microsoft.com/en-us/research/publication/part-time-parliament/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Flamport-paxos.pdf

6、https://www.microsoft.com/en-us/research/publication/paxos-made-simple/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Flamport%2Fpubs%2Fpaxos-simple.pdf


------------



以上是关于Paxos 化繁为简的主要内容,如果未能解决你的问题,请参考以下文章

化繁为简,分而治之,结对编程,欢乐全程

JSON序列化-化繁为简

Android自定义view之围棋动画(化繁为简)

化繁为简的lombok

webpack4 化繁为简

化繁为简——算法之魅力