分布式与一致性协议之ZAB协议(二)

ZAB协议

ZAB协议是如何实现操作地顺序性的?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果用一句话解释ZAB协议到底是什么,我觉得它是能保证操作顺序性的、基于主备模式的原子广播协议。
接下来,还是以指令X、Y为例具体演示一下,帮助你更好地理解为什么ZAB协议能实现操作的顺序性(为了演示,我们假设节点A为主节点,节点B、C为备份节点)。
首先,在ZAB协议中,写操作必须在主节点(比如节点A)上执行。如果客户端访问的节点是备份节点(比如节点B),则备份节点会将写请求转发给主节点,如图所示。
接着,当主节点接收到写请求后,它会基于写请求中的指令(也就是X、Y)来创建一个提案(Proposal),并使用一个唯一的ID来标识这个提案。这里我说的唯一ID就是事务标识符(TransactionID,也就是zxid),如图所示
从图中可以看到,指令X、Y对应的事务标识符分别为<1,1>和<1,2>。这两个标识符是什么含义呢?
你可以这么理解,事务标识符是64位的long型变量,由任期编号epoch和计数器counter两部分组成(为了形象和方便理解,我把epoch翻译城任期编号),格式为<epoch,counter>,其中,高32位位任期编号,低32位为计数器。
1.任期编号就是创建提案时领导者的任期编号,当新领导者当选时,任期编号递增,计数器被设置为零。比如,前领导者的任期编号为1,那么新领导者对应的任期编号将为2
2.计数器就是具体标识提案的整数,每次领导者创建新的提案时,计数器将递增。比如,前一个提案对应的计数器值为1,那么新的提案对应的计数器值将为2
为什么要设计这么复杂呢?因为事务标识符必须按照顺序、唯一标识一个提案,也就是说,事务标识符必须是唯一的、递增的。
在创建完提案之后,主节点会基于TCP协议并按照顺序将提案广播到其他节点,如图所示,这样就能保证先发送的消息先被收到,进而保证消息接收的顺序性。如图所示,指令X一定在指令Y之前到达节点B、C.
然后,当主节点接收到指定提案的大多数确认响应后,该提案将处于提交状态(Commited),此时主节点会通知备份节点提交该提案,如图所示。
主节点提交提案是有顺序性的。它会根据事务标识大小顺序提交提案,如果前一个提案未提交,此时主节点是不会提交后一个提案的。也就是说,指令X一定会在指令Y之前提交。
最后,主节点返回执行成功的响应给节点B,由节点B再转发给客户端,这样我们就实现了操作的顺序性,保证了指令X一定在指令Y之前执行。
最后想补充的是,当执行完写操作后,接下来你可能需要执行读操作。为了提升读并发能力,ZooKeeper提供的是最终一致性,也就是说,读操作可以在任何节点上执行,如图所示,客户端会读到旧数据。如果客户端必须要读到最新数据,怎么办呢?ZooKeeper提供了一个解决办法,那就是sync命令。我们可以在执行读操作前执行sync命令,从而使客户端可以读到最新数据,如代码所示

[zk: localhost:2181(CONNECTED) 17] create /geekbang 123
Created /geekbang
[zk: localhost:2181(CONNECTED) 18] create /geekbang/time 456
Created /geekbang/time
[zk: localhost:2181(CONNECTED) 19] sync /geekbang/time
Sync is OK
[zk: localhost:2181(CONNECTED) 20] get /geekbang/time
456
[zk: localhost:2181(CONNECTED) 22] stat /geekbang/time
cZxid = 0x51104
ctime = Sun May 05 15:46:28 CST 2024
mZxid = 0x51104
mtime = Sun May 05 15:46:28 CST 2024
pZxid = 0x51104
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

注意

ZAB协议的术语众多,而且有些术语表达的是同一个含义,它们有些在文档中出现,有些在代码中出现,你只有准确理解术语,才能更好地理解ZAB协议地原理。这里补充一些内容。

  • 1.提案(Proposal):进行共识协商地基本单元,可以理解为操作(Operation)或指令(Command),常出现在文档中
  • 2.事务(Transaction):也是指提案,常出现代码中。比如,pRequest2Txn()将接收到的请求转换为事务;再比如,未提交提案会持久化存储在事务日志中。这里需要注意的是,这个术语很容易引起误解,因为它不是指更广泛被接受的含义,具有ACID特性的操作序列,而是仅仅指提案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832005.shtml

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

相关文章

【不使用深度学习框架】多层感知机实现手写Minist数据集识别

手写Minist识别是一个非常经典的问题&#xff0c;其数据集共有70000张28*28像素的图片&#xff0c;其中60000张作为训练集&#xff0c;剩下的10000张作为测试集&#xff0c;每一张图片都表示了一个手写数字&#xff0c;经过了灰度处理。 本文延续前面文章提到的多层感知机&…

【Osek网络管理测试】[TG1_TC12]网络管理报文ID范围

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT可识别的网络管理报文NMID(0x400~0x46F) 3.测试…

从一到无穷大 #26 Velox:Meta用cpp实现的大一统模块化执行引擎

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言业务案例PrestoSparkXStreamDistributed messaging systemData IngestionData Pr…

JavaScript的操作符运算符

