美文网首页
zookeeper学习之二:Paxos算法

zookeeper学习之二:Paxos算法

作者: 进击的小鹿 | 来源:发表于2021-08-31 17:25 被阅读0次

    1、paxos是什么,怎么提出来的

    Paxos算法是Lamport于1990年提出的一种基于消息传递的一致性算法。Paxos 算法是分布式一致性算法,用来解决一个分布式系统如何就某个 决议 达成一致的问题,目前公认的解决分布式一致性问题最有效的算法之一。

    Lamport大师说:The Paxos algorithm, when presented in plain English, is very simple.
    Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。

    Paxos 协议是一个解决分布式系统中,多个节点之间就某个值(提案)达成一致(决议)的通信协议。

    2、作用、用途

    在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)等情况。paxos算法理论就是 解决这种分布式场景中的一致性问题。

    在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个"一致性算法"以保证每个节点看到的指令一致。

    chubby锁服务使用paxos作为chubby cell中的一致性算法,paxos的人气从此一路狂飙。

    zookeeper的zab协议也是paxos的变种。

    PhxPaxos是腾讯公司微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。

    “X-Paxos”是阿里巴巴数据库团队面向高性能、全球部署以及阿里业务特征等需求,实现的一个高性能分布式强一致的Paxos独立基础库。

    3、原理过程

    • 三个角色
      提议者proposer:提出议案
      接受者acceptor:
      学习者learner:

    有的,还有client的角色。

    一个进程可以有多种角色。

    • 条件(约束)
      Paxos是基于消息传递的通讯模型的。
      Paxos保证以下三点:1. 只有被提出提案才能被选定;2. 只有一个值被选定;3. 如果某个进程认为某个提案被选定了,那么这个提案必须是真的被选定的那个。

    多个Acceptor(如果是一个,那宕机就完蛋了)

    P1:一个Acceptor必须接受它收到的第一个提案。
    规定:一个提案被选定需要被半数以上的Acceptor接受

    P2:如果某个value为v的提案被选定了,那么每个编号更高的被选定提案的value必须也是v。
    P2a:如果某个value为v的提案被选定了,那么每个编号更高的被Acceptor接受的提案的value必须也是v。
    P2b:如果某个value为v的提案被选定了,那么之后任何Proposer提出的编号更高的提案的value必须也是v。

    • 两个阶段(主要)
      prepare 阶段(预提案阶段)
      1.Proposer 选择一个提案编号 n,然后向acceptor的某个超过半数的子成员发送编号为n的 prepare 请求;
      2.Acceptor 收到 prepare 消息后,如果提案的编号n大于该acceptor已经回复的所有 prepare 请求的编号,则 Acceptor 将自己已经批准的最大编号提案回复给 Proposer,并承诺不再接受任何编号小于 n 的提案;
      acceptor阶段(提案阶段)
      1.当一个 Proposer 收到了半数以上的 Acceptors 对 prepare 的回复后,就进入批准阶段。它要向回复 prepare 请求的 Acceptors 发送 accept 请求,包括编号 n 和根据 prepare阶段 决定的 value。这里的value是所有响应中编号最大的提案的value(如果根据 prepare 没有已经接受的 value,那么它可以自由决定 value)。
      2.在不违背自己向其他 Proposer 的承诺的前提下,Acceptor 收到 accept 请求后即接受这个请求。即如果acceptor收到这个针对n提案的accep请求,只要改acceptor尚未对编号大于n的prepare请求做出过响应,它就可以通过这个提案。

    • learner学习阶段

    示例:

    4、优缺点

    算法本身的推导过程有点晦涩难懂,理论性算法,工程上实现起来比较麻烦(别人说的)

    活锁问题

    参考 :
    https://www.zhihu.com/question/19787937
    http://harry.me/blog/2014/12/27/neat-algorithms-paxos/

    相关文章

      网友评论

          本文标题:zookeeper学习之二:Paxos算法

          本文链接:https://www.haomeiwen.com/subject/hziwsxtx.html