ZAB协议介绍
ZAB协议(Zookeeper Atomic Broadcast)时Zk中保证数据一致性的重要协议,是基于Paxos算法单独为Zk实现的协议。
ZAB协议是一种支持崩溃恢复和原子广播的协议,基于zab协议,zk实现了一种主备模式的系统架构,由单一的主进程来处理客户端的请求,并且为每个请求分配一个全局唯一单调递增的事务ID(zxid),然后由主进程将数据广播给副本进程上去。所以说zk是一个保证顺序一致性的服务。
所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器称之为Leader服务器,而余下的服务器称之为Follower服务器。Leader服务器负责将一个客户端事务请求转化为一个事务Proposal(提议),并将该事务提议分发给Follower,之后Leader等待Follower的ACK反馈,一但超过半数的Follower正确反馈,那么Leader将向所有Follower发送一个commit消息,要求Follower把前一个事务提议进行提交。
Zab协议的过程如下图所示:
zk服务器由三节点构成,1主2从,客户端所有的事务请求由Leader进行处理,并且通过广播发送给Follower副本。
ZAB协议基本特性
(1)高可用:由于采用主备模型,可以保证当Leader节点挂机或者网络分区后,集群依然工作对外提供服务。(当集群中超过半数节点存活,整个集群可用)
(2)数据一致性:一个事务请求只能由Leader节点处理,Leader节点将事务请求广播给副本节点。保证如果一个事务被提交成功,那么所有节点都应该被处理成功。
1、Zab协议确保在Leader服务器提交的事务最终被所有服务器提交
2、Zab协议需要确保丢弃那些只在 Leader 上被提出而没有被提交的事务。