当前位置: 首页 > news >正文

raft和zab算法的区别

首先,二者都是通过选举一个 Leader 来简化复杂度,后续的工作都是由 Leader 来做。

投票的时候,二者都需要定义一个轮次

Raft 定义了 term 来表示选举轮次
ZooKeeper 定义了 electionEpoch 来表示
同步数据的时候,都希望选举出来的 Leader 至少包含之前全部已提交的日志。

那如何能包含之前的全部日志?我们可以通过判断 Leader 节点中日志的逻辑时间序列,包含越新、越多日志的节点,越有可能包含之前全部的已提交日志。对于两种协议:

Raft:term 大的优先,然后 entry 的 index 大的优先
ZooKeeper:peerEpoch 大的优先,然后 zxid 大的优先
ZooKeeper 有 2 个轮次,一个是选举轮次 electionEpoch,另一个是日志的轮次 peerEpoch(即表示这个日志是哪个轮次产生的)。而 Raft 则是只有一个轮次,相当于日志轮次和选举轮次共用了。

但是有一个问题,日志越新越大的比较方式能满足我们“Leader 至少包含之前全部已提交的日志”的愿望吗?

对于 Raft 协议,特殊情况下不能。对于 Raft 协议,通过两个约束来保证一致性:

当前 term 的 Leader 不能“直接”提交之前 term 的 entries。
必须要等到当前 term 有 entry 过半了,才顺便一起将之前 term 的 entries 进行提交。
至于为什么必须这样,在什么特殊情况下会出问题,这篇文章中给了详细说明:Raft算法赏析建议直接看里面的例子,有点长我就不抄过来了。

但是对于 ZooKeeper 是不会出现这种情况的,因为 ZooKeeper 在每次 Leader 选举完成之后,都会进行数据之间的同步纠正,所以每一个轮次,大家都日志内容都是统一的。

继续对比,二者的选举效率也不同:

Raft 中的每个节点在某个 term 轮次内只能投一次票,哪个 Candidate 先请求投票谁就可能先获得投票,这样就可能造成分区,即各个 Candidate 都没有收到过半的投票,Raft 通过 Candidate 设置不同的超时时间,来快速解决这个问题,使得先超时的Candidate(在其他人还未超时时)优先请求来获得过半投票。
ZooKeeper 中的每个节点,在某个 electionEpoch 轮次内,可以投多次票,只要遇到更大的票就更新,然后分发新的投票给所有人。这种情况下不存在分区现象,同时有利于选出含有更新更多的日志的 Server,但是选举时间理论上相对 Raft 要花费的多。
在一个节点启动后,如何加入一个集群(这里是说本来就在集群配置内的一个节点):

Raft:比较简单,该节点启动后,会收到 Leader 的 AppendEntries RPC,在这个 RPC 里面包含 Leader 信息,可以直接识别。
ZooKeeper:启动后,会向所有的其他节点发送投票通知,然后收到其他节点的投票。该节点只需要判断上述投票是否过半,过半则可以确认 Leader。
关于 Leader 选举的触发:

首先集群启动的时候,二者肯定都要先进行选举。

如果选举完成后,发生了超时:

Raft:目前只是 Follower 在检测。如过 Follower 在倒计时时间内未收到 Leader 的心跳信息,则 Follower 转变成 Candidate,自增 term 发起新一轮的投票。
ZooKeeper:Leader 和 Follower 都有各自的检测超时方式,Leader 是检测是否过半 Follower 心跳回复了,Follower 检测 Leader 是否发送心跳了。一旦 Leader 检测失败,则 Leader 进入 Looking 状态,其他 Follower 过一段时间因收不到 Leader 心跳也会进入 Looking 状态,从而出发新的 Leader 选举。一旦 Follower 检测失败了,则该 Follower 进入 Looking 状态,此时 Leader 和其他 Follower 仍然保持良好,则该 Follower 仍然是去学习上述 Leader 的投票,而不是触发新一轮的 Leader 选举。
关于上一轮次 Leader 残存的数据怎么处理:

