《人类简史》中提到,人类之所以开启认知革命,站到生物链的最顶端,主要是因为人类学会了讲虚构的故事。
尤其是人类可以“一起”想象、编织出共同的虚构故事,不管是《圣经》的《创世记》、澳大利亚原住民的“梦世记”(Dreamtime),甚至连现代所谓国家的概念也是种想象。
就算是大批互不相识的人,只要同样相信某个故事,就能共同合作,创造出城市、国家和文明。
1
到了现代,人类依然喜欢听故事。
那些善于讲故事的人,总能轻而易举地获得更广泛的影响力。
在计算机行业也是如此,例如计算机大师Dijkstra,讲了一个哲学家就餐的故事。
这个故事把进程间复杂的同步和互斥描绘得妙趣横生,通俗易懂,广泛传播。
即使你忘记了细节,只要想到这个故事,也能“按图索骥”。
上世纪70年代,斯坦福研究所的Leslie Lamport也决定如法炮制,编一个故事:拜占庭将军问题
当时他正在钻研飞机和航天器的高可用性和容错问题,这是个人命攸关的任务,需要让多个不可靠的处理器对某个指令达成共识,做出一致的决定。
拜占庭就是古代的东罗马帝国,这个故事讲的是一些拜占庭将军(例如11个)各自领兵进攻一个城市,在观察敌情后,他们做出进攻或撤退的判断,然后通过信使沟通,只有超过半数人达成同意进攻的共识,才能胜利。
麻烦的事情在于,信使可能会丢失消息,篡改、伪造消息,将军中也可能有间谍。他们都会扰乱将军们最终的共识。
例如11个人中有9位忠诚的将军,2位间谍。
忠诚的将军中有5位判断进攻,4位判断撤退。
两个间谍收到消息后,开始捣乱了,他们给5位判断进攻的说,我们也要进攻。给4位判断撤退的人说我们也要撤退。
统计投票结果:5位支持进攻的忠实将军发现7票进攻,4票撤退。
4位支持撤退的忠实将军发现5票进攻,6票撤退。
最终的结果是,5位将军发起了进攻,不足半数,进攻失败。
如果我们类比一下,就会发现拜占庭问题的美妙之处:
将军 <-->计算节点
信使<---> 消息通信
忠诚的将军 <-->运行良好的节点
间谍<--->被非法控制的计算机节点
信使被杀 <-->消息丢失
信使篡改消息 <--> 通信被攻击
拜占庭将军问题再次激发起了人类喜欢听故事的天性,并且很容易让人联想到分布式环境下达成共识的难度,引发了全世界的广泛传播。
这真是一个好故事。
当然,只有故事没有解决方案是不行的,Lamport在讲故事的同时,也证明了:
如果存在m个间谍,那么至少需要3m+1个将军,才能最终达到一致的行动方案。
2
实际上,在分布式系统,尤其是局域网中,计算机节点“背叛”和消息被篡改的可能性并不大,最有可能的是通信时消息丢失,消息重复,这种情况被称为非拜占庭容错 ——看看这个故事的影响力有多大!
Lamport这个情况作了进一步的研究,由于从拜占庭将军问题中尝到了甜头,感觉极爽,他决定故伎重演,再编一个故事,期待再次引发关注狂潮。
这次他化身考古学家,把目光转向了古希腊, 那里有一个岛屿叫做Paxos,这个岛屿非常民主,大家通过议会的形式修订法律。
议员们在议会大厅中对法律提案进行表决,并通过服务员传递纸条的方式交流信息。
议员和服务员虽然不会“叛变”,但随时会因为各种事情离开议会大厅,并随时可能有新的议员(或者是刚暂时离开的)回到议会大厅进行法律表决。
议会要求在这种复杂情况下,依然可以正确地制定法律。
大家可以自行脑补一下这个故事和计算机系统之间的关系。
解决问题的算法实在复杂,此处省去一万字,感兴趣可以移步这个粗略版本《码农们的聚餐,会复杂到什么程度?》
为了进一步提升影响,Lamport模仿了电影《夺宝奇兵》中的考古学家印第安纳·琼斯的形象,戴着帽拿着酒壶开了几场讲座。
这一次,Lamport失算了。
他cosplay式的讲座⾮常失败,参加讲座的⼈除了印第安纳·琼斯的形象什么也没记住。
1990 年,Lamport 向 TOCS(美国计算机协会计算机系统会报) 提交了这篇论⽂,但是依然遭遇滑铁卢。
三个审稿者都认为该论文尽管不重要但还有些意思,只是应该把所有与 Paxos 相关的背景故事都删掉。
Lamport 对这些缺乏幽默感的审稿者感到恼火,他觉得这个领域的所有工作者非常无趣,他不打算对论文做任何修改,干脆把文章贴在自己的网站。
是金子总要发光的,就让时间来证明吧!
3
多年以后,DEC系统研究中心(SRC)需要寻找一个合适的共识算法,确保分布式系统的全局操作在部分节点失效的情况下依然能正确完成。他们尝试了三阶段提交,但是觉得难以理解和实现。
这时候,有人想起了Lamport的Paxos论文,读完以后,大喜过望,Paxos算法能满足他们的一切需要!并且还这么好玩有趣!
他们聘请Lamport当做顾问,首次实现了Paxos算法。一年后,当他们需要实现一个分布式锁服务时,再次实现了Paxos算法。
随后,Lampson 等大牛也发表了他们对Paxos 算法的证明。
有了底气的Lamport再次联系TOCS,希望发表论文,并且不搞什么修订版,直接发1990年写的那篇。
1998年,迟到了8年以后,Paxos终于发表,并且附带了一个非常有趣的注释:
“最近在 TOCS 编辑部的一个文件柜后面发现了这份材料。尽管年代久远,但主编认为它仍然值得出版。因为作者此前正在希腊群岛做实地考察,无法联系到他,所以由我来出版它。”
“作者似乎是一位考古学家,对计算机科学只有一点点兴趣。这是不幸的;即使大多数计算机科学家对他描述的晦涩的古Paxon文明没啥兴趣,但论文提到的系统是一个如何在异步环境中实现分布式计算系统的优秀模型。”
4
论文发表以后,还是有很多人抱怨:根本看不懂啊,故事太奇怪,里边有乱七八糟的伪希腊名词,Lamport无论走到何方都要被抱怨一通。
在2001年的分布式计算原理会议上,Lamport终于受够了,他把几个人拉到会议一角,不用论文,口头向他们解释了Paxos算法,回家后把这一通解释记录下来,重新发表了一篇简短的论文:《Paxos Made Simple》。
Lamport在论文的摘要部分,只写了一句话:Paxos 算法,如果以简单的英文呈现,是非常简单的!
悲催的是,这篇论文留给读者的第一印象依旧较为晦涩难懂,仍然未引起重视。
直到 21 世纪,随着大规模分布式系统逐渐成为大企业的刚需,分布式系统变得越来越重要。Paxos率先被工业界认可。
2006 年 Google 发布了 Chubby 论文,其中提到的Paxos 部分引起不少人的关注,随后这个领域的研究开始爆发,不仅产生了越来越多的变体 (如Multi-Paxos、EPaxos 和Raft );也产生了越来越多的著名分布式系统(如Zookeeper、etcd 等)。
在过去十几年间,Google、微软、Amazon、腾讯和阿里巴巴等国内外知名互联公司公司已经将共识算法作为其分布式基础设施的重要部分。
Paxos终于走上了神坛。
2013年,图灵奖姗姗来迟,授予Lamport,理由是:在分布式系统内做出了开创性工作,对看似混乱的行为施加了清晰、定义明确的一致性,提高了分布式系统的正确性、性能和可靠性。
感谢Lamport的故事,感谢他对分布式系统的卓越贡献!
(完)
点击下方图片,查看更多精彩