阿里一面,说说你对zookeeper中ZAB协议的理解?

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 阿里一面,说说你对zookeeper中ZAB协议的理解?

又到了金三银四的时候,大家都按耐不住内心的躁动,我在这里给大家分享下之前面试中遇到的一个知识点(ZAB协议),希望对大家有些帮助。如有不足,欢迎大佬们指点指点。


ZAB协议虽然舍弃分布式协议中的可用性,但却是一致性的经典代表。


1、zookeeper服务端架构?



image.png


咱们先来看下zookeeper的架构图,从上图可知,zookeeper服务端中会存在一个leader节点,负责所有数据的写入,而其他follower节点只支持读,follower节点的写请求会转发给leader节点处理,有点类似读写分离的主从模式。


2、ZAB协议过程说明



1.所有事务请求转发给leader

2.Leader分配全局单调递增事务id(Zxid),广播事务提议

3.Follower处理提议,做出反馈

4.Leader收到过半数反馈,广播Commit


从这个过程可以看出ZAB协议的重要特性是有序性,主要提现在Zxid的生成规则上


3、ZAB协议中的崩溃恢复



Leader服务器出现崩溃,或者说由于网络原因导致Leader服务器失去了与过半Follower的联系,那么就会讲入崩溃恢复模式。


image.png


1.ZAB协议规定如果一个事务Proposal在一台机器上被处理成功,那么应该在所有的机器上都被处理成功,哪怕机器出现故障崩溃。

2.ZAB协议确保那些已经在Leader服务器上提交的事务最终被所有服务器都提交

3.ZAB协议确保丢弃那些只在Leader服务器上被提出的事务


ZAB协议需要设计的选举算法应该满足:


确保提交已经被Leader提交的事务Proposal,同时丢弃已经被跳过的事务Proposal。


这个选举算法的好处是什么呢?


1.如果让Leader选举算法能够保证新选举出来的Leader服务器拥有集群中所有机器最高ZXID的事务Proposal,那么就可以保证这个新选举出来的Leader一定具有所有已经提交的提案。如果让具有最高编号事务

2.Proposal 的机器来成为 Leader,就可以省去 Leader 服务器检查Proposal的提交和丢弃工作的这一步操作。


对选举算法的要求:


1.选出的Leader节点上要持有最高的zxid

2.过半数节点同意


4、ZAB协议中的数据同步



Leader选举出来后,需完成Followers与Leader的数据同步,当半数的Followers完成同步,则可以开始提供服务。


同步的过程如下:


1.Leader 服务器会为每一个 Follower服务器都准备一个队列,并将那些没有被各Follower服务器同步的事务以Proposal消息的形式逐个发送给Follower服务器,并在每一个Proposal消息后面紧接着再发送一个Commit消息,以表示该事务已经被提交。

2.Follower服务器将所有其尚未同步的事务Proposal 都从 Leader 服务器上同步过来并成功应用到本地数据库中后,Leader服务器就会将该Follower服务器加入到真正的可用 Follower列表中,并开始之后的其他流程。


5、ZAB协议中丢弃事务Proposal外理



在ZAB协议的事务编号ZXID设计中,ZXID是一个64位的数字。


1.低32位是一个简单的单调递增的计数器,针对客户端的每一个事务请求,Leader服务器在产生一个新的事务Proposal的时候,都会对该计数器进行加1操作;

2.高32位代表了Leader周期纪元的编号,每当选举产生一个新的Leader服务器,就会从这个Leader服务器上取出基本地日志中最大事务 Proposal的ZXID,并从该ZXID中解析出对应的纪元值,然后对其进行加1操作,之后就会以此编号作为新的纪元,并将低32位置0来开始生成新的ZXID。


基于这样的策略,当一个包含了上一个Leader周期中尚未提交过的事务Proposal的服务器启动加入到集群中,发现此时集群中已经存在leader,将自身以Follower角色连接上Leader服务器之后,Leader服务器会根据自己服务器上最后被提交的 Proposal来和 Follower 服务器的Proposal进行比对,发现follower中有上一个leader周期的事务Proposal时,Leader会要求Follower进行一个回退操作(回退到一个确实已经被集群中过半机器提交的最新的事务Proposal)。


6、ZooKeeper集群Leader选举机制



选举机制中的概念:


1.服务器id:myid

2.事务id,服务器中存放的最大Zxid

3.逻辑时钟,发起的投票轮数计数

4.选举状态:

Looking,竞选状态。

Following,随从状态,同步leader状态,参与投票。

Observing,观察状态,同步leader状态,不参与投票。

Leading,领导者状态。


选举算法:


1.每个服务实例均发起选举自己为领导者的投票(自己的投给自己);

2.其他服务实例收到投票邀请时,比较发起者的数据事务ID是否比自己最新的事务ID大,大则给它投一票,小则不投票给它,相等则比较发起者的服务器ID,大则投票给它;

3.发起者收到大家的投票反馈后,看投票数(含自己的)是否大于集群的半数,大于则胜 出,担任领导者;未超过半数且领导者未选出,则再次发起投票。


胜出条件:


投票赞成数大于半数则胜出的逻辑。


选举示例


有5台服务器,每台服务器均没有数据,它们的编号分别是1,2;3,4,5,按编号依次启动,它们的选举过程如下:


1.服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking

2.服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是Lookingo

3.服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。

4.服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。

5.服务器5启动,后面的逻辑同服务器4成为小弟。


7、总结



在微服务和分布式的时代,zookeeper作为协调服务的代表,在面试中很容易被问到,希望大家能掌握这方面的知识,提高自己的核心竞争力,在谈薪的时候拿到最高的那个区间。


最后,外出打工不易,希望各位兄弟找到自己心仪的工作,虎年发发发! 也希望兄弟们能关注、点赞、收藏、评论支持一波,非常感谢大家!


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
1月前
|
分布式计算 负载均衡 算法
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
Hadoop-31 ZooKeeper 内部原理 简述Leader选举 ZAB协议 一致性
30 1
|
2月前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
3月前
|
消息中间件 分布式计算 安全
这一次,彻底弄懂ZooKeeper协议
ZooKeeper是动物园的意思,在2012年官方来给ZooKeeper写了这么一段有趣的“ZooKeeper之道”,难怪ZooKeeper现在发展得这么好。动物园管理员对他们负责的动物和参观动物的游客都尽心尽力。他们遵循一套守则,至今只有同行才知道,这套守则可以保证动物和游客的安全。大家好,我是南哥。一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。
139 4
这一次,彻底弄懂ZooKeeper协议
|
4月前
|
Nacos 微服务
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
94 4
|
6月前
|
消息中间件
【ZooKeeper系列】那ZooKeeper为什么还采用ZAB协议
ZooKeeper的流程是这样的,针对客户端的事务请求,Leader服务器会为其生成对应的事务Proposal,并发送给集群中其余机器,然后再分别收集各自的选票。因为ZAB协议将二阶段提交中的事务中断逻辑移除,所以只需要收集过半Follower服务器的反馈Ack后即可,最后就是进行事务提交。
【ZooKeeper系列】那ZooKeeper为什么还采用ZAB协议
|
6月前
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
【4月更文挑战第10天】ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
93 1
|
6月前
|
网络协议 中间件 数据库
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)
270 0
|
6月前
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
93 0
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
下一篇
无影云桌面