分布式共识算法ZAB
文章目录
- 概述
- 一、ZAB算法概述
- 二、ZAB算法的核心特性
- 三、ZAB算法的工作流程
- 四、ZAB算法的优势与局限
- 其他共识算法
概述
分布式共识算法ZAB,全称Zookeeper Atomic Broadcast(Zookeeper原子广播),是Zookeeper保证数据一致性的核心算法。以下是对ZAB算法的详细解析:
一、ZAB算法概述
ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复和原子广播的协议。基于该协议,Zookeeper实现了一种主备模式的系统架构来保持集群中各个副本之间数据一致性。Zookeeper集群中,只有Leader服务器接受写请求,即使是Follower服务器接受到客户端的请求,也会转发给Leader服务器进行处理。
二、ZAB算法的核心特性
- 原子广播:ZAB协议的消息广播过程使用的是一个原子广播协议,类似一个二阶段提交过程。对于客户端发送的写请求,全部由Leader接收,Leader将请求封装成一个事务Proposal,并将其发送给所有Follower。然后,根据所有Follower的反馈,如果超过半数成功响应,则执行commit操作(先提交自己,再发送commit给所有Follower)。
- 崩溃恢复:当Leader崩溃(与过半的Follower失去联系)时,Zookeeper集群会进入崩溃恢复模式。在此模式下,会重新选举出一个新的Leader,并确保那些已经在原Leader提交的事务最终会被所有服务器提交,同时丢弃那些只在原Leader提出/复制但没有提交的事务。
- 全局唯一的事务ID(ZXID):在ZAB协议中,每个事务都会被分配一个全局递增的唯一ID,称为ZXID。ZXID是一个64位的字节码,其中低32位可以看作是一个简单的递增计数器,而高32位则代表了Leader服务器上取出本地日志中最大事务Proposal的ZXID的epoch值加1。这样的设计既保证了事务的顺序性,又让Follower能够通过高32位识别不同的Leader。
三、ZAB算法的工作流程
ZAB算法的工作流程主要分为消息广播和崩溃恢复两大块。
-
消息广播:
- Leader接收客户端的写请求。
- Leader将请求封装成一个事务Proposal,并分配一个全局唯一的ZXID。
- Leader将带有ZXID的Proposal通过先进先出队列(FIFO)分发给所有Follower。
- Follower接收到Proposal后,先将其写到硬盘,然后向Leader回复ACK。
- 当Leader接收到合法数量的ACKs后,向所有Follower发送COMMIT命令,并在本地执行该事务。
- Follower收到COMMIT命令后,执行该事务。
-
崩溃恢复:
- 当Leader崩溃或失去与过半Follower的联系时,系统进入崩溃恢复模式。
- 在恢复模式下,会重新选举出一个新的Leader。
- 新Leader会与所有Follower进行同步,确保数据一致性。
- 同步完成后,新Leader会将所有Follower加入到可用服务器列表中,并开始接受新的写请求。
四、ZAB算法的优势与局限
-
优势:
- 简化了数据恢复流程:通过ZXID的设计,使得Follower能够识别不同的Leader,并方便地与新Leader进行同步。
- 提高了可用性:通过崩溃恢复机制,能够在Leader崩溃后迅速恢复系统,并继续提供服务。
- 降低了同步阻塞:ZAB协议只需要Follower有一半以上返回ACK信息就可以执行提交,大大减小了同步阻塞。
-
局限:
- 仍然存在单点问题:虽然ZAB协议通过崩溃恢复机制提高了可用性,但Leader仍然是系统的单点瓶颈。如果Leader出现问题,仍然会影响系统的整体性能。
- 依赖网络稳定性:ZAB协议的正常工作依赖于网络的稳定性。如果网络出现故障,可能会导致消息丢失或延迟,从而影响系统的一致性。
综上所述,ZAB算法是Zookeeper保证数据一致性的核心算法。它通过原子广播和崩溃恢复机制,确保了分布式系统中各个副本之间数据的一致性。然而,ZAB算法也存在一些局限性和挑战,需要在实际应用中结合具体场景进行权衡和优化。
其他共识算法
共识算法Raft
共识算法基础概念以及共识算法Paxos
相关文章:

