ZAB协议定义
ZAB算法,全称是ZooKeeper Atomic Broadcast,是由ZooKeeper提出的一种分布式一致性协议。
ZAB协议作用
ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 协议,ZAB 协议用于解决分布式系统中的一致性问题。
基于ZAB协议,Zookeeper 实现了一种 主备模式 的系统架构来保持集群中各个副本之间数据一致性。
ZAB协议角色
ZAB协议的实现,主要包含三大角色,分别是:Leader、Follower、Observer。
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 ZAB协议详解(定义作用及角色流程)-mikechen](https://static.mikechen.cc/wp-content/uploads/2023/03/1570b09f8f9af489f1dd1b2b6220fd12.png)
2)等待Follwer回应Ack,最低超过半数即成功
![ZAB协议详解(定义作用及角色流程)-mikechen ZAB协议详解(定义作用及角色流程)-mikechen](https://static.mikechen.cc/wp-content/uploads/2023/03/9f82350ebf5693608f04a3bd724446be.png)
3)当超过半数成功回应,则执行 commit ,同时提交自己
![ZAB协议详解(定义作用及角色流程)-mikechen ZAB协议详解(定义作用及角色流程)-mikechen](https://static.mikechen.cc/wp-content/uploads/2023/03/a11022ae5aeff6611a78b46f4191eba3.png)
ZAB协议优缺点
优点:
ZAB协议优点是在保证数据一致性的同时,具有高可用性和可扩展性。
缺点:
ZAB协议缺点是需要占用大量的内存和存储空间来记录节点状态,以及在领导者选举和原子广播过程中可能会出现性能瓶颈。
ZAB协议总结
ZAB 协议和我之前谈过的的 Raft 协议类似,比如都有一个 Leader用来保证一致性,再有采取过半即成功的机制保证服务可用。
作者简介
陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
👇阅读mikechen更多原创技术文章👇
阿里架构 |双11秒杀 |微服务 |云原生 |Docker |K8S |Kafka |分布式架构 |高并发架构
关注作者「mikechen」公众号,获取更多技术干货!
![](https://static.mikechen.cc/wp-content/uploads/2023/04/mikechen-gzh.png)
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》