分布式学习十:ZAB协议

简介: 分布式学习十:ZAB协议

ZAB协议

ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。

ZAB协议的开发设计人员在协议设计之初并没有要求其具有很好的扩展性,最初只 是为雅虎公司内部那些高吞吐量、低延迟、健壮、简单的分布式系统场景设计的。

在 ZooKeeper的官方文档中也指出, ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper设计的崩溃可恢复的原子消息广播算法。

总结来说,ZAB 协议就是:"主备一致性","消息广播","崩溃恢复"

流程

所有节点都会在3个状态中转换:

1:选举leader/崩溃恢复(leader宕机重新选举)

2:消息广播 (leader接收消息广播给Follower)

3:崩溃恢复(leader宕机重新选举)

在节点启动后,会寻找leader节点,没有的话将选举一个leader

选举leader成功后,所有数据写入都将经过leader,由leader发送给其他follower

当follower与leader失去联系之后,将进入崩溃恢复模式,在follower中选举一个拥有相对最新数据的节点成为leader

重新消息广播

消息广播

leader选举成功后,所有数据将写入进leader,由leader发送给其他follower

image.png

事务二阶段提交

在消息广播中,leader服务器会给每个事务提案分配一个全局单调递增的唯一事务ID,每次广播时需要保证每个事务ID的先后顺序

follower接收到广播之后,需要把事务写入到磁盘,写入成功之后给leader反馈ACK

leader接收到超过半数ACK后,广播commit信息,要求follower提交事务

注意,每个事务ID需要严格遵守顺序

崩溃恢复

当leader服务器崩溃后,可能会出现以下情况

1:leader出现了提案5,通知时中途崩溃了

2:leader在发送提交提案5时,中途崩溃

2种情况都可能出现,这个时候所有follower数据都是不一致的

这个时候,follower选举时,需要选举一个commitID最大值的follower作为leader,每个follower选举时需要比对自己的commit ID,只有大于时才投票,这个时候可以确保新选举的leader拥有最完整的数据

前 leader恢复

事务ID是一个64位的数字,低32位记录了单调递增的事务ID,高32位记录了leader周期的编号,每次选举都会使得此值+1

在前leader恢复后,由于新leader正常工作,可能提出了新的提案5,这个时候前leader需要比对高32位编号,如果不一致,则丢弃此提案,同步新leader的数据

崩溃恢复方式类似于raft

目录
相关文章
|
21天前
|
消息中间件 算法 调度
分布式系统学习10:分布式事务
本文是小卷关于分布式系统架构学习系列的第13篇,重点探讨了分布式事务的相关知识。随着业务增长,单体架构拆分为微服务后,传统的本地事务无法满足需求,因此需要引入分布式事务来保证数据一致性。文中详细介绍了分布式事务的必要性、实现方案及其优缺点,包括刚性事务(如2PC、3PC)和柔性事务(如TCC、Saga、本地消息表、MQ事务、最大努力通知)。同时,还介绍了Seata框架作为开源的分布式事务解决方案,提供了多种事务模式,简化了分布式事务的实现。
53 5
|
25天前
|
NoSQL 关系型数据库 MySQL
分布式系统学习9:分布式锁
本文介绍了分布式系统中分布式锁的概念、实现方式及其应用场景。分布式锁用于在多个独立的JVM进程间确保资源的互斥访问,具备互斥、高可用、可重入和超时机制等特点。文章详细讲解了三种常见的分布式锁实现方式:基于Redis、Zookeeper和关系型数据库(如MySQL)。其中,Redis适合高性能场景,推荐使用Redisson库;Zookeeper适用于对一致性要求较高的场景,建议基于Curator框架实现;而基于数据库的方式性能较低,实际开发中较少使用。此外,还探讨了乐观锁和悲观锁的区别及适用场景,并介绍了如何通过Lua脚本和Redis的`SET`命令实现原子操作,以及Redisson的自动续期机
92 7
|
8月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
280 0
|
4月前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
103 2
|
5月前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
5月前
|
机器学习/深度学习 算法 自动驾驶
深度学习之分布式智能体学习
基于深度学习的分布式智能体学习是一种针对多智能体系统的机器学习方法,旨在通过多个智能体协作、分布式决策和学习来解决复杂任务。这种方法特别适用于具有大规模数据、分散计算资源、或需要智能体彼此交互的应用场景。
282 4
|
4月前
|
架构师 Java 数据中心
二阶段提交:确保分布式系统中数据一致性的关键协议
【10月更文挑战第16天】在分布式系统中,数据一致性的维护是一个至关重要的挑战。为了应对这一挑战,二阶段提交(Two-Phase Commit,简称2PC)协议应运而生。作为一种经典的分布式事务协议,2PC旨在确保在分布式系统中的所有节点在进行事务提交时保持一致性。
60 0
|
5月前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
6月前
|
自动驾驶 5G 调度
|
7月前
|
算法 数据库 OceanBase
共识协议的技术变迁问题之Raft协议对分布式系统有什么贡献
共识协议的技术变迁问题之Raft协议对分布式系统有什么贡献
80 8