学习之余跟大家分享一些趣事,也是我刚刚吃到的瓜。因为我们有一门课叫分布式,老师布置了几个课题,让我们写相关的作业。然后恰好我就选择了Paxos算法。然后我发现他这段诞生历史实在是太有趣了,马上把它讲出来,跟大家分享一下。 


Paxos理论一波三折的诞生过程,后来也成为了计算机科学领域被广泛流传的学术趣事。 

在1990年,Lamport提出了一个理论上的一致性解决方案。因为之前“拜占廷将军问题”,使用生动的故事取得了良好的反响,因此这次Lamport 同样设想出了一个场景来描述这种一致性算法需要解决的问题:

Paxos 诞生的曲折历史_计算机科学

在这个论文中,Lamport 压根没有说Paxos 小岛是虚构出来的,而是煞有介事的说是考古工作者发现了Paxos议会事务的手稿,从这些手稿猜测 Paxos 人开展议会的方法。因此,在这个论文中,Lamport 从问题的提出到算法的推演论证,通篇贯穿了对Paxos议会历史的描述。

Lamport在1990年写完论文The Part-Time Parliament,就直接将其投给了ACM Transactions on Computer Systems(TOCS)。

但是由于 Lamport使用的讲故事的方法描述其算法,导致当时委员会的工作人员并没看懂他要表述什么,那时的编辑Ken Birman建议 Lamport使用严谨的数学方式来描述该算法。

Paxos 诞生的曲折历史_计算机科学_02

但是Lamport 作为一个很有个性的大佬,拒绝了这个提议。并且在后来的回忆录中Lamport还吐槽这群人没有幽默感。

Paxos 诞生的曲折历史_分布式数据库_03


Paxos 诞生的曲折历史_分布式数据库_04

Paxos 诞生的曲折历史_分布式数据库_05

不止是投稿,Lamport还将论文发给其业界大佬阅读,比如Nancy Lynch、Vassos Hadzilacos、Phil Bernstein等人。这些人声称已经读完论文。但是大概两个月后,Lamport给他们发了封邮件,询问他们“是否能够实现一个可以容忍任意数目的进程出错且能保持一致性的分布式数据库,同时当半数以上进程恢复正常时该系统也能够恢复正常?”不幸的是这些人都没意识到这个问题和之前Lamport发给他们的论文有什么关联。

Paxos 诞生的曲折历史_分布式系统_06

直到1996年,另一位图灵奖获得者Butler Lampson看到了这篇论文,并在*How to Build a Highly Availability System Using Consensus*中对其进行描述。Butler Lampson在WDAG96上提出了重新审视这篇分布式论文的建议,在次年的WDAG97上,麻省理工学院的Nancy Lynch也公布了其根据Lamport的原文重新修改后的*Revisiting the Paxos Algorithm*,“帮助”Lamport用数学的形式化术语定义并证明了Paxos算法。

这个时候Lamport想是时候重新发表这篇论文了!但是他还是不想改,于是找了Keith Marzullo做注释,声称这是从某处翻出来的旧手稿。Ken Birman也同意了,于是Lamport这篇论文就成了Keith Marzullo做注的“手稿”。

Paxos 诞生的曲折历史_计算机科学_07

Keith Marzullo的注释:

本文最近刚被从一个文件柜里发现,尽管这篇论文是很久之前提交的但是主编认为还是值得发表的。但是由于作者目前在希腊小岛上考古,ACM TOCS联系不上这位考古学家,所以任命我来发表这篇论文。作者貌似是个对计算机科学稍微有点兴趣的考古学家,尽管他描述的Paxos岛上民主制度的故事对计算机科学家而言没啥兴趣,但是这套制度对于在异步网络中实现分布式系统时是很好的模型。建议阅读的时候直接看第四节,或者最好先别看,最好先去看看Lampson或者De Prisco对这篇论文的解释。

于是在1998年的ACMTOCS上,这篇延迟了9年的论文终于被接受了,也标志着Paxos算法正式被计算机科学接受并开始影响更多的工程师解决分布式一致性问题。

后来在2001年,Lamport本人也做出了让步,使用了通俗易懂的语言重新讲述了原文,并发表了Paxos Made Simple——当然,Lamport甚为固执地认为他自己的表述语言没有歧义,并且也足够让人明白Paxos算法,因此不需要数学来协助描述,于是整篇文章还是没有任何数学符号。