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

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

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

1、zookeeper服务端架构?

图片.png

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

2、ZAB协议过程说明

图片.png
  1. 所有事务请求转发给leader
  2. Leader分配全局单调递增事务id(Zxid),广播事务提议
  3. Follower处理提议,做出反馈
  4. Leader收到过半数反馈,广播Commit

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

3、ZAB协议中的崩溃恢复

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

图片.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作为协调服务的代表,在面试中很容易被问到,希望大家能掌握这方面的知识,提高自己的核心竞争力,在谈薪的时候拿到最高的那个区间。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容