包括两种数据:

已过半复制的日志
未过半复制的日志
Raft:对于之前 term 的过半或未过半复制的日志采取的是保守的策略,全部判定为未提交,只有当前 term 的日志过半了,才会顺便将之前 term 的日志进行提交
ZooKeeper:采取激进的策略,对于所有过半还是未过半的日志都判定为提交,都将其应用到状态机中
Raft 的保守策略更多是因为 Raft 在 Leader 选举完成之后,没有同步更新过程来保持和 Leader 一致(在可以对外处理请求之前的这一同步过程)。而 ZooKeeper 是有该过程的。

在对正常请求的处理方式上,二者都是基本相同的,大致过程都是过半复制。

对于正常请求的消息顺序保证:

Raft:对请求先转换成 entry,复制时,也是按照 Leader 中 log 的顺序复制给 Follower 的,对 entry 的提交是按 index 进行顺序提交的,是可以保证顺序的
ZooKeeper:在提交议案的时候也是按顺序写入各个 Follower 对应在 Leader 中的队列,然后 Follower 必然是按照顺序来接收到议案的,对于议案的过半提交也都是一个个来进行的
如果是 Leader 挂了之后,重新选举出 Leader,会不会有乱序的问题?

Raft:Raft 对于之前 term 的 entry 被过半复制暂不提交,只有当本 term 的数据提交了才能将之前 term 的数据一起提交,也是能保证顺序的
ZooKeeper:ZooKeepe r每次 Leader 选举之后都会进行数据同步,不会有乱序问题
在出现网络分区情况下的应对措施,二者都是相同的:

目前 ZooKeeper 和 Raft 都是过半即可,所以对于分区是容忍的。如5台机器,分区发生后分成 2 部分,一部分 3 台,另一部分 2 台,这 2 部分之间无法相互通信。

其中,含有 3 台的那部分,仍然可以凑成一个过半,仍然可以对外提供服务,但是它不允许有节点再挂了,一旦再挂一台则就全部不可用了。

含有 2 台的那部分,则无法提供服务,即只要连接的是这 2 台机器,都无法执行相关请求。
参考 分布式系统协议Paxos、Raft和ZAB

相关文章:

raft和zab算法的区别

首先,二者都是通过选举一个 Leader 来简化复杂度,后续的工作都是由 Leader 来做。 投票的时候,二者都需要定义一个轮次 Raft 定义了 term 来表示选举轮次 ZooKeeper 定义了 electionEpoch 来表示 同步数据的时候,都希望选举出来…...

Arthas生成火焰图命令报错汇总

操作步骤 1、在容器中集成了arthas诊断和调试工具,想生产火焰图,执行profiler start,报错 如下: [arthas1]$ profiler start AsyncProfiler error: Can not find libasyncProfiler so, please check the arthas directory. 2、…...

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作

文章目录 鼠标形状设置常用鼠标形状设置自定义鼠标形状 重置形状获取鼠标鼠标跟踪鼠标跟踪案例 鼠标形状设置 常用鼠标形状设置 在PyQt中,QWidget类提供了设置鼠标形状的功能。可以使用setCursor()方法来更改QWidget及其子类的鼠标形状。该方法接受一个Qt.CursorS…...

2-多媒体数据压缩国际标准-Part3

文章目录 视频压缩的国际标准MPEG-1&MPEG-2/H.262视频标准MPEG-4 AVC/H.264视频标准H.264编码框架概述H.264视频编码的技术创新点 H.265/HEVC视频标准HEVC性能与编解码框架概述Quadtree-based coding structureDeblocking & SAO FilterHEVC各模块运算量 视频压缩的国际…...

使用Go模块进行依赖管理

摘要:本文将介绍Go语言中的模块(module)概念,以及如何使用Go模块进行依赖管理。我们会探讨模块的基本概念、使用方法、配置和依赖关系管理等方面的内容。 一、引言 Go语言自2007年发布以来,一直以其简洁、高效和强大…...

人工智能与航天技术的融合:未来发展的新趋势

