zookeeper的zab协议与观察者

一、概述
1. ZAB(Zookeeper Atomic Broadcast)是专门为Zookeeper设计的一套广播协议
2. 这个协议底层基于了2PC算法进行设计,利用PAXOS算法进行了改进
3. 作用:原子广播和崩溃恢复
4. PAXOS算法简介:在一个集群中,所有的节点决定是否执行某个操作;节点之间通过网络进行通信,而节点在收到请求之后会将请求记录到本地日志上。问题在于在这个过程中不保证网络的稳定性以及节点的稳定性,如何保证投票过程正常进行并且保证投票结果的有效性 - PAXOS实际上解决了在不稳定集群中的数据有效性和一致性的问题

二、原子广播
1. 原子广播主要是保证Zookeeper集群中的所有节点的数据一致性
2. 原子广播基于2PC算法来进行设计的
3. 2PC - 2 Phase Commit - 二阶段提交 - 核心思想是"一票否决":
a. 确认阶段:协调者收到请求之后将请求转发给每一个参与者,等待参与者的反馈
b. 提交阶段:如果所有的参与者都返回yes,那么协调者就会给参与者发布指令执行这个请求,并且协调者会客户端返回成功信号
c. 中止阶段:如果协调者收到参与者返回no或者没有收到所有参与者的yes,那么会要求所有参与者删除该操作同时给客户端返回失败信号
4. 如果某个节点记录一个操作失败,但是整个集群又决定执行这个操作,那么这个时候follower会给leader发送请求,然后leader会将该操作再次发给follower重新记录,在follower重新记录期间,不参与投票

原子广播流程

   三、崩溃恢复

  1. 当整个集群中的leader丢失的时候,集群中会自动选举出一个新的leader,那么这个过程就称之为崩溃恢复
  2. 每一个leader被选举出来之后,都会被分配一个全局递增的编号-epochid,当leader选举出来之后,将epochid分发给每一个follower,同时如果出现了两个leader,那么这个时候Zookeeper自动kill掉epochid比较小的leader保证整个集群中只有1个leader
  3. 事务id是64位二进制数字组成,其中高32位表示的是epochid,低32位才真正的事务id
  4. 每更换一次leader,就会产生一个新的log以及snapshot文件

  观察者概述
  1. 特点:不参与投票也不选举,但是会监听投票结果,然后根据投票结果来执行对应请求
  2. 适用场景:网络不好或者异地网络结构;集群庞大节点个数比较多
  3. 观察者的存活与否并不影响整个集群

猜你喜欢

转载自www.cnblogs.com/zym627270054/p/11576412.html