掌握ZooKeeper的二阶段提交及其优缺点

news2024/11/24 7:17:45

1. ZooKeeper的协议

1.1 ZAB协议

要深入学习ZooKeeper前,胡广认为我们要先学习ZooKeeper的核心理念,所有的ZooKeeper行为都是围绕这个核心来进行的。说了那么多,它就是——ZAB协议。

ZAB协议英文全称叫ZooKeeper Atomic Broadcast,我们透过中文含义可以大概了解他做了什么事情:ZooKeeper原子消息广播协议。

来看看原子广播在维基百科的解释。

在容错分布式计算中,原子广播或全序广播是指多进程系统中的所有正确进程都以相同顺序接收同一组消息(即相同的消息序列)的广播。

那ZooKeeper广播啥呢?我们知道ZooKeeper集群有Leader服务器、Follower服务器,这个Leader服务器接收了客户端所有的事务请求,事务请求可以是新增某一个ZNode节点,也可以是删除某一个ZNode节点。

这些事务请求的变更要不要提交、如何通知其他Follower服务器进行同步变更,这就是广播涉及的主要内容了。

ZAB协议主要包含了消息广播、崩溃模式,跟着胡广往下看看。

1.2 消息广播

ZAB协议的消息广播类似于二阶段提交过程。顾名思义事务最终的提交要分为两个阶段。

消息广播的流程如下:

(1)针对客户端的事务请求,Leader服务器会为其生成对应的事务Proposal,同时广播给集群中其余Followr机器。这个事务Proposal我们可以把他理解为事务提案。

(2)Follower服务器在接收到事务Proposal后会以事务日志形式写入到本地磁盘中,如果写入成功,则反馈一个Ack反馈给到Leader服务器。

(3)Leader服务器会收集其他Follower服务器的选票,只有半数的Follow服务器同意本次事务请求,那Leader服务器就会广播一个Commit消息,通知所有Follower服务器进行事务提交。

总结下来,也就是分为二个阶段,第一阶段是询问事务Proposal的写入尝试能否成功,第二阶段就是在Leader服务器、Follower服务器进行事务提交。

在这里插入图片描述

1.3 消息广播的缺点

当然消息广播的二阶段提交有所缺点。

(1)在消息广播的第二阶段,如果有部分Follower服务器没有收到Leader服务器广播的事务提交消息,这就会出现数据不一致的情况了。

(2)单点问题。如果Leader服务器在第二阶段奔溃了,那其他Follower服务器仍然会处于锁定上一次事务资源的状态中。

(3)同步阻塞问题。参与一个客户端事务请求时,Leader、Follower服务器的其他逻辑都需要进行阻塞,直到等到上一个二阶段提交完成之后才会开始执行。

1.4. 崩溃模式

ZAB协议涉及Leader服务器、Follower服务器,Leader服务器充当了最重要的作用。如果Leader服务器崩溃了或者失去和Follwer服务器之间的联系,那上面胡广提到的二阶段提交各种问题很可能都会出现。

开头不是说ZAB协议包含了消息广播、崩溃模式?别慌,崩溃模式就是为此而生的。

崩溃模式总的来说就做了两个事情,我们记住这两点方便理解:一个是确保提交已经被Leader提交的事务Proposal,另一个是丢弃已经被跳过的事务Proposal。

(1)为了解决上文的第1点问题。Leader服务器会为每一个Follower服务器都准备一个Proposal消息队列,通过该队列发送那些没有被各Follower服务器同步的事务Proposal,同时在Proposal消息后面加上Commit消息让Follower服务器进行事务提交。这可以解决二阶段提交带来的数据不一致问题。

(2)为了解决上文的第2点问题。ZooKeeper设计了一个高32位的epoch,用来作为Leader服务器的标识;设计了一个低32位的事务偏移量ZXID,用来作为最新已提交事务的偏移量。

新的Leader服务器上线后,新的Leader服务器拥有集群里最大的事务偏移量,Leader服务器会和Follower服务器的ZXID进行比对,从而让Follower服务器回退被跳过的事务Proposal。

结束: 

 你好,我是胡广。 致力于为帮助兄弟们的学习方式、面试困难、入职经验少走弯路而写博客 🌹🌹🌹 坚持每天两篇高质量文章输出,加油!!!🤩

 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注     吧 我会尽力带来有趣的内容 。

 😎感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以      给我留言咨询,希望帮助更多的人

更多专栏:
📊 Java设计模式宝典:从入门到精通(持续更新)

📝 Java基础知识:GoGoGo(持续更新)

⚽ Java面试宝典:从入门到精通(持续更新)

🌟 程序员的那些事~(乐一乐)

🤩 Redis知识、及面试(持续更新)

🚀 Kafka知识文章专栏(持续更新)

🎨 Nginx知识讲解专栏(持续更新)

📡 未完待续。。。

🎯 未完待续。。。

🔍 未完待续。。。

感谢订阅专栏 三连文章

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

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

相关文章

TIDB的整体架构和主要功能

1. 基础架构 PD :负责集群管理和调度。TiDB Server :负责 SQL 查询处理。TiKV/TiFlash:负责数据存储和事务处理。 1.1 PD (Placement Driver) Server 1.1.1 基础介绍 整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时…

让我们聊一下小团队也可以用的敏捷开发

使用敏捷开发的团队往往需要寻找一个更佳的平衡点: 较少的团队成员:通常更容易沟通和协作,减少了协调成本。小团队(如 5 到 9 人)能够更灵活地适应变化,且管理和决策过程较为高效。 较多的团队成员&#x…

喜报 | 知从科技荣获 “AutoSec 安全之星 - 优秀汽车软件供应链安全方案奖”

