一致性协议(zab协议)
zab
协议的全称是 Zookeeper Atomic Broadcast
(zookeeper
原子广播)。zookeeper
是通过zab
协议来保证分布式事务的最终一致性。
基于zab
协议,zookeeper
集群中的角色主要有以下三类,如下所示:
角色 | 描述 |
---|---|
领导者(Leader ) |
领导者负责进行投票的发起和决议,更新系统状态 |
学习者(Learner )-跟随者(Follower ) |
Follower 用于接收客户端请求并向客户端返回结果,在选主过程中参与投票 |
学习者(Learner )-观察者(ObServer ) |
ObServer 可以接收客户端连接,将写请求转发给leader 节点。但ObServer 不参加投票过程,只同步leader 的状态。ObServer 的目的是为了扩展系统,提高读取速度 |
客户端(Client ) |
请求发起方 |
zab
广播模式工作原理,通过类似两端式提交协议的方式解决数据一致性:
-
leader
从客户端收到一个写请求; -
leader
生成一个新的事务并为这个事务生成一个唯一的ZXID;
-
leader
将事务提议(propose
)发送给所有的follows
节点; -
follower
节点将收到的事务请求加入到本地历史队列(history queue
)中,并发送ack
给leader
,表示确认提议; - 当
leader
收到大多数follower
(半数以上节点)的ack(acknowledgement)
确认消息,leader
会本地提交,并发送commit
请求; - 当
follower
收到commit
请求时,从历史队列中将事务请求commit
。
因为是半数以上的结点就可以通过事务请求,所以延迟不高。