一个Paxos的例子

首发于知乎:https://www.zhihu.com/question/19787937/answer/725978203

一个Paxos的例子

公司决定去旅游,需要决定一个目的地。
你们是一家自由的公司。想上班就上班,想下班就下班,想偷懒就偷懒。在任何时候,你都不能确定某个员工在不在。

那么,怎么做才可以尽可能不被懒散的员工影响,尽快决定目的地呢?
为此,公司设立了一些规定:
为了保证不受懒散的人影响。每个人都可以提议想去的地方。但是需要自己去请求公司一半以上的人同意。
为了尽快达成一致,每个建议都有唯一编号,编号越大越重要。

这些规定还不够,还需要制定流程来保证。
一个叫 莱斯利·兰伯特 的同事想出一个办法。他说,只要你们按我说的流程去办事,我保证,只要公司有超过一半的员工在,目的地就能够被选举出来,并且是唯一的。
他的方法是这样的。
提议的人呢,在提议之前,先咨询公司超过一半的人,看看之前它们都收到哪些建议并且把你的建议编号告诉他们。
如果发现有比你重要的建议,直接放弃提议。
如果没有更重要的建议,就在收集到的建议里面找个最重要的,把它的编号改成你的。
如果询问的所有人都没采纳过建议,那最好,在建议里写上你想去的地方就好。

收到建议的人呀,你们记住一个事就好了。
永远采纳更重要的建议!
无论在任何时候,只要知道某个建议存在,哪怕只是一个编号,都要拒绝重要性比它低的建议。

怎么证明?
用数学归纳法证明:
对于一个被提出的建议n,编号比它小的建议,要么得不到一半以上的人同意,要么目的地与n的相同。

Author: 方镇澎
Link: http://fzp.github.io/2019/06/23/2019-6-24-paxos-example/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.