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

news/2025/9/26 23:46:53/文章来源:https://www.cnblogs.com/wzzkaifa/p/19110719

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.mzph.cn/news/916859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于MCO使用配置

关于MCO,相关介绍如下图: 针对以上8个时钟信号作为MCO时钟输出的配置如下:1、系统时钟输出此时MCO引脚(PA8)输出时钟频率即系统主频的大小GPIO_InitTypeDef GPIO_InitStructure = {0};RCC_APB2PeriphClockCmd(RC…

网络运维 --- ntp服务器

网络运维 --- ntp服务器在Windows系统中开启NTP服务器功能,主要可以通过以下步骤实现。以下是详细说明:方法一:通过注册表配置(适用于Windows专业版/服务器版)开启NTP服务器功能:按 Win + R 输入 regedit 打开注…

站点和网站的区别南宁网站建设活动

首先,我们需要明确一点,HTTPS证书的价格并不是一成不变的,它受到多种因素的影响。其中最主要的因素包括证书的类型、颁发机构以及所需的验证级别。 从类型上来看,HTTPS证书主要分为单域名证书、多域名证书和通配符证书。单域名证书…

向量那点事儿

目录一、向量坐标表示二、加减法向量加法应用示例向量减法应用示例三、向量内积应用示例四、向量外积应用示例五、小试牛刀代码示例六、小结 一、向量 这次我们继续聊一下向量。 向量可以理解为一个有方向的量。 它既有…

c++输入输出详解

C++ 的输入输出(I/O)主要通过标准库中的流对象实现,核心是对“数据流”的操作。其语法规则围绕“流对象”“操作符”和“数据类型匹配”展开,以下从标准 I/O(控制台) 和文件 I/O 两部分详细说明。 一、标准输入输…

docker/docker compose/k8s

Docker、Docker Compose 和 Kubernetes(K8s)是现代容器化技术的核心组成部分,但它们扮演着不同的角色。 简单来说:Docker:用来创建和运行单个容器的工具。Docker Compose:用来定义和运行多个相互依赖的容器的工具…

中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱

中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱 随着腾讯CODING DevOps系列产品宣布逐步停止服务,中国开发者社区正面临一次重要的工具链迁移抉择。在这一行业转折点上,本土化研发协作平台Gitee凭借其…

PySpark - Get the number of rows

PySpark - Get the number of rowsspark is a SparkSession object, what does spark.sql().collect() do? ChatGPT said:Good question 👍 Let’s break it down:spark → a SparkSession object.spark.sql(query)…

如何推销网站建设做网站怎么签订协议

元描述:想要找到下一个 100 倍加密货币投资?请密切关注这篇文章;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON(开放网络)生态系统正在蓬勃发展!这是一个充满激动人心的…

RK3588-ubuntu server - 详解

RK3588-ubuntu server - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

一文教你上手 Geometric Glovius 6.0:安装、授权与首个项目演示

Geometric Glovius 6.0.0是一款功能强大的3D可视化分析软件。它支持CATIA、NX、Creo等多种主流CAD文件格式,能精确测量距离、面积、体积等数据,还可进行动态截面切割、模型差异对比等操作。用户可通过缩放、旋转等方…

32单片机+free rtos移植CJSON库函数主要流程

1.cJSON库的官方地址 源码地址: https://github.com/DaveGamble/cJSON 2.提取cJSON.c cJSON.h 3.在项目中添加cJSON的路径并编译一遍 4.在main函数初始化时添加下面代码,重定向内存的申请,内存申请定向到rtos的内存池…

Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏

Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏 在数字经济蓬勃发展的今天,代码托管平台已经从单纯的工具演变为开发者生态系统的核心枢纽。作为国内领先的一站式代码托管与协作平台,Gitee凭借对中国…

从MESA模型到锁升级:synchronized性能逆袭的底层逻辑

从MESA模型到锁升级:synchronized性能逆袭的底层逻辑管程(Monitor)是一种用于管理共享资源访问的程序结构,能确保同一时刻只有一个线程访问共享资源,解决并发编程中的互斥和同步问题。MESA模型是管程的经典实现,…

网站建设项目进展情况汇报浙江省建设银行纪检官方网站

机器人模型获取 接上期:机器人控制系列教程之控制理论概述,文中详细讲解了如何通过Solidworks软件导出URDF格式的文件。文末提到了若需要将其导入到Simulink中可在命令行中输入smimport(urdf/S_Robot_urdf.urdf),MATLAB将自动打开Simulink以…

输入输出接口

IO接口的作用 又被称为IO控制器,设备控制器,负责协调主机和外部设备之间的数据传输 1.数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设的工作速度匹配 2.错误或状态检测:通过状态寄存器反馈设备的各种错误,状态…

Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若

在开发长期运行的服务时,如何让程序优雅退出是一个重要课题。今天我们来深入探讨Go语言中如何处理常见的进程信号,实现平滑关闭。 理解三个关键信号 1. SIGINT(信号2)- 礼貌的中断请求全称:Signal Interrupt触发方…

(二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析

本文是 Apache DolphinScheduler 3.1.9 版本源码解读的第二篇:Worker Server 启动流程源码解读以及相关流程设计。结尾处附有相关流程图,供大家参考。作者 | 李杰 移动云,Apache DolphinScheduler贡献者在现代数据驱…

实用指南:虚拟机搭建 DHCP 服务器 + 配置 DHCP 中继:完整实操指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站设计的技术方案wordpress安装主题教程

(来源:武汉市发改委)原标题:加快打造“五个中心” 武汉率先开建人工智能计算中心从华为东莞松山湖基地运来的预制化模块箱体,正在光谷科学岛起步区被吊装,未来将被“拼装”成武汉重要的人工智能算力基础设施。3月1日,武…