Raft 共识算法3-日志复制

news2024/9/20 21:26:36

Raft 共识算法3-日志复制

Raft算法中译版地址:https://object.redisant.com/doc/raft%E4%B8%AD%E8%AF%91%E7%89%88-2023%E5%B9%B44%E6%9C%8823%E6%97%A5.pdf

英原论文地址:https://raft.github.io/raft.pdf

Etcd Assistant 是一款 etcd 可视化管理软件,便捷高效地操作您的 etcd 集群;支持多种键的视图;管理租约、用户、角色和权限。

一旦领导者被选出,它就开始为客户请求提供服务。 每个客户端请求都包含要由复制状态机执行的命令。 领导者将该命令作为新条目附加到其日志中,然后向每个其他服务器并行发出 AppendEntries RPC 以复制该条目。 当条目已被安全复制(如下所述)后,领导者将条目应用于其状态机并将该执行的结果返回给客户端。 如果跟随者崩溃或运行缓慢,或者网络数据包丢失,领导者会无限期地重试 AppendEntries RPC(即使在它已经响应客户端之后)直到所有跟随者最终存储所有日志条目。

日志的组织方式如 @fig6 所示。每个日志条目都存储一个状态机命令以及领导者收到该条目时的任期号。 日志条目中的任期号用于检测日志之间的不一致,并确保 @fig3 中的某些属性。每个日志条目还有一个整数索引,用于标识其在日志中的位置。

fig6.png
日志是由条目组成的,这些条目按顺序编号。每个条目都包含创建它的任期(每个框中的数字)和状态机的命令。如果一个条目已被安全复制,那么该条目就被认为是已提交的。

领导者决定何时将日志条目应用到状态机是安全的; 可以被安全地应用到状态机的条目称为已提交的。 Raft 保证已提交的条目是持久的,并且最终会被所有可用的状态机执行。 一旦创建条目的领导者已将其复制到大多数服务器(例如,@fig6 中的条目 7),那么该日志就被称为已提交的(此时将该日志条目应用到状态机是安全的)。 这也会提交领导者日志中所有先前的条目,包括前任领导者创建的条目。 5.4 节讨论了在领导者变更后应用此规则时的一些微妙之处,并且还表明此提交定义是安全的。 领导者跟踪它知道的已提交条目的最高索引,并将该索引包含在未来的 AppendEntries RPC(包括心跳)中,以便其他服务器最终找到。 一旦跟随者得知日志条目已提交,它会将条目应用于其本地状态机(按日志顺序)。

我们设计了 Raft 日志机制来保持不同服务器上的日志之间的高度一致性。 这不仅简化了系统的行为并使其更具可预测性,而且还是确保安全的重要组成部分。 Raft 维护了以下属性,它们共同构成了 @fig3 中的日志匹配(Log Matching )属性:

  • 如果不同日志中的两个条目具有相同的索引和任期,则它们存储相同的命令。
  • 如果不同日志中的两个条目具有相同的索引和任期,则在该条目之前的所有条目都是相同的。

第一个属性源于这样一个事实,即领导者在给定任期内最多创建一个具有给定日志索引的条目,并且日志条目永远不会改变它们在日志中的位置。 第二个属性由 AppendEntries 执行的简单一致性检查保证。 当发送 AppendEntries RPC 时,领导者在其日志中包含紧接在新条目之前的条目的索引和任期。 如果跟随者在其日志中没有找到具有相同索引和任期的条目,那么它会拒绝新条目。 一致性检查作为一个归纳步骤:日志的初始空状态满足日志匹配属性,并且只要追加日志,一致性检查就会保留日志匹配属性。 因此,每当 AppendEntries 成功返回时,领导者就知道了跟随者的日志与自己的日志相同。

在正常运行期间,领导者和跟随者的日志保持一致,因此 AppendEntries 一致性检查永远不会失败。 但是,领导者崩溃可能会使日志不一致(旧领导者可能没有完全复制其日志中的所有条目)。 这些不一致可能会导致一系列领导者和追随者崩溃。 @fig7 说明了跟随者的日志可能与新领导者的日志不同的情况。 跟随者可能缺少领导者中存在的条目,它可能具有领导者中不存在的额外条目,或两者兼而有之。 日志中缺失和多余的条目可能跨越多个任期。

在这里插入图片描述

当领导者上台时,追随者日志中可能会出现任何场景 (a–f)。 每个方框代表一个日志条目; 框中的数字是它的任期。 追随者可能缺少条目 (a–b),可能有额外的未提交条目 (c–d),或两者都有 (e–f)。 例如,如果该服务器是任期 2 的领导者,则可能会发生场景 (f),向其日志添加多个条目,然后在提交其中任何一个之前崩溃; 它很快重新启动,成为第 3 任期的领导者,并在其日志中添加了更多条目; 在任期 2 或任期 3 中的任何条目被提交之前,服务器再次崩溃并保持停机几个任期。

