zookeeper 强一致性在底层是如何实现的?

小明吃了麻婆豆腐,于是他被麻婆告非礼。

 

zookeeper系统架构图

      

 

ZAB 节点的三种状态图

       

 

zookeeper 强一致性是依赖于2个东西

  消息广播,崩溃恢复

 

在了解这个原理之前,先来认识几个词的概念:ZAB协议

 

ZAB协议

  ZAB(ZooKeeper Atomic Broadcast,ZooKeeper 原子广播协议),Zookeeper 使用 ZAB协议作为其数据一致性的核心算法,来保证分布式事务的最终一致性。基于该协议,Zookeeper 实现了一种主备模式(即 Leader 和 Follower 模型)的系统架构来保持集群中各个副本之间数据一致性。

 

ZAB协议特点

  1. ZAB 协议需要确保那些已经在 Leader 服务器上提交(Commit)的事务最终被所有的服务器提交。
  2. ZAB 协议需要确保丢弃那些只在 Leader 上被提出而没有被提交的事务。

 

ZAB协议具体实现可以分为2个阶段:

  1、消息广播阶段

    Leader 节点接受事务提交,并且将新的 Proposal 请求广播给 Follower 节点,收集各个节点的反馈,决定是否进行 Commit

  2、崩溃回复阶段

    如果在同步过程中出现 Leader 节点宕机,会进入崩溃恢复阶段,重新进行 Leader 选举,崩溃恢复阶段还包含数据同步操作,同步集群中最新的数据,保持集群的数据一致性。

整个 ZooKeeper 集群的一致性保证就是在上面两个状态之前切换,当 Leader 服务正常时,就是正常的消息广播模式;当 Leader 不可用时,则进入崩溃恢复模式,崩溃恢复阶段会进行数据同步,完成以后,重新进入消息广播阶段。

 

消息广播

  在 ZooKeeper 中所有的事务请求都由 Leader 节点来处理,其他服务器为 Follower,Leader 将客户端的事务请求转换为事务 Proposal,并且将 Proposal 分发给集群中其他所有的 Follower。

  完成广播之后,Leader 等待 Follwer 反馈,当有过半数的 Follower 反馈信息后,Leader 将再次向集群内 Follower 广播 Commit 信息,Commit 信息就是确认将之前的 Proposal 提交。

 

崩溃恢复

  崩溃恢复模式将会开启新的一轮选举,选举产生的 Leader 会与过半的 Follower 进行同步,使数据一致,当与过半的机器同步完成后,就退出恢复模式, 然后进入消息广播模式。

 

Zxid是什么?

  Zxid 是 Zab 协议的一个事务编号,Zxid 是一个 64 位的数字,其中低 32 位是一个简单的单调递增计数器,针对客户端每一个事务请求,计数器加 1;而高 32 位则代表 Leader 周期年代的编号;

  Zxid 结构图

  

      

 

ZAB 流程

   

      

 

posted @ 2022-07-14 09:04  方达达  阅读(18)  评论(0编辑  收藏  举报