当前位置: 首页 > news >正文

分布式专题——19 Zookeeper分布式一致性协议ZAB源码剖析 - 指南

1 ZAB 协议

  • Zookeeper Atomic Broadcast(Zookeeper 原子广播协议):

    • ZAB 是 Paxos 算法的简化实现,并非直接采用 Paxos 来解决分布式一致性
    • 专门为分布式协调服务 Zookeeper 设计,支持崩溃恢复原子广播这两个关键能力,Zookeeper 正是基于该协议实现功能;
  • 基于 ZAB 协议,Zookeeper 采用**主备模式(Leader-Follower 模式)**的系统架构,以此保持集群中各个副本之间的数据一致性;

    在这里插入图片描述

    • 客户端所有写入素材的处理,都先发送到Leader 节点

    • 接着由 Leader 负责将资料复制到Follower 节点,从而保证集群内数据的一致性;

      • 数据复制过程(类似两阶段提交 2PC,但有优化);
      • ZAB 协议在数据复制时,只需要Follower(包含 Leader 自己的 ack)有一半以上返回 Ack 信息,就可以执行提交操作;
    • 这种优化大大减小了同步阻塞,同时也提高了可用性

  • ZAB 协议的两种核心模式(Zookeeper 在这两种模式间切换):

    • 消息广播模式:当 Leader 服务可以正常启用时,Zookeeper 进入消息广播模式,进行正常的数据广播等操作;

    • 崩溃恢复模式:当 Leader 服务不可用时,Zookeeper 进入崩溃恢复模式,以恢复集群的正常服务能力。

2 消息广播模式

3 崩溃恢复模式

  • Leader 崩溃(即 Leader 失去与过半 Follower 的联系)时,Zookeeper 会进入崩溃恢复模式。此时需要解决 Leader 崩溃后的素材一致性障碍,比如:

    • 假设 1:Leader 在复制信息给所有 Follower 后,还没收到 Follower 的 ack 就崩溃;

    • 假设 2:Leader 收到 ack 并提交自己,且发送了部分 commit 后崩溃;

  • ZAB 协议为崩溃恢复定义的两个原则

    • 原则 1:ZAB 协议会丢弃那些只在 Leader 提出,但没有提交的事务;

    • 原则 2:ZAB 协议确保那些已经在 Leader 提交的事务,最终会被所有服务器提交

  • ZAB 协议设计了下面这个选举算法,用于崩溃恢复时新 Leader 的选举:

    • 该选举算法要能确保提交已经被 Leader 提交的事务,同时丢弃已经被跳过的事务
    • 为满足这一要求,选举出的新 Leader 需要拥有集群中所有机器里 ZXID(事务 ID,全局递增唯一)最大的事务
    • 这样做的好处是:可以省去 Leader 服务检查事务的提交和丢弃工作这一步操作,提升恢复效率。

4 数据同步

5 ZooKeeper 写数据ZAB协议源码流程图

在这里插入图片描述

http://www.rkmt.cn/news/11416.html

相关文章:

  • 网络运维 --- ntp服务器
  • 向量那点事儿
  • PySpark - Get the number of rows
  • RK3588-ubuntu server - 详解
  • Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若
  • 实用指南:虚拟机搭建 DHCP 服务器 + 配置 DHCP 中继:完整实操指南
  • Kendo UI for jQuery 2025 Q3新版亮点 - AI 智能网格与全新表单体验
  • DevExpress WPF中文教程:如何使用虚拟源将WPF数据网格绑定到任何数据源?
  • 数据跨境传输解决方案助力企业安全合规高效流通
  • 题解:P9454 [ZSHOI-R1] 巡城
  • 我的第一个赚钱网站 -- 从网站源码到集成AdSense获利的全过程
  • Gradle读取仓库配置文件的优先级
  • PCS PMA,如何理解硬核IP
  • pycharm中使用调试模式运行 uvicorn.run(app)报错TypeError: _patch_asyncio.locals.run() got an unexpected keywor解决
  • 交换机命令
  • 开写第一篇
  • C#操作Excel核心要点:告别手动,拥抱自动化
  • 250925
  • 使用责任链模式简化if-else代码示例
  • SQLAlchemy -> Base.metadata.create_all(engine )详解 - 实践
  • Transformer 面试题及详细答案120道(51-60)-- 模型变体与改进 - 详解
  • 【源码解读之 Mybatis】【基础篇】-- 第3篇:SqlSession的创建与生命周期
  • 基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
  • 不只是一台玩具车:开源燃料电池机器人HydroBot全揭秘 - 实践
  • 前端笔记:vue中 Map、Set之间的采用和区别
  • 性能暴涨50%:PD分离KV cache传输的实战干货
  • 【GitHub每日速递 250925】 一套代码跑遍全平台!Flutter 让你的应用开发提速 10 倍
  • 上海芯片上市公司市值大揭秘!谁是“芯”界顶流?
  • 中科微卫星定位芯片代理商,北斗双频定位导航模组ATGM332D-F7N
  • 四个第一!又一国产GPU突围亮相!