在 Raft 中,领导者通过强制追随者的日志复制自己的日志来处理不一致。 这意味着跟随者日志中的冲突条目将被领导者日志中的条目覆盖。 第 5.4 节将表明,在再加上一个限制时,这是安全的。

为了使跟随者的日志与其自己的一致,领导者必须找到在跟随者的日志中和自己一致的最新日志条目,然后在跟随者日志中删除该点之后的所有条目,并将该点之后的所有领导者日志条目发送给跟随者。 所有这些操作都在通过 AppendEntries RPC 执行的一致性检查时发生。 领导者为每个跟随者维护一个 nextIndex,这是领导者将发送给该跟随者的下一个日志条目的索引。 当一个领导者第一次掌权时,它会将所有 nextIndex 值初始化为其日志中最后一个索引之后的索引(@fig7 中的 11)。 如果跟随者的日志与领导者的日志不一致,则在下一个 AppendEntries RPC 中,一致性检查将失败。 拒绝后,领导者递减 nextIndex 并重试 AppendEntries RPC。 最终 nextIndex 将达到领导者和跟随者日志匹配的点。 当发生这种情况时,AppendEntries RPC 将成功,它会删除跟随者日志中的所有冲突条目并追加领导者日志中的条目(如果有的话)。 一旦 AppendEntries RPC 成功,跟随者的日志与领导者的一致,并且在剩余的任期内保持这种状态。

如果需要,可以优化协议以减少被拒绝的 AppendEntries RPC 的数量。 例如,当拒绝 AppendEntries 请求时,跟随者可以包括冲突条目的任期和它为该任期存储的第一个索引。 有了这些信息,领导者可以减少 nextIndex 以绕过该任期中的所有冲突条目; 每个有冲突条目的任期都需要一个 AppendEntries RPC,而不是每个条目一个 RPC。 在实践中,我们怀疑这种优化是否必要,因为故障很少发生,而且不太可能有很多不一致的条目。

使用这种机制,领导者上台时不需要采取任何特殊措施来恢复日志一致性。 它刚刚开始正常运行,日志自动收敛以响应 AppendEntries RPC 一致性检查的失败。 领导者永远不会覆盖或删除自己日志中的条目(@fig3 中的领导者仅附加(Leader Append-Only)属性)。

这种日志复制机制展示了第 2 节中描述的理想的共识属性:只要大多数服务器正常运行,Raft 就可以接受、复制和应用新的日志条目; 在正常情况下,可以通过单轮 RPC 将新条目复制到集群的大多数; 单个慢速跟随者不会影响性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea使用 ( 一 ) 安装及初步使用

1.介绍 1.1.什么是 IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面]等工具。简单说就是开发工具,java开发中常用的…

一文读懂数据安全分级分类

目录 为什么要分级分类? 通用数据分级分类框架 数据分类 数据分类的常用方法 数据分类流程 数据分级 数据分级的常用方法 数据定级流程 行业数据安全分级分类指南 金融行业 电信行业 政务数据 健康医疗 企业实践 附录:数据分级分类大合集…

CAD格式交换全能:CAD DLL 15.0 Crack

添加对 SLDASM、FSAT、SAB、SMT、IPT 和 IFC 格式的支持。 2023 年 4 月 25 日 - 16:27 新版本 特征 改进的 3D: 打开 3D 文件时提高了速度。改进了对 SAT、STEP、SLDPRT、X_T、X_B、OBJ 格式的读取。添加了对 SLDASM、FSAT、SAB、SMT、IPT、IFC 格式的支持。添加了…

聊聊 maven的版本号version 以及maven指定版本号范围写法

1. 版本管理(version) 说了那么多废话,什么是版本管理?首先,一个健康的项目,通常有一个长期、合理的版本演变过程。版本管理是指项目整体版本的演变过程管理,就比如从1.0-SNAPSHOT --> 1.0 …

懂这3件事情,就能成功实施MES管理系统实现“数字化”工厂

当前,很多企业对MES管理系统需求旺盛,但是,要保证MES管理系统能够有效地实施,实现精益化管理,打造出一个“数字化”工厂,公司在实施MES管理系统之前,还必须弄明白为什么要MES管理系统、MES有什么…

QGIS数据可视化学习笔记04(完结)——POI检索和数据上图

一、POI数据检索概念 什么是POI检索?为什么要使用POI检索? 有的时候,我们可能不知道某个位置的地址,比如说北京朝阳图书馆,这个位置没有任何部门会去公布位置信息,但是我们又需要用到,这个时候就…

接口测试工具

工作当中有不少时间在编写和维护接口自动化测试用例。打算先整理一些接口相关工具的使用。 简单对接Web口测试的相关工具/技术做个划分。 HTTP/SOAP协议接口的功能测试: 1、浏览器URL(GET请求) 2、浏览器插件:Poster、Postman 简单…

