在刚接触到一致性算法的时候就知道了Paxos,同时也发现看到的所有文章提到Paxos的时候都说难于理解。于是我决定,咱就要看Paxos是怎么个难法,万一我一遍就看明白了,是不是证明我的智商高啊,So --- LESLIE LAMPORT大爷,我来了。
不过这篇The Part-Time Parliament我一打开就开始懵比。这个名字就不像IT论文啊,“临时议会”什么意思? 开头这么一段:
Early in this millennium, the Aegean island of Paxos was a thriving mercantile center.1 Wealth led to political sophistication, and the Paxons replaced their ancient theocracy with a parliamentary form of government. But trade came before civic duty, and no one in Paxos was willing to devote his life to Parliament. The Paxon Parliament had to function even though legislators continually wandered in and out of the parliamentary Chamber.
The problem of governing with a part-time parliament bears a remarkable correspondence to the problem faced by today’s fault-tolerant distributed systems, where legislators correspond to processes, and leaving the Chamber corresponds to failing. The Paxons’ solution may therefore be of some interest to computer scientists. I present here a short history of the Paxos Parliament’s protocol, followed by an even shorter discussion of its relevance for distributed systems.
翻译过来是:
希腊岛屿Paxon 上的执法者在议会大厅中表决通过法律,并通过服务员传递纸条的方式交流信息,每个执法者会将通过的法律记录在自己的账目上。问题在于执法者和服务员都不可靠,他们随时会因为各种事情离开议会大厅,并随时可能有新的执法者进入议会大厅进行法律表决,使用何种方式能够使得这个表决过程正常进行,且通过的法律不发生矛盾。
不难看出故事中的议会大厅就是我们的分布式系统,牧师对应节点或进程,服务员传递纸条的过程就是消息传递的过程,法律即是我们需要保证一致性的值(value)。牧师和服务员的进出对应着节点/网络的失效和加入,牧师的账目对应节点中的持久化存储设备。上面表决过程的正常进行可以表述为进展需求(progress requirements):当大部分牧师在议会大厅呆了足够长时间,且期间没有牧师进入或者退出,那么提出的法案应该被通过并被记录在每个牧师的账目上。
这篇文章从头到位的文风都是这个样子,讲一讲故事,然后再讲一讲算法,可能LESLIE LAMPORT 大爷想借此让大家更容易理解他的理论,可是说实话这让我更加的懵比,没看多久就败下阵来。后来看了一些中文翻译及解释才算明白了部分内容吧。很赞同Raft那篇“In Search of an Understandable Consensus Algorithm”论文里对它的描述:“不幸的是,Paxos 有两个明显的缺点。第一个缺点是 Paxos 算法特别的难以理解。完整的解释是出了名的不透明;通过极大的努力之后,也只有少数人成功理解了这个算法。因此,有了几次用更简单的术语来解释 Paxos 的尝试。尽管这些解释都只关注了单决策的子集问题,但依然很具有挑战性。在 2012 年 NSDI 的会议中的一次调查显示,很少有人对 Paxos 算法感到满意,甚至在经验老道的研究者中也是如此。我们自己也尝试去理解 Paxos;我们一直没能理解 Paxos 直到我们读了很多对 Paxos 的简化解释并且设计了我们自己的算法之后,这一过程花了近一年时间。”
看到Diego Ongaro和John Ousterhout那么NB的人,也不能一次看懂,让我感觉好受了不少。不过我还是建议大家没事看看这篇论文,万一一次就看明白了,那多NB啊,而且Paxos毕竟是个精巧,又强大的协议,现实中很多一致性系统也是基于它(变体)做得。
对于Paxos的一些详细解释大家可以看看知乎上面的帖子:
https://www.zhihu.com/question/19787937
最上面的几个回复已经说的很不错了。