zoukankan      html  css  js  c++  java
  • ZooKeeper如何保证数据一致性

    ZAB一致性协议

      ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)是zookeeper数据一致性的核心算法。

           ZAB协议论文地址:http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf

      ZAB 协议并不像 Paxos 算法那样,是一种通用的分布式一致性算法,它是一种特别为 ZooKeeper 设计的崩溃可恢复的原子消息广播算法。基于该协议,Zookeeper 实现了一种 主备模式的系统架构来保持集群中各个副本之间数据一致性

      系统架构看看下面这张图:

      

       上图显示了 Zookeeper 如何处理集群中的数据。所有客户端写入数据都是写入到 主进程( Leader主节点)中,然后由 Leader 复制到备份进程(称为 Follower)中。从而保证数据一致性。从设计上看,和 Raft 类似。在集群数据同步的过程中,如果出现 Follower 节点崩溃或者 Leader 进程崩溃时,都会通过 Zab 协议来保证数据一致性。

      崩溃恢复  

      消息广播通过 Quorum 机制,解决了 Follower 节点宕机的情况,但是如果在广播过程中 Leader 节点崩溃呢?

        这就需要 Zab 协议支持的崩溃恢复,崩溃恢复可以保证在 Leader 进程崩溃的时候可以重新选出 Leader,并且保证数据的完整性。

      崩溃恢复和集群启动时的选举过程是一致的,也就是说,下面的几种情况都会进入崩溃恢复阶段:
        初始化集群,刚刚启动的时候

        Leader 崩溃,因为故障宕机

        Leader 失去了半数的机器支持,与集群中超过一半的节点断连


        崩溃恢复模式将会开启新的一轮选举,选举产生的 Leader 会与过半的 Follower 进行同步,使数据一致,当与过半的机器同步完成后,就退出恢复模式, 然后进入消息广播模式。

        Zab 中的节点有三种状态,伴随着的 Zab 不同阶段的转换,节点状态也在变化:

        

    Zab协议原理

      Zab协议要求每个Leader 都要经历以下三个阶段:

        1)发现:要求zookeeper集群必须选举出一个 Leader 进程,同时 Leader 会维护一个 Follower 可用客户端列表。将来客户端可以和这些 Follower节点进行通信。  

        2)同步:Leader 要负责将本身的数据与 Follower 完成同步,做到多副本存储。这样也是提现了CAP中的高可用和分区容错。Follower将队列中未处理完的请求消费完成后,写入本地事务日志中。

        3)广播:Leader 可以接受客户端新的事务Proposal请求,将新的Proposal请求广播给所有的 Follower。

     

    选举算法

      当集群新建,或者主机死机,或者主机与一半或以上的从机失去联系后,都会触发选择新的主机操作。有两种算法fast paxosbasic paxos

      basic paxos和fast paxos区别

        这里fast是主动推送出,只要结果有更新,就马上同步给其他节点。其他节点可能还没把自己的票通知给所有节点,就发现自己投的票优先级低,要更新投票,然后更新再重新通知给所有节点。

        basic则要每一节点都询问完,才能知道新结果,然后再去问其他节点新的选举结果。

        fast比basic快的地方,是一个节点,不用和每个节点都交换投票信息后,才能知道自己的票是否要更新。会减少交互次数。


    Zab与Paxos算法的联系与区别  

        zookeeper采用FastLeaderElection 选举算法,是标准的 Fast Paxos 算法实现,可解决 LeaderElection选举算法收敛速度慢的问题。

          Paxos 的思想在很多分布式组件中都可以看到,Zab 协议可以认为是基于 Paxos 算法实现的,先来看下两者之间的联系:
        都存在一个 Leader 进程的角色,负责协调多个 Follower 进程的运行。

        都应用 Quorum 机制,Leader 进程都会等待超过半数的 Follower 做出正确的反馈后,才会将一个提案进行提交。

        在 Zab 协议中,Zxid 中通过 epoch 来代表当前 Leader 周期,在 Paxos 算法中,同样存在这样一个标识,叫做 Ballot Number。


      两者之间的区别是,Paxos 是理论,Zab 是实践,Paxos 是论文性质的,目的是设计一种通用的分布式一致性算法,而 Zab 协议应用在 ZooKeeper 中,是一个特别设计的崩溃可恢复的原子消息广播算法。

        Zab 协议增加了崩溃恢复的功能,当 Leader 服务器不可用,或者已经半数以上节点失去联系时,ZooKeeper 会进入恢复模式选举新的 Leader 服务器,使集群达到一个一致的状态。

     
     
  • 相关阅读:
    ssh 配置
    c指针
    centos 配置
    mac terminal 配色
    【webrtc】coturn服务搭建(27)
    【webrtc】SDP(26)
    【webrtc】webrtc通过peerconnection进行音视频互通(25)
    【webrtc】媒体协商的过程(24)
    【webrtc】STUN协议(23)
    【webrtc】webrtc网络传输基本知识(22)
  • 原文地址:https://www.cnblogs.com/songgj/p/14245185.html
Copyright © 2011-2022 走看看