又是金银金,众人都按耐不住心中的躁动。在这里跟大家分享一下之前面试遇到的一个知识点(ZAB协议),希望对大家有所帮助。如有不足,欢迎指点。ZAB协议虽然放弃了分布式协议中的可用性,但却是一致性的经典代表。1.Zookeeper服务器架构?我们先来看一下zookeeper的架构图。从上图我们可以看出,zookeeper服务器中会有一个leader节点,负责写入所有数据,而其他follower节点只支持读取。写入请求会被转发到leader节点进行处理,类似于读写分离的主从模式。2、ZAB协议流程说明,所有交易请求转发给leaderLeader分配一个全局单调递增的交易id(Zxid),广播交易提案Follower处理提案并进行反馈。leader收到一半以上的反馈,从这个过程可以看出广播Commit。ZAB协议重要的特点是==有序性==,主要在Zxid生成规则3.ZAB协议中的崩溃恢复中提到。如果leaderservercrash,或者leaderserver因为网络原因与半数以上的follower失去联系,那么就会进入crashrecovery模式。ZAB协议规定,如果一个交易Proposal在一台机器上成功处理,那么它应该在所有机器上都成功处理,即使机器出现故障和崩溃。ZAB协议保证那些已经在Leader服务器上提交的事务最终被所有服务器提交。ZAB协议确保丢弃那些仅在Leader服务器上提出的事务。ZAB协议需要设计的选举算法应该满足:保证Leader已经提交的交易被提交。提案,同时丢弃已跳过的交易提案。这种选举算法有什么好处?如果Leader选举算法能够保证新选出的Leader服务器有集群所有机器中ZXID最大的事务Proposal,那么就可以保证新选出的Leader一定有所有提交的proposal。如果事务Proposal编号最高的机器成为leader,leader服务器可以省去检查Proposal提交和丢弃工作的步骤。Requirementsfortheelectionalgorithm:theelectedLeadernodemustholdthehighestzxidandmorethanhalfofthenodesagree4.DatasynchronizationintheZABprotocolAftertheLeaderiselected,thedatasynchronizationbetweenFollowersandLeaderneedstobecompleted.,就可以开始上菜了。同步过程是这样的:Leader服务器会为每个Follower服务器准备一个队列,将那些还没有被每个Follower服务器同步的事务以Proposal消息的形式一个一个发送给Follower服务器,跟进每个Proposal信息。发送Commit消息以指示事务已提交。Follower服务器从Leader服务器同步了自己所有未同步的事务提议,并成功应用到本地数据库后,Leader服务器会将Follower服务器添加到真正可用的Follower列表中,并启动其他后续流程。5.ZAB协议中的丢弃交易提议ZAB协议中交易号ZXID的设计中,ZXID是一个64位的数字。低32位是一个简单的单调递增计数器。对于客户端的每一次交易请求,Leader服务器在生成新的交易Proposal时都会将计数器加1;高32位代表Leader周期的周期。Number,wheneveranewLeaderserveriselected,theZXIDofthelargesttransactionProposalinthebasiclocallogwillbetakenfromtheLeaderserver,andthecorrespondingepochvaluewillbeparsedfromtheZXID,andthenitwillbeincrementedby1之后,这个数字会作为一个新的纪元,低32位被置0,开始生成新的ZXID。基于这个策略,当一个包含上一个Leader周期还没有提交的事务Proposal的server开始加入集群时,发现此时集群中已经有leader,将自己连接到Leader服务器作为Follower,Leader服务器会根据自己服务器上最后提交的Proposal,将Proposal与Follower服务器的Proposal进行比较。当发现Follower中有上一个leader周期的交易Proposal时,Leader会要求Follower进行回滚操作(回滚到一个确实已经被接受的Proposal)最新提交的交易提案超过集群中一半的机器)。6、ZooKeeperClusterLeader选举机制选举机制中的概念:serverid:myid事务id,server中存储的最大Zxid逻辑时钟,发起的投票轮数。选举状态:>看,选举状态。>Following,follower状态,同步leader状态,参与投票。>观察,观察状态,同步leader状态,不参与投票。领先,领导状态。选举算法:每个服务实例发起投票选举自己为领导者(它为自己投票);当其他服务实例收到投票邀请时,会比较发起者的数据交易ID是否大于自己最新的交易ID。如果它很小,它不会投票给它。如果相等,则比较发起者的服务器ID,如果大则投给发起者;发起者在收到大家的投票反馈后,会检查得票数(包括自己)是否大于集群的票数,如果大于一半,则获胜,担任领导者;如果少于半数且未选出领导者,则将发起另一次投票。获胜条件:赞成票数大于一半的获胜逻辑。选举示例中有5台服务器,每台服务器都没有数据。他们的编号是1、2;投票信息,因为其他机器还没有启动,所以收不到反馈信息,服务器1的状态一直是Looking,服务器2启动,给自己投票,和之前启动的服务器1交换结果,因为服务器数2大,所以服务器2获胜,但是此时票数不超过一半,所以两个服务器的状态还是Lookingo服务器3启动,给自己投票,和之前启动的交换信息服务器1和服务器2。由于服务器3的人数最多,服务器3获胜,此时票数超过一半,所以服务器3成为领导者,服务器1和服务器2成为弟弟。服务器4启动,为自己投票,并与之前启动的服务器1、2、3交换信息。虽然服务器4的编号更高,但之前服务器3已经获胜,所以服务器4只能成为弟弟。server5启动,下面的逻辑和server4成了弟弟。7.总结在微服务和分布式时代,zookeeper作为协调服务的代表,在面试中很容易被问到。希望大家能够掌握这些知识,提高自己的核心竞争力,在谈薪资的时候得到报酬。到最高范围。最后,出去打工也不容易。希望各位兄弟都能找到自己喜欢的工作,虎年大吉大利!也希望兄弟们能够==关注,点赞,收藏,评论==支持一波,万分感谢!