近日,「AutoSec 2024第八届中国汽车网络安全周暨第五届智能汽车数据安全展」在上海盛大举行。本届大会由谈思实验室和谈思汽车主办、上海市车联网协会联合主办,以汽车“网络数据安全、软件安全、功能安全”为主题,设置了“31X”模式&#xff…

Docker学习笔记-部署MySQL-命令解读

部署MySQL 先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,在MobaXterm中执行下面命令即可安装MySQL。 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql …

c++修炼之路之AVL树与红黑树

目录 一:AVL树 1.AVL树的概念 2.AVL树插入数据后平衡因子及更新的情况 3.AVL树节点的定义 4.AVL树的插入及旋转 二:红黑树 1.红黑树的概念及性质 2.红黑树节点的定义 3.红黑树的插入操作情况 4.红黑树与AVL树的比较 接下来的日子会顺顺利利…

多方位实测运动耳机排行榜前十名,助你选出靠谱的运动耳机!

非常荣幸能与各位运动爱好者共聚本次的骨传导耳机知识分享!作为一名深耕运动科技领域多年的专家,今天将主要跟大家分析一下市面上比较热门的骨传导耳机。骨传导耳机作为当下市面上非常新颖且有创意的耳机种类,相信有很多用户都想入手一款&…

流片为啥那么重要?

很多微电子与集成电路专业的学生、初入IC职场的工程师,以及电子/机械大类专业的同学,在进入芯片设计行业时,都或多或少听说了参与流片的重要性。 但是却并不是很清楚——流片到底有多重要?流片为什么重要? 研0的同学…

从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走

随着科技的飞速发展,视频监控技术在社会安全、企业管理、智慧城市构建等领域扮演着越来越重要的角色。一个高效智能的视频监控管理系统不仅能够提升监控效率,还能在预防犯罪、事故预警、数据分析等方面发挥巨大作用。 一、需求分析 在设计视频监控管理…

存在分包的微信小程序解包反编译还原(含报错处理与代码修复)

01前言 本文主要对微信小程序的解包步骤进行复现梳理,网上虽然已有明确详细的文章,但是实际复现过程中程序报错的情况并不少见。对此情况进行了梳理以及对相关工具的代码、调用方式等进行了优化修复。 本文内容: 常规微信小程序逆向解析的…

el-input设置后缀显示单位并阻止滚轮微调

项目中收集form表单信息时,有时会需要在el-input后面显示单位,效果如图: 当然,我们可以直接在输入框后面加上单位,但直接给输入框上加单位不管是视图上还是用户体验上看起来都要好一点 element-plus / element-ui给我…

MySQL数据库 — Explain命令

EXPLAIN 命令在 MySQL 查询优化中发挥了重要作用。通过 EXPLAIN 的输出,可以获取有关查询执行计划的详细信息,从而有助于优化和调试查询。不过,它也有一定的局限性。 使用Explain EXPLAIN 语句通过在查询前加上 EXPLAIN 关键字来展示查询的…

正则表达式三板斧

推荐练习网站:https://regex101.com/ 解释一下: 1、最常用的就是[],表示匹配任意字符,[]中所有的变量只需要输入一次(比如搜索三个点…,只需要输入[.]即可) 2、*表示>0次,表示>1次&#x…

计算机毕业设计选题推荐-推拿知识互动平台-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

大白话!解析大模型原理!

LLM的工作原理对大多数人来说是个谜。虽然它们本质上在于“预测下一个词”,并需要大量文本进行训练,但具体细节往往令人困惑。原因在于这些系统独特的开发方式:**基于数十亿词汇训练的神经网络,不同于传统的人类编写的软件。**尽管…

SpringCache源码解析(三)——@EnableCaching

一、源码阅读 让我们进行源码阅读把。 1.1 阅读源码基础: Import(xxx.class)里的类可以有两种类: ImportSelector接口的实现类;ImportBeanDefinitionRegistrar接口的实现类; 两种接口简介: ImportSelector接口&am…

如何在算家云搭建Open-Sora1.0

一、模型介绍 2024 年 3 月 18 日,Colossal-AI 团队发布了 Open-Sora 1.0 项目,该项目是一个全面开源的视频生成模型项目,项目旨在高效制作高质量视频,并使所有人都能使用其模型、工具和内容。 模型架构 : Open-Sor…

ubuntu20.04 编译vtk 9.3.1+vtkDicom+GDCM 3.0.24

1 下载vtk源码 链接地址如下: Download | VTK 使用cmake-gui编译(如何安装使用,查看前两篇文章),运行命令: cmake-gui 如下图所示,选择源码目录和build目录: 勾选 BUILD_SHARED…

基于SpringBoot+Vue+MySQL的志愿服务管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着社会对志愿服务需求的日益增长,传统的志愿服务管理方式已难以满足高效、透明、精准的管理需求。为提升志愿服务组织的运营效率,优化资源配置,增强志愿者参与度和满意度,开发基…

项目启动 | 盘古信息携手晶捷电子,开启数字化生产管理新纪元

随着智能制造技术的不断成熟与普及,一个全新的制造业时代已经到来,智能制造已成为推动全球制造业转型升级的重要引擎。在日新月异的市场环境中,传统制造业更需加快转型升级的步伐,以智能化、精细化的生产模式,实现生产…

昆仑联通8000万补流全砍:曾分红近亿,应收账款周转率连年下滑

《港湾商业观察》廖紫雯 日前,北京昆仑联通科技发展股份有限公司(以下简称:昆仑联通)拟冲刺北交所,保荐机构为东方证券。 2023年6月29日,昆仑联通于上交所递交招股书,拟冲刺沪市主板&#xff…