人工智能与航天技术的融合:未来发展的新趋势 随着科技的飞速发展,人工智能和航天技术已经成为人类探索未知世界的重要工具。本文将探讨这两个领域的结合点,以及未来的发展趋势和应用前景。通过了解这些技术,读者将更好地理解人工…...

私有云:【11】win10安装Agent客户端组件

私有云:【11】win10安装Agent客户端组件 1、配置IP及加入域2、安装Agent客户端组件3、生成win10快照 1、配置IP及加入域 配置ip及dns 修改计算机名且加入域 进行验证 加入成功 将cloudadmin用户加入管理员组 输入cloudadmin户名密码验证 2、安装Agent客户端组件 …...

什么是程序化交易

大到量化、程序化、高频交易、套利交易、主观投资这些基本的概念,小到网格交易、条件单、T0、ETF套利、期现套利、算法拆单交易、打板策略等具体的投资方式。如果没有接触过这些,很容易混淆。 程序化交易: 指通过既定程序或特定软件&#xf…...

企业如何安全跨国传输30T文件数据

对于一些对数据敏感性比较高的企业,如IT企业和国企等,跨国数据传输是当今企业面临的一个重要挑战,尤其是当数据量达到30T这样的规模时,如何保证数据的速度、安全和合规性,就成为了企业必须考虑的问题。本文将从以下几个…...

【Linux】centos安装配置及远程连接工具的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…...

算法|每日一题|掷骰子等于目标和的方法数|动态规划

