ZAB

四、ZAB协议

4.1 ZAB协议与数据一致性

ZAB协议是Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。通过该协议,Zookeeper基于主从模式的系统架构来保持集群中各个副本之间数据的一致性。具体如下:

Zookeeper使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用原子广播协议将数据状态的变更以事务Proposal的形式广播到所有的副本进程上去。如下图:

具体流程如下:

所有的事务请求必须由唯一的Leader服务来处理,Leader服务将事务请求转换为事务Proposal,并将该Proposal分发给集群中所有的Follower服务。如果有半数的Follower服务进行了正确的反馈,那么Leader就会再次向所有的Follower发出Commit消息,要求将前一个Proposal进行提交。

4.2 ZAB协议的内容

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

1.崩溃恢复

当整个服务框架在启动过程中,或者当Leader服务器出现异常时,ZAB协议就会进入恢复模式,通过过半选举机制产生新的Leader,之后其他机器将从新的Leader上同步状态,当有过半机器完成状态同步后,就退出恢复模式,进入消息广播模式。

2.消息广播

ZAB协议的消息广播过程使用的是原子广播协议。在整个消息的广播过程中,Leader服务器会每个事物请求生成对应的Proposal,并为其分配一个全局唯一的递增的事务ID(ZXID),之后再对其进行广播。具体过程如下:

Leader服务会为每一个Follower服务器分配一个单独的队列,然后将事务Proposal依次放入队列中,并根据FIFO(先进先出)的策略进行消息发送。Follower服务在接收到Proposal后,会将其以事务日志的形式写入本地磁盘中,并在写入成功后反馈给Leader一个Ack响应。当Leader接收到超过半数FollowerAck响应后,就会广播一个Commit消息给所有的Follower以通知其进行事务提交,之后Leader自身也会完成对事务的提交。而每一个Follower则在接收到Commit消息后,完成事务的提交。

Links

下一页