zoukankan      html  css  js  c++  java
  • ZooKeeper之ZAB协议

    ZAB协议

    Zookeeper的核心是原子广播,这个机制保证了server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab就进入恢复模式。当领导者被选举出来,且大多数server的完成了和leader的状态同步之后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

    ZAB协议由崩溃(故障)恢复和消息广播组成

    事物

    在ZAB协议中,每个事物都有一个编号ZXID,ZXID由两部分组成,高32位是epoch,底32位为递增计数器。

    • epoch:选举周期
    • 计数器:随事物的到来递增

    故障恢复(选举和数据恢复)

    1. 选举
      只需要保证选举出来的leader服务器拥有集群中所有机器最高编码(ZXID最大)的事物proposal,那么就可以保证这个新选举出来的leader一定具有。

    2. 数据同步

    leader会为每一个follower服务器准备一个队列,将那个没有被各个follower同步的事物以proposal的形式逐个发送给follower服务器,并在proposal后面紧接着发送一个Commit消息,以表示该事物已经被提交,当follower将数据同步完成之后,leader会将follower将数据同步完成之后,leader会将follower加入到真正可以的follower列表中。

    故障恢复:算法描述

    1. 每个follower会将自己最后接收的事物proposal的epoch发送给准leader。
    2. 准leader在收到所有的epoch中选举一个最大值,在此基础上加一形成新的选举周期,发送给所有的follower。
    3. follower收到后会更新自己的epoch,并反馈给准leader一个ACK,同时携带历史事物集合。准leader收到所有的follower的历史事物集合之后,会形成初始事物集合。

    故障恢复:同步

    1. 准leader将初始化事物集合发送给集群中所有的follower
    2. follower收到后对于其中的每一个事物,folllower都会接受,最后将结果反馈给leader,表示已经接受并处理了初始化事物集合中的事物。
    3. leader收到来自过半的leader的反馈,就会向所有的leader发送commit消息。

    消息广播

    在leader健在的时候由leader实现

    1. 发送给集群中的所有follower
    2. 收到过半的ACK
    3. 发送commit提交事物
  • 相关阅读:
    Java中的引用
    JVM参数调优
    GCRoots
    JVM体系结构
    死锁编码及定位分析
    线程池(Java中有哪些方法获取多线程)
    Synchronized和Lock的区别
    阻塞队列BlockingQueue
    CountDownLatch/CyclicBarrier/Semaphore
    浅谈二分
  • 原文地址:https://www.cnblogs.com/we9999/p/12398314.html
Copyright © 2011-2022 走看看