Zab 协议如何保持数据的一致性 | 学习笔记

简介: 快速学习 Zab 协议如何保持数据的一致性

开发者学堂课程【精通 Spring Cloud AlibabaZab 协议如何保持数据的一致性学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/634/detail/10104


Zab 协议如何保持数据的一致性


内容介绍

一、如何保持数据一致性问题

二、2pc 两阶段提交协议原理

三、算法如何实现

四、会出现的问题


一、如何保持数据一致性的问题

image.png

Zap 协议如何保持数据一致性,如上图假设,假设现在有三台节点,中间为 leader,从左往右一次为 myid=1myid=2myid=3Zookeeper 中,只要能有领导角色和跟随角色,任何写的请求绝对会统一转发到 leader 事件,这样才能保持数据一致性。

假设图中左边 follow 节点进行了一个写的操作,这个写的请求会被转发到中间 leader 事件,任何写的请求都会被转发给 leader 事件。Leader 节点先把这个数据写完之后再同步给所有 follow 节点。

所有写的请求统一交给我们的领导角色,领导角色写完数据之后,领导角色再将数据同步给每个节点。

注意:数据之间的同步采用2pc 两阶段提交协议。


二、2pc 两阶段提交协议原理

假设左侧 follower 节点有个写的请求转发给 leader 节点,leader节点写完请求之后会生成一个 zxid,叫做 zookeeper 的数字 id,每个都会对应一个 zx 的全局 id,如果有很多写的请求都转发到一个 leader 节点,zxid 有锁的机制,保证只有一个去做写的操作才会生成一个 zxid,这个 zxid 就标志着一个写的请求。

假设 zxid=100leader要把数据同步给 follower,这个同步过程叫做算法。


三、算法如何实现

Leader 节点会发两次通知,第一次通知要带上 zxid 告诉 follower 节点需要把数据同步给每个 follower 节点,问follower 节点是否可以接收,只要满足过半数的 follower 节点同意接收 zxid=100,这时leader节点才会把数据同步给 follower 节点。


四、会出现的问题

Leader 节点先把数据同步给左边 follower 节点,那么这个 follower zxid 会从0变为100,而此时,正好中间的leader 节点宕机,这时就需要从左右两个 follower 节点中选出一个新的 leader

那么这两个 follower 节点哪一个为新的leader节点?

左边 follower 节点数据最新 zxid=100,右边节点之前没有同步 leader 节点的数据 zxid=0,这种情况下应该先比较zxid,初始情况下 zxid=0,而左边已同步,比较 zxid 谁的数据大,则谁就是新的 leader

如果 zxid 相等的情况下,myid 谁最大谁就为领导角色(先比较 zxid)。

zxid 最开始搭建 ookeeper 时是没有的,是 Leader 写请求时生成。因为所有写的请求都要交给 leade 事件,每次做写的时候 zxid 会不断自增,不可能产生重复。

相关文章
|
运维 数据可视化 数据处理
实时计算Flink场景实践和核心功能体验 评测
实时计算Flink场景实践和核心功能体验 评测
383 5
|
Web App开发 Ubuntu 前端开发
【踩坑记】Ubuntu 20.04.6 LTS下编译安装gcc 4.4.0
【踩坑记】Ubuntu 20.04.6 LTS下编译安装gcc 4.4.0
|
JavaScript 前端开发 NoSQL
无界 SaaS 数字生态工具:去平台中心化助力企业数字化转型
无界 SaaS 数字生态工具通过去平台中心化助力企业数字化转型,涵盖技术实现、商业逻辑、数据架构、用户界面设计等多方面。本文提供了一个简化的框架和示例代码,包括前端(React.js)和后端(Node.js + Express)的实现,帮助企业和开发者快速启动项目。示例代码涵盖了用户注册、登录和产品列表的获取功能,并提供了安全性、用户认证、数据确权等方面的注意事项。
|
存储 Ubuntu 应用服务中间件
如何在 Ubuntu 上安装和使用 Nginx?
ginx(发音为“engine-x”)是一种流行的 Web 服务器软件,以其高性能和可靠性而闻名。它是许多流行网站使用的开源软件,包括 Netflix、GitHub 和 WordPress。Nginx 可以用作 Web 服务器、负载均衡器、反向代理和 HTTP 缓存等。
1735 0
|
数据安全/隐私保护 UED
物业管理收费APP软件开发发展前景
随着城市化和智能化趋势,物业管理行业借助收费APP实现转型,提升效率和业主体验。APP功能包括:故障报告与维修评价,账单查看与在线支付,信息通知推送,社区市场交易,投诉建议平台,快递代收服务,以及社区互动圈。尽管面临数据安全、标准统一和技术创新等挑战,物业管理APP仍展现出广阔发展前景。寻求开发合作可联系相关人员。
|
JavaScript 前端开发 Java
React-Native Android打包
React-Native Android打包
205 0
将图片(路径)转换为Base64 和 将base64转换为file类型
将图片(路径)转换为Base64 和 将base64转换为file类型
|
前端开发
React组件通信:如何优雅地实现组件间的数据传递
React组件通信:如何优雅地实现组件间的数据传递
473 0
|
存储
ES聚合查询详解(四):管道聚合
ES聚合查询详解(四):管道聚合
722 0
ES聚合查询详解(四):管道聚合