科学防雷接地和雷电防护方案

说到防雷,可能不少人首先会想到避雷针,而“避雷针”这一概念,很容易让大家对防雷的概念造成误解。 误解1: 避雷针是用来“避雷”的。 其实,避雷针的学名叫“接闪器”,不是用来“避开雷击”的,而是用来“迎…

AI绘画——Checkpoint模型Dark Sushi Mix 大颗寿司Mix

目录 版本解析 模型简介 模型特性 模型演示(多图预警) Picture One 正面tag: 负面tag: Checkpoint模型darkSushiMixMix无Vae Checkpoint模型darkSushiMixMixVae模型kl-f8-anime2.ckpt Picture Two 正面tag:…

虹科案例|虹科Micronor光纤传感器,实现核磁共振新应用!

PART 1 背景介绍 光纤传感器已成为推动MRI最新功能套件升级和新MRI设备设计背后的关键技术。将患者的某些活动与MRI成像系统同步是越来越受重视的需求。磁场强度随着每一代的发展而增大,因此,组件的电磁透明度在每一代和新应用中变得更加重要。 光学传…

Oracle系列之九:Oracle常用函数

Oracle常用系统函数 1. 字符串函数2. 数学函数3. 日期函数4. 聚合函数5. 其他 Oracle是一种关系型数据库管理系统,它提供了许多内置函数,以便用户可以更轻松地处理数据。 1. 字符串函数 (1)lengthb/length 计算字符串长度 len…

C++ POCO库的基础介绍(Windwos和Linux)

简单介绍C POCO库能干什么,后续有时间的话将根据其每个点详细解析,关注我。本篇包含POCO库简单介绍、下载以及安装方式、简单代码示例。 目录 一、POCO简单介绍 1.1 POCO库的基本模块 1.2 POCO库的优点 二、POCO库安装方式 2.1下载源代码编译安装 …

Golang每日一练(leetDay0047)

目录 138. 复制带随机指针的链表 Copy List with Random-pointer 🌟🌟 139. 单词拆分 Word Break 🌟🌟 140. 单词拆分 II Word Break II 🌟🌟🌟 🌟 每日一练刷题专栏 &…

100种思维模型之指数对数思维模型-54

对数、指数,生活中的2种增长曲线;对数增长曲线,即在开始时增长很快,但随着时间的推移,收益会减少并变得更加困难;而指数增长曲线,即开始时增长缓慢,但随着时间的推移,收益…

《计算机网络——自顶向下方法》精炼——2.5-2.6.1

“Be the change you wish to see in the world.” - Mahatma Gandhi 文章目录 DNSDNS概述DNS的组成DNS的服务 DNS运行过程DNS的分布式数据库本地DNS服务器DNS的运行过程递归查询、迭代查询 DNS缓存DNS记录DNS报文首部区域问题区域回答区域权威区域附加区域 插入DNS记录 P2PP2P…

【Shell脚本】shell编程规范与变量

shell编程规范与变量 一、shell脚本概述1.1shell概念1.2Linux有哪些shell1.3shell脚本的作用 二、编写shell脚本的规范2.1编写shell脚本的规范2.2运行shell脚本的两种方法 三、重定向与管道操作3.1交互式与硬件设备3.2重定向操作3.3管道符号 “|” 四、shell变量的作用、类型4.…

WSL2和Windows之间通信实现【以Unity为例】

WSL2可以视为一个独立的虚拟机,具有自己独立的IP地址,通过虚拟路由器与Windows连接,因此WSL2不能直接访问到Windows的主机地址,需要动态获取。 (1)Windows启用防火墙的WSL2的访问 默认情况下Windows的防火…

陆奇-奇绩创坛-chatGPT新范式,新时代,新机会

奇绩创坛-新范式,新时代,新机会 01-新范式 新范式的新拐点 新范式的历史环境 新范式的社会影响 新范式的缔造者:Sam Altman和OpenAI 新范式的动力引擎 新范式的演化路径 02-新时代 新时代的宏观发展格局 新时代的中国机会 新时代的OpenAI生…

个人复盘和总结 2022——2023

个人心路历程: 从2022年开始接触编程到现在已经断断续续的有一年了。回顾这一年,感觉有进步也有做的不足的地方。好的是从一开始的什么都不会,到现在的至少对计算机有点了解,从C语言到c到Linux系统编程再到Linux网络编程&#xf…

圆桌对话|数字孪生圆桌会议精彩回顾:跨越挑战,迎接机遇

4月20日,以“数实融合,韧性生长”为主题的袋鼠云春季生长大会圆满落幕。本次大会开展了精彩的圆桌会议,在圆桌上,易知微邀请了中国特种设备检测研究院主任&正高级工程师邓贵德、北京中创碳投科技有限公司首席科技官唐进、浙江…