前言&#xff1a; JavaScript的运算符与C/C一致 算数运算符&#xff1a; 算数运算符说明加-减*乘%除/取余 递增递减运算符&#xff1a; 运算符说明递增1-- 递减1 补充&#xff1a; 令a1&#xff0c;b1 运算a b ab12ab22ab--10a--b00 比较(关系)运算符&#xff1a; 运算…

(优作)基于STM32 人群定位、调速智能风扇设计(程序、设计报告、视频演示)

引言 当今生活中&#xff0c;风扇已成为人们解暑的重要工具&#xff0c;然而使用风扇缓解夏日酷热的同时也存在着一些问题。比如&#xff0c;由于风扇的转动方向只能机械式的保持在一定范围内&#xff0c;而不能根据人群的位置做出具体的调整&#xff0c;即在一片区域内&#x…

MongoDB详解

目录 一、MongoDB概述 1.MongoDB定义 2.MongoDB主要特点 2.1文档 2.2集合 2.3数据库 2.4数据模型 二、安装MongoDB 1.Windows安装MongoDB 1.1下载MongoDB 1.2安装MongoDB 1.3配置MongoDB 1.3.1可能遇到的问题 1.4安装一盒可视化工具 2.Linux安装MongoDB 2.1下载…

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用&#xff1a;反向代理和负载均衡 swagger Swagger 与 Yapi Swagger&#xff1a; 可以自动的帮助开发人员生成接口文档&#xff0c;并对接口进行测试。 项目接口文档网址&#xff1a; ​​​​​​​http://localhost:808…

Claude聊天机器人推出全新iOS客户端及团队专属计划

Anthropic 正在使其 Claude AI 更易于在移动设备上访问。该公司发布了适用于 iOS 的 Claude 移动应用程序,任何用户都可以免费下载。与聊天机器人的移动网络版本类似,该应用程序跨设备同步用户与 Claude 的对话,允许他们从计算机跳转到应用程序(反之亦然),而不会丢失聊天…

带权并查集

续前章节&#xff1a;并查集及应用 目录 1 带权问题1.1 点带权1.2 边带权 2 例题2.1 家族合并2.2 信息传递2.3 [NOI2002] 银河英雄传说 1 带权问题 1.1 点带权 用num[i]记录节点 i i i 所在的集合的数量。 初始化&#xff1a;所有的num[i]都是 1 1 1&#xff0c;因为每个点…

【stm32-2】按键控制LED光敏传感器控制蜂鸣器

1.按键控制LED uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输入数据寄存器某一个端口的输入值 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取整个输入数据寄存器 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDe…

Linux基础指令001

名称日期版本说明作者了解并熟练运用Linux基础指令2024/05/04v0.0.1汇总篇lgb 一&#xff0c;了解Linux,并安装 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协…

【机器学习-21】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林&#xff08;RF&#xff09; 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…

导弹追踪效果实现_unity基础开发教程

Unity开发中导弹追踪的原理与实现 前言原理逻辑实现导弹逻辑目标赋值 应用效果结语 前言 ⭕在之前的一个项目的开发中&#xff0c;需要加入一个导弹追踪的游戏功能&#xff0c;且还要实现不规则发射路径&#xff0c;但是这种功能是第一次做&#xff0c;经过查阅资料和询问做过的…

Pytorch快速上手

Pytorch快速上手 一、加载数据集 &#xff08;Dataset&#xff09; 加载数据集需要继承Dataset&#xff0c;通常情况下需要实现__init__方法、__getitem__方法以及__len__方法。 案例一&#xff1a; import osimport torch from torch.utils.data import Dataset from PIL …

[嵌入式AI从0开始到入土]17_Ascend C算子开发

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

C++静态数组和C语言静态数组的区别( array,int a[])

目录 一、区别 1、越界读&#xff0c;检查不出来 2、越界写&#xff0c;抽查&#xff0c;可能检查不出来&#xff0c;有局限性 二、array缺点 一、区别 C语言的静态数组int a[]; 静态数组的越界检查不稳定的&#xff1a; 1、越界读&#xff0c;检查不出来 2、越界写&#x…

通过helm在k8s上安装minio

1 helm安装minio 1.1 下载minio 添加仓库 helm repo add bitnami https://charts.bitnami.com/bitnami 将minio拉取下来 helm pull bitnami/minio --version 版本号 解压到本地开始编辑配置文件 tar -zxf minio-xxx.tgz [rootk8s-master01 minio]# vi values.yaml 1.2…

Python-VBA函数之旅-open函数

目录 一、open函数的常见应用场景 二、open函数使用注意事项 三、如何用好open函数&#xff1f; 1、open函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、open函数的常见应用场…

Kannala-Brandt 鱼眼相机模型

最近在学习 ORB-SLAM3 的源代码&#xff0c;并模仿、重构了相机模型的实现 在学习的过程中发现针孔相机 (Pinhole) 与鱼眼相机 (Fisheye) 都有畸变参数&#xff0c;但是鱼眼相机无法使用 cv::undistort 函数去畸变 在对鱼眼相机的深度归一化平面进行可视化后&#xff0c;发现…

SQL 注入神器:SQLMap 简单使用

前言 SQLMap 是一款用于自动化 SQL 注入检测与渗透测试的开源工具&#xff0c;其主要功能是检测和利用 Web 应用程序中的 SQL 注入漏洞。以下是 SQLMap 的主要特点和功能&#xff1a; 自动化检测&#xff1a;SQLMap 可以自动发现 Web 应用程序中的 SQL 注入漏洞&#xff0c;包…