算法【ZAB 优先级的民主投票】

一、简介

       ZAB(ZooKeeper Atomic Broadcast)算法是ZooKeeper为实现分布式协调而设计的,它是对Raft选主算法的一种改进,在拥有投票选举的维度下增加节点ID以及数据ID(数据的最新值)为参考。

二、说明

       2.1、ZAB算法有3种角色:

       Leader:主节点

       Observe:观察者。只观察,无投票权

       Follower:跟随者

2.2、选举过程中的状态    

            

三、选举过程

       3.1、ZAB算法使用节点元素的信息

                每个节点都有一个唯一的三元组(server_id,server_zxId,epoch);server_id即为当前节点的Id,server_zxId即为当前节点存放数据的最新值id,epoch即为当前选主进行的轮数。

                ZAB算法在选主过程在投票给具体节点时,通过(vote_id,vote_zxId)表示投票给哪个节点,vote_id即为被投票的节点id,vote_zxid为被投票节点的zxid;其ZAB选主算法的唯一原则是,server_zxId值最大则成为Leader,如果相同,则看server_id最大者。

      3.2、选举主流程

                1、系统初始化时,即为第一轮投票选主,即epoch=1,所有的节点zxID=0,此时所有节点都会推选自己,且将选票信息(epoch,vote_id,vote_zxid)广播出去:

             

             2、此时epoch和zxId都是相同,根据ZAB算法判断原则,则会依据server_id最大者为推选对象,所以节点会更新vote_id=3进行重新广播:

             

            3、现在所有的节点都推线了Node3节点,则node3成为Leader,为Leading状态,其他节点为Following状态,Leader与Follower将会建立心跳机制。

            

 四、优缺点

        性能较高,对系统没有特殊的要求,采用的是广播的模式发送偷跑信息,如果集群中节点比较多,每个节点同时广播,则会有n*(n-1)个消息,容易发生广播风暴,同时还增加节点Id和数据Id参考,则ZAB在选主时间上相对长一点,那为何还是性能最优的,是因为它不会容易频繁出现切主的情况。

五、Bully、Raft以及ZAB算法对比

         

        思维导图如下:

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

posted on   木乃伊人  阅读(89)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示