ZAB协议详解(定义作用及角色流程)

ZAB协议详解(定义作用及角色流程)-mikechen

ZAB协议定义

ZAB算法,全称是ZooKeeper Atomic Broadcast,是由ZooKeeper提出的一种分布式一致性协议。

 

ZAB协议作用

ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 协议,ZAB 协议用于解决分布式系统中的一致性问题。

基于ZAB协议,Zookeeper 实现了一种 主备模式 的系统架构来保持集群中各个副本之间数据一致性。

 

ZAB协议角色

ZAB协议的实现,主要包含三大角色,分别是:Leader、Follower、Observer。

ZAB协议详解(定义作用及角色流程)-mikechen

1.Leader

一个ZooKeeper集群同一时间只会有一个实际工作的Leader,所有的写操作必须要通过Leader完成再由Leader将写操作广播给其它服务器。

2.Follower

一个ZooKeeper集群可能同时存在多个Follower,Follower可直接处理并返回客户端的读请求,同时会将写请求转发给Leader处理,并且负责在Leader处理写请求时对请求进行投票。

3.Observer

角色与Follower类似,但是无投票权。

在这种模式下,一个ZooKeeper集群中只有一个领导者,其余节点则是跟随者。

领导者负责接收客户端请求处理请求,并将结果广播给所有的跟随者,跟随者则接收领导者的广播,并将结果应用到本地状态中。

 

ZAB协议流程

ZAB协议主要包括两个阶段:领导者选举和原子广播。

1.领导者选举

在集群启动时,所有节点都是跟随者,当领导者宕机或无法正常工作时,集群需要重新选举领导者。

这个过程类似于Paxos算法的Leader选举过程,但是ZAB协议中的选举过程更为简单,只需要投票和比较版本号即可。

 

2.原子广播

一旦选出领导者,它会接收来自客户端的请求,并将请求处理结果广播给所有跟随者。

在这个过程中,ZAB协议需要保证所有节点接收到的广播顺序相同,这样才能保证数据的一致性。

整个广播流程分为 3 步骤:

1)将数据都复制到 Follwer 中

ZAB协议详解(定义作用及角色流程)-mikechen

2)等待Follwer回应Ack,最低超过半数即成功

ZAB协议详解(定义作用及角色流程)-mikechen

3)当超过半数成功回应,则执行 commit ,同时提交自己

ZAB协议详解(定义作用及角色流程)-mikechen

 

ZAB协议优缺点

优点:

ZAB协议优点是在保证数据一致性的同时,具有高可用性和可扩展性。

缺点:

ZAB协议缺点是需要占用大量的内存和存储空间来记录节点状态,以及在领导者选举和原子广播过程中可能会出现性能瓶颈。

 

ZAB协议总结

ZAB 协议和我之前谈过的的 Raft 协议类似,比如都有一个 Leader用来保证一致性,再有采取过半即成功的机制保证服务可用。

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法