当前位置: 首页 > 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的基本介绍、技术原…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...