1155.掷骰子等于目标和的方法数 原题地址: 力扣每日一题:掷骰子等于目标和的方法数 这里有 n 个一样的骰子,每个骰子上都有 k 个面,分别标号为 1 到 k 。 给定三个整数 n , k 和 target ,返回可能的方式(从总共 kn 种…...

Java架构师软件工程全流程

目录 1 导学2 软件工程概述(原)3 能力成熟度模型4 软件过程模型5 逆向工程6 需求工程6.1 软件需求6.2 需求获取6.3 需求分析6.4 需求定义6.5 需求验证6.6 需求管理7 处理流程设计8 系统设计6.1 人机界面设计7 测试基础知识7.1 测试原则和方法7.2 测试阶段7.3 测试用例的设计7.4…...

深度学习中Transformer的简单理解

Transformer 网络结构 Transformer也是由编码器和解码器组成的。 每一层Encoder编码器都由很多层构成的,编码器内又是self-attention和前馈网络构成的。Self-attention是用来做加权平均,前馈网络用来组合。 但是decoder有点不同,多了一层En…...

Java架构师系统安全

目录 1 导学2 信息安全基础知识3 信息安全系统的组成框架4 信息安全技术4.1 加密技术4.2 对称加密技术4.3 非对称加密技术4.4 信息摘要4.5数字签名5 信息安全的抗攻击技术5.1 ARP欺骗的原理5.2 ARP欺骗的防范措施5.3 IP欺骗的原理和流程6 信息安全的保证体系和评估方法7 网络安…...

Stable Diffusion 图生图+ControlNet list index out of range

在webui1.5中用图生图ControlNet批量处理图片的时候报错: controlnet indexError: list index out of range 解决方法: 在controlNet的设置页中勾选不输出检测图即可。 参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui/issu…...

SylixOS BSP开发(七)

实现系统调试信息打印接口 当系统出错时或者使用内核日志时会输出一些打印信息,这最终都是调用到bspLib.c中的bspDebugMsg 这个接口来实现的,所以我们在开发BSP时,第一个要做的工作就是实现这个接口。 一般的调试信息都是通过串口来输出的&am…...

多媒体应用设计师 第15章 多媒体素材的制作和集成

口诀 思维导图 2020...

CentOS和Ubuntu命令行方式配置静态IP

CentOS和Ubuntu都是通过修改相关配置文件来配置静态IP,但是他们的配置文件有所不同 CentOS CentOS需要修改的配置文件:/etc/sysconfig/network-scripts/ifcfg-需要修改的网卡名字 [rootbloke ~]# cd /etc/sysconfig/network-scripts/ [rootbloke netw…...

服务器快速申请免费SSL证书_2023年10月29日可用

目的 在服务器端通过命令快速申请免费域名的SSL证书.--2023年10月29日可用环境 Centos拥有域名 假设该域名为:demo.com Ubuntu 同样适用 步骤 下载组件 前期准备 CentOS服务器 yum update yum install socatUbuntu服务器 apt update apt install socat下载acme…...

ChatGPT专业术语及有效使用方法概述

. 目录 一、摘要 二、ChatGPT基本介绍 三、ChatGPT技术原理 四、ChatGPT数据训练 五、ChatGPT微调方法 六、ChatGPT应用案例 七、有效使用ChatGPT的方法 八、结论 一、摘要 本文将详细介绍ChatGPT的专业术语及有效使用方法,包括对ChatGPT的基本介绍、技术原…...

Generative AI落地四层架构与企业级避坑指南

1. 这不是“AI画画”或“AI写文案”——它是一场底层认知范式的迁移Generative AI,这个词现在几乎天天刷屏,但很多人点开一篇介绍,看到的还是“用MidJourney生成海报”“让ChatGPT写周报”这类表层操作。这就像当年第一次听说“互联网”&…...

2026终极测评:16款降AIGC工具横评,论文降重降ai率终极答案!

随着AI写作技术的迅猛发展,越来越多的学术创作者开始依赖各类生成工具提升效率。然而,2026年各大高校与科研机构对AIGC内容的检测标准愈发严格,论文中的一丝AI痕迹都可能成为被质疑的导火索。面对日益严峻的查重与AIGC检测压力,如…...

Windows环境OpenCore引导盘制作:7步搞定Hackintosh安装

Windows环境OpenCore引导盘制作:7步搞定Hackintosh安装 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide 想在Windows电脑上安装macOS吗?别担…...

SAP 和 Legacy 系统之间的平面文件集成,GUI_DOWNLOAD 的实战设计

很多 SAP 项目里,系统集成并不总是从 API、RFC、OData 或 Event Mesh 开始。相当多的老系统仍然依赖一个最朴素的接口形态,固定格式的文本文件。财务共享平台要一份物料清单,仓储系统要一份当天新增物料,历史的生产执行系统只认 .txt 或 .csv,这时 ABAP 报表把 SAP 表里的…...

5分钟快速上手SMUDebugTool:AMD Ryzen硬件调试终极指南

5分钟快速上手SMUDebugTool:AMD Ryzen硬件调试终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

如何将GIMP秒变Photoshop?GimpPs主题插件完整配置指南

如何将GIMP秒变Photoshop?GimpPs主题插件完整配置指南 【免费下载链接】GimpPs Gimp Theme to be more photoshop like 项目地址: https://gitcode.com/gh_mirrors/gi/GimpPs 如果你正在寻找一款能让GIMP拥有Photoshop般专业界面的主题插件,GimpP…...

3步掌握抖音批量下载:终极免费无水印下载器完整指南

3步掌握抖音批量下载:终极免费无水印下载器完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

如何高效批量下载抖音无水印视频:开源工具完整实战指南

如何高效批量下载抖音无水印视频:开源工具完整实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

AI气象模型统一基准:可复现、多源真值、时空一致的评测标尺

1. 这不是又一个“天气数据集”,而是一把标尺:为什么AI气象建模急需统一基准“AI Weather Models”这个词组最近两年在气象学会议、AI顶会和工业界技术白皮书里出现的频率,已经快赶上“大模型”本身了。但我和团队在去年参与三个不同机构的AI…...

TAO循环:构建可测试、可监控的AI智能体行为闭环

1. 项目概述:这不是在写提示词,是在搭建一个微型认知操作系统 “Beyond the Prompt: Engineering the ‘Thought-Action-Observation’ Loop”——这个标题乍看像一篇AI哲学论文,但实操起来,它根本不是在教你怎么写更花哨的promp…...