ZAB协议全程ZOOKEEPER AUTOMIC BROADCAST

zab协议类似于Paxos,但是paxos协议不能保证先提交的Proposer会被执行,同事也有可能会出现活锁的情况,zab协议改进了Paxos协议,Elect出Leader,只有Leader才能提交Proposer,同事集群内部Leader负责写请求,读操作会被负载到PC上,而且zab协议保证了如果Leader 挂掉之后能够快速保证选举出最新的Leader,而且最新的Leader是zk集群内部proposer zxid最大的那台pc,这样保证集群内部恢复的时候可以最快,同事保证了丢弃只有在Leader上提交的Proposer。

相比如Paxos协议,zab协议少了Prepare阶段,图中Follower对应Paxos中的Acceptor,Observers对应Paxos中的Learner

五:ZAB协议

 

ZAB协议下面zk集群内部角色

五:ZAB协议

设计特点:

    1:最终一致性,client无论连接那个Server,展示给他的都是同一个试图,这也是zk最重要的一个特性

    2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。

    3 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

    4 .等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。

    5.原子性:更新只能成功或者失败,没有中间状态。

    6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

ZAB协议:

主要分为原子广播和崩溃恢复阶段

原子广播阶段:

    就是zk对外提供服务的时候,Leader负责接收client的请求,广播给Follower,Observer负责学习,此处不再做赘述

崩溃恢复阶段:

zk中规定了节点的状态,又是那种Leading,Following,Looking三种,Leading就是Leader,Following就是Follower,Looking就是在Leader挂掉之后集群内部Server的状态,下面是一个状态切换图:

五:ZAB协议

当节点处于Looking的时候就开始进行选举,具体的选举流程此处不再赘述,ZK中采用的FastLeaderElection算法

上面也说到了,在选举的时候,只有事务ID最高的那台server才能成为Leader

在选举出Leader之后,leader服务器会把之前的zxid解析出来,前32位加一作为新事务的前32位,后32位从0开始;

新的Leader会通过zxid和Follower进行对于,来达到数据同步的状态,当恢复到一致的时候,集群开始进入原子广播状态,其实这个过程很复杂,我这里只是很简单的说一下,有兴趣的可以自行百度

 

转载于:https://my.oschina.net/u/1034481/blog/823989

相关文章:

  • 2021-07-22
  • 2021-11-17
  • 2021-08-10
  • 2022-12-23
猜你喜欢
  • 2021-07-25
  • 2021-05-27
  • 2021-08-21
相关资源
相似解决方案