Zookeeper&ZAB协议&Paxos算法

  • ZAB协议&Paxos算法
  • ZAB协议介绍
  • ZAB协议中的基本模式
  • 崩溃恢复模式
  • 消息广播模式


ZAB协议&Paxos算法

Paxos算法应该可以说是Zookeeper 的灵魂了。但是,Zookeeper并没有完全采用Paxos算法 ,而是使用ZAB协议作为其保证数据一致性的核心算法。此外,在Zookeeper的官方文档中也指出,ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为Zookeeper设计的崩溃可恢复的原子消息广播算法。

ZAB协议介绍

ZAB(ZooKeeper Atomic Broadcast) 协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。 在 Zookeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,Zookeeper实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。

ZAB协议中的基本模式

ZAB协议包括两种基本的模式,分别是崩溃恢复和消息广播。

崩溃恢复模式

当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进人恢复模式并选举产生新的Leader服务器。当选举产生了新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。其中,所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致。

消息广播模式

当集群中已经有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进人消息广播模式了。 当一台同样遵守ZAB协议的服务器启动后加人到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加入的服务器就会自觉地进入数据恢复模式:找到Leader所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。

正如上文介绍中所说的,Zookeeper被设计成只允许唯一的一个Leader服务器来进行事务请求的处理。Leader服务器在接收到客户端的事务请求后,会生成对应的事务提案并发起一轮广播协议;而如果集群中的其他机器接收到客户端的事务请求,那么这些非Leader服务器会首先将这个事务请求转发给Leader服务器。