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 会不断自增,不可能产生重复。

相关文章
|
存储 算法 关系型数据库
浅谈 Raft 分布式一致性协议|图解 Raft
本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程。
791 0
浅谈 Raft 分布式一致性协议|图解 Raft
|
算法 安全
分布式一致性协议
分布式一致性协议
175 1
|
算法
分布式学习十:ZAB协议
分布式学习十:ZAB协议
103 0
分布式学习十:ZAB协议
|
算法 Java 开发者
简单回顾 Zab 协议集群模式原理|学习笔记
快速学习简单回顾 Zab 协议集群模式原理
148 0
简单回顾 Zab 协议集群模式原理|学习笔记
|
存储 算法 安全
分布式系统与一致性协议
分布式系统的设计目标一般包括如下几个方面 - 可用性:可用性是分布式系统的核心需求,其用于衡量一个分布式系统持续对外提供服务的能力。 - 可扩展性:增加机器后不会改变或极少改变系统行为,并且能获得近似线性的性能提升。 - 容错性:系统发生错误时,具有对错误进行规避以及从错误中恢复的能力。 - 性能:对外服务的响应延时和吞吐率要能满足用户的需求。
|
存储 算法 开发者
浅谈一致性协议
浅谈一致性协议
259 0
浅谈一致性协议
|
网络协议 数据库
Zookeeper ZAB 一致性协议
Zookeeper 是通过 ZAB 一致性协议来实现分布式事务的最终一致性。
157 1
Zookeeper ZAB 一致性协议
|
算法 Java 开发者
Raft 协议选举基本的概念 | 学习笔记
快速学习 Raft 协议选举基本的概念
131 0