Paxos算法详解

复杂高深的理论背后一定基于一些通用的规律,而这些通用的规律就存在在我们的生活中。

在paxos算法中,分为4种角色:

  • Proposer :提议者
  • Acceptor:决策者
  • Client:产生议题者
  • Learner:最终决策学习者

proposer和acceptor的交互是算法的核心部分
主要分为两个阶段:初步决策和最终决策
learner最终学习到的由多数acceptor决定,类似于zookeeper中的Zab协议,这也是为什么zookeeper要选用奇数台机器的原因。


Paxos算法详解_第1张图片

我们通过美国总统选举的例子来解释Paxos算法,算法的两个阶段可以理解为拉票和投票阶段。
Client总统参加选举,为了争取更多选民的支持,派proposer秘书贿赂acceptor选民。作为选民肯定是谁给的钱多就投给谁。
第一阶段:
秘书proposer-A带着钱分别找到acceptor-1,acceptor-2和acceptor-3选民,acceptor-1和acceptor-2分别收了100美元,找到acceptor-3选民时,被告知proposer-B已经给了他150美元,但是proposer-A已经有1,2选民的支持,形成多数派,proposer-A任务完成。
这时候秘书proposer-B找到1,2选民,分别给了他们150美元,1,2选民态度转变选择支持B,这样秘书B获得了三名选民的支持,任务完成。

第二阶段:
秘书proposer-A同时找三名选民确认投票,当找到选民acceptor-1时被告知proposer-B给了150美元,此时秘书proposer-A知道自己已经没有了多数派支持,所以决定重新贿赂三名选民,每人给200美元,给了选民acceptor-1 200美元之后,选民acceptor-1欣然接受。
还没等秘书proposer-A找到选民2,3的时候,这个时候秘书proposer-B已经找到选民2,3并顺利完成最终投票,总统B获得了两票,形成多数派。
等到秘书proposer-A找到选民2的时候,被告知总统B已经形成多数派,秘书proposer-A没有什么职业操守,决定投靠B,并将200美元给了选民2,紧接着找到选民3,给了他200美元,让选民3给B投票,选民3一看和上次投票一样,最终接受。

如此以来整个算法结束,最后所有的秘书都选择投靠总统B,数据一致性问题得到解决,简单的来讲在第二阶段谁先形成多数派,谁就能占得先机。

但是Paxos算法存在活锁问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功。Fast Paxos算法在此基础上作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,而ZooKeeper就是以Fast Paxos算法为基础的。

你可能感兴趣的:(Paxos算法详解)