ZAB协议

Posted hi-zhixian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZAB协议相关的知识,希望对你有一定的参考价值。

一、概述
   1. Zookeeper Atomic Broadcast - Zookeeper原子广播协议,是专门为Zookeeper设计的协议
   2. 这套协议在设计过程中,基于2PC算法来设计,利用PAXOS算法进行了改进
   3. 作用:原子广播和崩溃恢复
二、原子广播
   1. 原子广播是为了保证所有节点数据的一致性
   2. 原子广播基于2PC算法进行改进
   3. 2PC - 2 Phase Commit - 二阶段提交 - 核心思想是“一票否决”:
      a. 分发阶段:协调者收到请求之后,将请求发送给每一个参与者,然后让参与者将这个请求进行记录
      b. 提交阶段:如果每一个参与者都记录成功,并且协调者收到了所有参与者的成功信号,那么协调者就会要求所有的参与者执行这个请求
      c. 中止阶段:如果有一个或者多个参与者返回no,或者如果协调者没有收到参与者的返回信号,也会认为这个参与者返回的是no,那么协调者救护认为这个请求不可执行,那么协调者就会要求所有的参与者删除这个请求的记录
   4. 原子广播过程:
技术图片
   5. 如果某个follower记录失败,而又接收到leader要求执行的命令,这个时候follower就会向leader发送请求重新申请这个任务
三、崩溃恢复
   1. 当集群中的leader因为某些原因产生丢失,集群中会自动选举出一个新的leader,那么这个过程就称之为崩溃恢复
   2. 崩溃恢复是为了避免Zookeeper集群中出现单点故障
   3. 每选举出一个leader,就会给leader一个编号,这个编号称之为epochid。每一个leader都会将epochid发送给每一个follower,follower接收到epochid之后存储在acceptedEpoch中
   4. 每一个follower接收到请求之后,都会先比较epochid
   5. 在集群中,Zookeeper的事务id实际上是由64位二进制数字组成,其中高32位表示的是epochid,低32位才是真正的事务id
   6. 当一个节点重新连入集群之后,这个节点会拿着自己的事务id和当前集群中的事务id进行比较,在比较完成之后,leader就会将确实的操作放入一个队列中发送给这个节点。这个节点在更新过程中不对外服务

以上是关于ZAB协议的主要内容,如果未能解决你的问题,请参考以下文章

Zab协议:Zookeeper一致性协议

Zookeeper的ZAB协议

zookeeper之ZAB协议

理解ZAB协议

ZooKeeper之ZAB协议

Zookeeper深入原理(3) - Zab协议