分布式共识算法ZAB
文章目录 概述一、ZAB算法概述二、ZAB算法的核心特性三、ZAB算法的工作流程四、ZAB算法的优势与局限 其他共识算法 概述 分布式共识算法ZAB,全称Zookeeper Atomic Broadcast(Zookeeper原子广播),是Zookeeper保证数据一致性的核心…...

程序化交易与非程序化交易者盈利能力孰优孰劣
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

【JavaEE】【多线程】进程与线程的概念
目录 进程系统管理进程系统操作进程进程控制块PCB关键属性cpu对进程的操作进程调度 线程线程与进程线程资源分配线程调度 线程与进程区别线程简单操作代码创建线程查看线程 进程 进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看做程序的一次运行过程&a…...

LeetCode hot100---贪心算法专题(C++语言)
贪心算法 当前取最优,最终完成全局最优1、买卖股票的最佳时机 (1)题目描述以及输入输出 (1)题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(2)输入输出描述: 输入&…...

《PyTorch深度学习快速入门教程》学习笔记(第15周)
目录 摘要 Abstract 1. 安装Anaconda 2. 查看显卡驱动 3. 安装Pytorch 4. Pytorch加载数据 5. 常用数据集两种形式 6. 路径直接加载数据 7. Dataset加载数据 摘要 本周报的目的在于汇报《PyTorch深度学习快速入门教程》课程第一周的学习成果,主要聚焦于py…...

kubeadm部署k8s1.28.0主从集群(cri-dockerd)
1. kubernetes集群规划 主机IP主机名主机配置角色192.168.100.3master12C/4G管理节点192.168.100.4node12C/4G工作节点192.168.100.5node22C/4G工作节点 2. 集群前期环境准备 (1)初始化脚本 #!/bin/bash echo "——>>> 关闭防火墙与SE…...

C语言复习概要(四)
本文 1. 操作符的分类算术操作符关系操作符逻辑操作符 2. 二进制制和进制转换二进制与十六进制的表示进制转换算法 3. 原码、反码和补码原码反码补码 1. 操作符的分类 C语言中的操作符种类繁多,常用的主要操作符可以按照其功能进行如下分类: 算术操作符…...

【楚怡杯】职业院校技能大赛 “Python程序开发”数据清洗练习
题目: 将书名为‘一级建造师 2020教材 2020版一级建造师 建筑工程管理与实务’的作者(空值)改为 全国一级建造师执业资格考试用书编写委员会,‘出版日期’改为‘2020-05-01’将书名为‘中国共产党简史(32开࿰…...

重学SpringBoot3-集成Redis(五)之布隆过滤器
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器?基本概念适用场景 2. 使用 Redis 实现布隆过滤器项目依赖Redis 配置…...

BGP路由原理详解
🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一. BGP简介: 二. BGP报文中的角色 BGP的报文 BGP处理过程 BGP有限状态机 BGP属性 三. BGP作用 四. BGP选路 …...

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)
Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 1. 项目说明 2. 数据说明 (1)心跳信号分类预测数据集 3. 模型训练 (1)项目安装 &am…...

AI股市预测的可参考价值有几何?
1. AI技术在股市预测中的应用 首先,AI技术在股市预测中的应用主要包括机器学习、深度学习、自然语言处理(NLP)和量化金融模型等。机器学习算法能够处理和分析大量的金融数据,从中寻找模式和规律。而深度学习特别是在处理复杂的非线…...

