zoukankan      html  css  js  c++  java
  • 【分布式一致性原理】Paxos、Raft、Zaxb

    参考:https://mp.weixin.qq.com/s/KSpsa1viYz9K_-DYYQkmKA   阿里技术:一文总结:分布式一致性技术是如何演进的?


     

    1、Paxos

           Paxos达成一个决议至少需要两个阶段(Prepare阶段和Accept阶段)。

         

      Prepare阶段的作用: 

      • 争取提议权,争取到了提议权才能在Accept阶段发起提议,否则需要重新争取。

      • 学习之前已经提议的值。

      Accept阶段:

            使提议形成多数派,提议一旦形成多数派则决议达成,可以开始学习达成的决议。Accept阶段若被拒绝需要重新走Prepare阶段。

      Multi-Paxos
        Basic Paxos达成一次决议至少需要两次网络来回,并发情况下可能需要更多,极端情况下甚至可能形成活锁,效率低下,Multi-Paxos正是为解决此问题而提出。

        

         Multi-Paxos选举一个Leader,提议由Leader发起,没有竞争,解决了活锁问题。提议都由Leader发起的情况下,Prepare阶段可以跳过,将两阶段变为一阶段,提高效率。Multi-Paxos并不假设唯一Leader,它允许多Leader并发提议,不影响安全性,极端情况下  退化为Basic Paxos。 Multi-Paxos与Basic Paxos的区别并不在于Multi(Basic Paxos也可以Multi),只是在同一Proposer连续提议时可以优化跳过Prepare直接进入Accept阶段,仅此而已。

      应用场景:

    2、Raft

      不同于Paxos直接从分布式一致性问题出发推导出来,Raft则是从多副本状态机的角度提出,使用更强的假设来减少需要考虑的状态,使之变的易于理解和实现。

      Raft与Multi-Paxos有着千丝万缕的关系,下面总结了Raft与Multi-Paxos的异同。 Raft与Multi-Paxos中相似的概念:

        

      • Raft的Leader即Multi-Paxos的Proposer。
      • Raft的Term与Multi-Paxos的Proposal ID本质上是同一个东西。

      • Raft的Log Entry即Multi-Paxos的Proposal。

      • Raft的Log Index即Multi-Paxos的Instance ID。

      • Raft的Leader选举跟Multi-Paxos的Prepare阶段本质上是相同的。

      • Raft的日志复制即Multi-Paxos的Accept阶段。

      Raft与Multi-Paxos的不同:

        

       Raft假设系统在任意时刻最多只有一个Leader,提议只能由Leader发出(强Leader),否则会影响正确性;而Multi-Paxos虽然也选举Leader,但只是为了提高效率,并不限制提议只能由Leader发出(弱Leader)。 强Leader在工程中一般使用Leader Lease和Leader   Stickiness来保证: 

      • Leader Lease:上一任Leader的Lease过期后,随机等待一段时间再发起Leader选举,保证新旧Leader的Lease不重叠。

      • Leader Stickiness:Leader Lease未过期的Follower拒绝新的Leader选举请求。

        Raft限制具有最新已提交的日志的节点才有资格成为Leader,Multi-Paxos无此限制。 Raft在确认一条日志之前会检查日志连续性,若检查到日志不连续会拒绝此日志,保证日志连续性,Multi-Paxos不做此检查,允许日志中有空洞。 Raft在AppendEntries中携带    Leader的commit index,一旦日志形成多数派,Leader更新本地的commit index即完成提交,下一条AppendEntries会携带新的commit index通知其它节点;Multi-Paxos没有日志连接性假设,需要额外的commit消息通知其它节点。

     

    3、ZAB(Zookeeper Atomic Broadcast)-待补充

     

  • 相关阅读:
    伪类与伪元素的区别
    display:-webkit-box,display:flex 伸缩盒模型
    猴子分桃-sdut
    简单枚举类型——植物与颜色-sdut
    数据结构实验之链表七:单链表中重复元素的删除-sdut
    约瑟夫问题-sdut
    数据结构实验之链表四:有序链表的归并-sdut
    数据结构实验之链表五:单链表的拆分-sdut
    Spring的定时任务
    HTTP状态码
  • 原文地址:https://www.cnblogs.com/clarino/p/13407438.html
Copyright © 2011-2022 走看看