概念
ZAB(Zookeeper Atomic Broadcast)协议是专门为zookeeper设计的一致性协议。
ZAB协议包括两种基本的模式:消息广播和崩溃恢复
- 当整个服务框架在启动过程中,或是当Leader服务器出现网络中断崩溃退出与重启等异常情况时,ZAB就会进入恢复模式并选举产生新的Leader服务器。
- 当选举产生了新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就会退出崩溃恢复模式,进入消息广播模式。
- 当有新的服务器加入到集群中去,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加入的服务器会自动进入数据恢复模式,找到Leader服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。
以上其实大致经历了三个步骤:
- 崩溃恢复:主要就是Leader选举过程。
- 数据同步:Leader服务器与其他服务器进行数据同步。
- 消息广播:Leader服务器将数据发送给其他服务器。
zab和Paxos算法的联系和区别
共同点:
- 两者都存在一个类似于Leader进程的角色,由其负责协调多个Follow进程的运行。
- Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提案进行提交。
- 在ZAB协议中,每个Proposal中都包含了一个epoch值,用来代表当前Leader周期,在Paxos算法中,同样存在这样一个标识,只是名字变成了Ballot。
不同点:
Paxos算法中,一个新的选举产生的主进程会进行两个阶段的工作
- 读阶段,新的主进程会通过和所有其他进程进行通信的方式来搜集上一个主进程提出的提案,并将它们提交。
- 写阶段,当前主进程开始提出它自己的提案。
- ZAB在Paxos基础上额外添加一个同步阶段。同步阶段之前,ZAB协议存在一个和Paxos读阶段类似的发现(Discovery)阶段
同步阶段中,新的Leader会确保存在过半的Follower已经提交了之前Leader周期中的所有事务Proposal
- 发现阶段的存在,确保所有进程都已经完成对之前所有事物Proposal的提交
- ZAB协议主要用于构建一个高可用的分布式数据主备系统,例如ZooKeeper,Paxos算法则是用于构建一个分布式的一致性状态机系统