【大数据应用开发】2023年全国职业院校技能大赛赛题第02套
需要技能竞赛软件测试资料的同学们可s聊我,详细了解 目录 任务A:大数据平台搭建(容器环境)(15分) 任务B:离线数据处理(25分 任务C:数据挖掘(10分…...

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1
目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意:系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下…...

毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)
完整的论文代码见文章末尾 以下为核心内容 摘要 近年来,随着深度学习技术的发展,基于Transformer和BERT的模型在自然语言处理领域取得了显著进展。在中文医疗领域,命名实体识别(Named Entity Recognition, NER)是一项重要任务,旨…...

电子信息类专业技术学习及比赛路线总结(大一到大三)
本文主要是总结到目前为止电子信息类的专业技能、比赛路线,以后会持续更新,希望能为那些热爱电子技术或渴望学习课本之外知识的小伙伴们提供帮助,参加学科竞赛和找工作必备。(毕竟很多课本上的内容都没什么用 ) 1.单片…...

怎么将bash(sh)的所有输出保存到log/txt中?
tee 命令 这会将所有输出同时显示在屏幕上并追加到日志文件中。 bash your_script.sh 2>&1 | tee -a log_file.txt 其他方法不可用 只使用 >> 不会将除了print之外的所有保存 bash your_script.sh >> log_file.txt >> 和 2>&1一起只会保存在日…...

腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案
目录 前言1. 网站打开速度慢的原因分析1.1 服务器配置不足1.2 网络延迟1.3 Nginx配置不合理1.4 静态资源未优化 2. 网站速度的测试与分析2.1 使用浏览器开发者工具分析2.2 在线工具测试 3. 网站优化的具体方法3.1 服务器配置优化3.2 CDN加速与DNS优化3.3 优化Nginx配置3.3.1 启…...

如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具
您是否对 iPhone 运营商的网络感到困惑?不用担心,我们将向您介绍 8 大免费 iPhone 解锁服务。这些工具可以帮助您移除 iPhone 上的网络锁,并使您能够永久在网络上使用您的设备。如果您想免费解锁 iPhone,请阅读本文并找到最适合您…...

深度学习:CycleGAN图像风格迁移转换
目录 基础概念 模型工作流程 循环一致性 几个基本概念 假图像(Fake Image) 重建图像(Reconstructed Image) 身份映射图像(Identity Mapping Image) CyclyGAN损失函数 对抗损失 身份鉴别损失 Cyc…...

pytorch和yolo区别
PyTorch与YOLO的区别:一个简明的科普 在深度学习的领域,有许多工具和框架帮助研究人员和开发者快速实现复杂的模型。其中,PyTorch与YOLO(You Only Look Once)是两个非常重要的名词。本文旨在探讨这两个技术之间的区别&…...

使用树莓派搭建音乐服务器
目录 引言一、搭建Navidrome二、服务穿透三、音流配置 引言 本人手机存储空间128G,网易云音乐6个G,本就不富裕的空间更是雪上加霜,而且重点是,我根本没有听几首歌,清除缓存后,整个软件都还是占用了5个G左右…...

单链表的分解
编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 输入格式: 1 2 3 4 5 6 7 8 9 0 输出格式: 1 3 5 7 9 2 4 6 8 输入样例: …...

[OS] 4.Linux 内核
1. 下载 Linux 内核源代码 首先,你需要从官方站点或镜像站点下载 Linux 内核源代码。 官方源代码:The Linux Kernel Archives 清华大学镜像站点:Index of /kernel/v5.x/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载 .t…...

flutter_鸿蒙next_Dart基础③函数
目录 说在前面 1. 函数的基本定义 例子 代码解释 2. 函数的调用 代码解释 3. 可选参数与命名参数 可选参数 代码解释 调用示例 命名参数 代码解释 调用示例 4. 匿名函数与高阶函数 例子 代码解释 说在最后 说在前面 在 Dart 编程语言中,函数是构建…...

基于猎豹优化算法(The Cheetah Optimizer,CO)的多无人机协同三维路径规划(提供MATLAB代码)
一、猎豹优化算法 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性能高效,思路新颖。 参考文献: Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…...

Linux:进程的创建、终止和等待
一、进程创建 1.1 fork函数初识 #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 调用fork函数后,内核做了下面的工作: 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址…...

数值优化基础——基于优化的规划算法
1 最优化问题的一般形式 最优化问题:满足一系列约束的可行域内,找到使得目标函数最小的解 min f ( x ) s.t. x...

括号匹配——(栈实现)
题目链接 有效的括号https://leetcode.cn/problems/valid-parentheses/description/ 题目要求 样例 解题代码 import java.util.*; class Solution {public boolean isValid(String str) {Stack<Character> stacknew Stack<>();for(int i0;i<str.length();i)…...

【Java 并发编程】初识多线程
前言 到目前为止,我们学到的都是有关 “顺序” 编程的知识,即程序中所有事物在任意时刻都只能执行一个步骤。例如:在我们的 main 方法中,都是多个操作以 “从上至下” 的顺序调用方法以至结束的。 虽然 “顺序” 编程能够解决相当…...