码迷,mamicode.com
首页 > 其他好文 > 详细

ZAB协议

时间:2019-09-23 00:01:29      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:2pc   commit   自己   执行   崩溃   follow   ase   adc   mamicode   

一、概述
   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协议

标签:2pc   commit   自己   执行   崩溃   follow   ase   adc   mamicode   

原文地址:https://www.cnblogs.com/hi-zhixian/p/11569638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!