一致性协议(zab协议)

zab协议的全称是 Zookeeper Atomic Broadcast (zookeeper原子广播)。zookeeper是通过zab协议来保证分布式事务的最终一致性。

基于zab协议,zookeeper集群中的角色主要有以下三类,如下所示:

角色 描述
领导者(Leader) 领导者负责进行投票的发起和决议,更新系统状态
学习者(Learner)-跟随者(Follower) Follower用于接收客户端请求并向客户端返回结果,在选主过程中参与投票
学习者(Learner)-观察者(ObServer) ObServer可以接收客户端连接,将写请求转发给leader节点。但ObServer不参加投票过程,只同步leader的状态。ObServer的目的是为了扩展系统,提高读取速度
客户端(Client) 请求发起方

zab广播模式工作原理,通过类似两端式提交协议的方式解决数据一致性:

一致性协议(zab协议)

  1. leader从客户端收到一个写请求
  2. leader生成一个新的事务并为这个事务生成一个唯一的ZXID;
  3. leader将事务提议(propose)发送给所有的follows节点;
  4. follower节点将收到的事务请求加入到本地历史队列(history queue)中,并发送ackleader,表示确认提议;
  5. leader收到大多数follower(半数以上节点)的ack(acknowledgement)确认消息,leader会本地提交,并发送commit请求;
  6. follower收到commit请求时,从历史队列中将事务请求commit

因为是半数以上的结点就可以通过事务请求,所以延迟不高。