Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释:

术语和概念:

  • 任期号(term number):用来区分不同的leader。
  • 前一个日志槽位的信息(prelogIndex):这是前一个日志条目的索引(第几个)。
  • 前一个槽位的任期号(prelogTerm):这是前一个日志条目的任期号。
  • 下一个槽位的索引(nextIndex{follow}):应当给特定追随者(follow)发送的下一个日志条目的索引。
  • 快速恢复:特定机制用于解决日志不一致问题。
    • XTerm:在日志不一致时,追随者中与领导者冲突的日志条目对应的任期号。如果追随者在对应位置的任期号不匹配,它会拒绝领导者的AppendEntries消息,并将自己的任期号放在XTerm中。如果在对应位置没有日志,则XTerm为-1。
    • XIndex:在追随者中,对应任期号为XTerm的第一条日志条目的索引。
    • XLen:如果追随者在对应位置没有日志,那么XTerm返回-1,XLen表示空白的日志槽位数。

在这里插入图片描述

State:

  • 持久化数据:需要在服务器重启后依然保持的数据,包括:

    • 当某个服务器刚刚重启,在它加入到Raft集群之前,它必须要检查并确保这些数据有效的存储在它的磁盘上。服务器必须要有某种方式来发现,自己的
      确有一些持久化存储的状态,而不是一些无意义的数据。
    • Log:所有的日志条目。
    • currentTerm:当前任期号。
    • votedFor:当前任期内投票给的候选人。
  • 非持久化数据(适用于所有服务器):

    • commitIndex:已知已提交的最高日志条目的索引(初始化为0,单调增加)。
    • lastApplied:应用于状态机的最高日志条目的索引(初始化为0,单调增加)。
  • 非持久化数据(仅适用于领导者)(选举后重新初始化):

    • nextIndex[]:对于每个服务器,下一个需要发送的日志条目的索引(初始化为领导者的最后一个日志条目索引+1)。
    • matchIndex[]:对于每个服务器,已知在该服务器上复制的最高日志条目的索引(初始化为0,单调增加)。
      在这里插入图片描述

Rules for Servers:

  • All Servers:所有服务器的共通行为规则。

    • 如果 commitIndex > lastAppliedlastApplied 自增,应用 log[lastApplied] 到状态机(§5.3)
    • 如果 RPC 请求或响应包含任期 T 大于 currentTerm:设置 currentTerm = T,转变为追随者(§5.1)
  • Followers:追随者的特定行为规则。

    • 对来自候选人和领导者的 RPC 做出响应
    • 如果在没有收到当前领导者的 AppendEntries RPC 或未向候选人授予投票的情况下,选举超时过期:转变为候选人
  • Candidates:候选人的特定行为规则。

    • 转变为候选人时,开始选举:
      • 增加 currentTerm
      • 为自己投票
      • 重置选举计时器
      • 向所有其他服务器发送 RequestVote RPC
      • 如果从大多数服务器收到投票:成为领导者
      • 如果收到新领导者的 AppendEntries RPC:转变为追随者
      • 如果选举超时过期:开始新的选举
  • Leaders:领导者的特定行为规则。

    • 选举成功后:向每个服务器发送初始的空 AppendEntries RPC(心跳),在空闲期间重复以防止选举超时(§5.2)
    • 如果从客户端收到命令:将条目追加到本地日志,条目应用到状态机后回应(§5.3)
    • 如果最后的日志索引 ≥ 追随者的 nextIndex:从 nextIndex 开始发送 AppendEntries RPC
    • 如果成功:更新追随者的 nextIndex 和 matchIndex(§5.3)
    • 如果因日志不一致导致 AppendEntries 失败:减少 nextIndex 并重试(§5.3)
    • 如果存在一个 N,使得 N > commitIndex,大多数 matchIndex[i] ≥ N,且 log[N].term == currentTerm:设置 commitIndex = N(§5.3, §5.4)。

在这里插入图片描述

AppendEntries RPC

目的:由领导者调用以复制日志条目,同时也作为心跳信号,以维持权威并防止超时。

参数:
  • term(任期号):领导者的当前任期。
  • leaderId(领导者ID):领导者的标识符,使得追随者可以在必要时重定向客户端。
  • prevLogIndex(前一个日志索引):紧接在新条目之前的日志条目的索引。
  • prevLogTerm(前一个日志条目的任期):与 prevLogIndex 对应的日志条目的任期。
  • entries[](日志条目数组):要存储的日志条目(心跳时为空;为了效率可能发送多个)。
  • leaderCommit(领导者的提交索引):领导者的 commitIndex
结果:
  • term(当前任期):用于领导者更新自己的任期。
  • success(成功标志):如果追随者包含与 prevLogIndexprevLogTerm 匹配的条目,则为真。
接收者实现:
  1. 如果 term < currentTerm,回复假(§5.1)
  2. 如果日志中不存在在 prevLogIndex 位置且任期与 prevLogTerm 匹配的条目,回复假(§5.3)
  3. 如果现有条目与新条目发生冲突(索引相同但任期不同),删除现有条目及其后所有条目(§5.3)
  4. 将任何未在日志中的新条目追加到日志中
  5. 如果 leaderCommit > commitIndex,将 commitIndex 设置为 leaderCommit 与最后一个新条目的索引中的较小者
    在这里插入图片描述

RequestVote RPC

目的:由候选者调用,用于在选举中收集选票。

参数:
  • term(任期号):候选者的当前任期。
  • candidateId(候选者ID):请求投票的候选者的标识符。
  • lastLogIndex(最后日志条目的索引):候选者最后一个日志条目的索引(§5.4)。
  • lastLogTerm(最后日志条目的任期):候选者最后一个日志条目的任期(§5.4)。
结果:
  • term(当前任期):用于候选者更新自己的任期。
  • voteGranted(授予选票):如果候选者收到了选票,则为真。
接收者实现:
  1. 如果 term < currentTerm,回复假(§5.1)
  2. 如果 votedFor 为空或等于 candidateId,并且候选者的日志至少与接收者的日志一样新,授予选票(§5.2, §5.4)
要求:
  • 具体来说,您应该仅在以下情况下重新启动选举计时器:
    • a) 您AppendEntries当前领导者处获得 RPC(即,如果参数中的术语AppendEntries已过时,则不应重置计时器);
    • b) 您正在开始选举;
    • c) 您向另一个同行授予投票权。
  • 请按照图 2 的指示了解何时开始选举。特别要注意的是,如果您是候选人(即您当前正在进行选举),但选举计时器触发,您应该开始另一次选举。这对于避免由于 RPC 延迟或丢失而导致系统停顿非常重要。
  • 以下是我们一遍又一遍地看到的一些内容,您应该在实施中留意:
    • 如果某个步骤显示“回复错误”,则意味着您应该立即回复,而不是执行任何后续步骤。
    • 如果您收到一个AppendEntriesRPC,其 prevLogIndex指向日志末尾之外,您应该像确实有该条目但术语不匹配一样处理它(即回复 false)。
    • 即使领导者没有发送任何条目,也AppendEntries应该执行 RPC 处理程序的检查 2 。
    • min最后一步(#5)中的是AppendEntries必要,并且需要使用最后一个条目的索引来计算。仅仅拥有应用日志中的内容并在到达日志末尾时停止的函数是不够的。这是因为在领导者发送给您的条目(全部与您的日志中的条目匹配)之后,您的日志中可能有与领导者日志不同的条目。因为#3 规定只有在存在冲突条目时才截断日志,这些条目不会被删除,并且如果 超出领导发送给您的条目,您可能会应用不正确的条目。lastApplied``commitIndex``leaderCommit
    • 严格按照第 5.4 节中的描述实施“最新日志”检查非常重要。没有作弊,只是检查长度!

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

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

相关文章

5000亿参数来了:微软将推出 MAI-1 模型硬刚谷歌和OpenAI|TodayAI

美国的科技巨头微软公司&#xff0c;正在积极扩展其人工智能&#xff08;AI&#xff09;技术的领域。最新消息显示&#xff0c;微软将推出一款名为MAI-1的全新AI模型&#xff0c;其规模巨大&#xff0c;预计将拥有5000亿个可调参数。这一开发工作由Inflection AI的CEO穆斯塔法苏…

深度剖析Comate智能产品:科技巧思,实用至上

文章目录 Comate智能编码助手介绍Comate应用场景Comate语言与IDE支持 Comate安装步骤Comate智能编码使用体验代码推荐智能推荐生成单测注释解释注释生成智能问答 Comate实战演练总结 Comate智能编码助手介绍 市面上现在有很多智能代码助手&#xff0c;当时互联网头部大厂百度也…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数&#xff08;loss function&#xf…

文件夹重命名技巧:克服文件夹名混乱不规律的难题,实现高效管理

在数字时代&#xff0c;我们每天都在与无数的文件夹打交道。这些文件夹中可能存储着文档、图片、视频等各种类型的文件。然而&#xff0c;随着文件夹数量的增加&#xff0c;如何有效地管理和命名这些文件夹成为了一个挑战。混乱和不规律的文件夹名不仅降低了工作效率&#xff0…

安卓view坐标系

目录 一、getX、 getRawX、 getTranslationX 等的图形表示二、 getX、 getRawX、 getTranslationX 意义的文字描述 一、getX、 getRawX、 getTranslationX 等的图形表示 坐标系&#xff1a; 视图坐标系&#xff1a; 二、 getX、 getRawX、 getTranslationX 意义的文字描述 …

TCP UDP

传输层 端口号 tcp udp 网络层 IP地址 IP TCP&#xff0c;UDP 1&#xff0c;TCP是面向链接的协议&#xff0c;而UDP是无连接的协议; 2&#xff0c;TCP协议的传输是可靠的&#xff0c;而UDP协议的传输“尽力而为” 3&#xff0c;TCP可以实现流控&#xff0c;但UDP不行;…

vue打包报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

前言&#xff1a; vue项目&#xff0c;打包报错&#xff1a;CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 报错现象&#xff1a; 报错原因&#xff1a; 这个错误是由Node.js在尝试分配内存时因为系统的可用内存不足而发生的。"JavaScript heap…

Discourse 清理存储空间的方法

Discourse 使用一段时间以后会发现硬盘空间占用非常多。 主要是因为 Docker Image 的问题&#xff0c;如果升级次数越多&#xff0c;空间占用越多。 运行下面的命令&#xff1a; ./launcher cleanup 能够帮助你清理 Discourse 占用的空间。 如下面代码所示&#xff1a; […

微信/支付宝支付服务搭建,一次性搞定!

微信支付 付款码支付 付款码支付是指用户展示微信钱包内的“付款码”给商户系统扫描后直接完成支付&#xff0c;适用于线下场所面对面收银的场景&#xff0c;例如商超、便利店、餐饮、医院、学校、电影院和旅游景区等具有明确经营地址的实体场所JSAPI支付 JSAPI支付是指商户通过…

2024年第七届可再生能源与环境工程国际会议(REEE 2024)即将召开!

2024年第七届可再生能源与环境工程国际会议&#xff08;REEE 2024&#xff09;将于2024 年8月28-30日在法国南特举行。共绘绿色未来&#xff0c;全球同频共振&#xff01;REEE 2024将汇聚全球可再生能源与环境工程领域的专家学者和业界精英&#xff0c;共同探讨行业发展的前沿技…

华南理工大胆突破,全国首个软物质科学与工程本科专业诞生!

不久前&#xff0c;教育部公布了2023年普通高等学校本科专业备案和审批结果&#xff0c;一个新名词吸引了我——软物质科学与工程。这是今年新增的24种新专业之一&#xff0c;而华南理工大学成为国内首个申请设置该专业的高校。这让我产生了强烈的好奇心&#xff1a;软物质是什…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署 YOLO-World 模型实现实时开放词汇对象检测

YOLO-World是一个融合了实时目标检测与增强现实&#xff08;AR&#xff09;技术的创新平台&#xff0c;旨在将现实世界与数字世界无缝对接。该平台以YOLO&#xff08;You Only Look Once&#xff09;算法为核心&#xff0c;实现了对视频中物体的快速准确识别&#xff0c;并通过…

助贷客户管理系统:助力助贷公司轻松实现30%增长目标!

为了解决传统助贷公司在业务过程中遇到的痛点&#xff0c;盛鑫优创科技特别设计了一款定制化的解决方案——"鑫鹿助贷客户管理系统"&#xff0c;以满足助贷行业的独特需求&#xff1a; 传统助贷公司的老板们在做业务的的过程中都有这些痛点&#xff1a; 1、没有一个…

探索5个独特AI工具:它们是否值得独立存在?

在这个“地下AI”系列的最新一集中&#xff0c;我们深入挖掘了一些鲜为人知的AI工具。这些工具并非出自OpenAI、微软或谷歌等科技巨头之手&#xff0c;而是独立创造者和小型团队的智慧结晶。我们的目标是发现利用最新AI技术的独特工具。但这次有个新玩法&#xff1a;我们玩一个…

ABAP 数据写入Excel 并保存 千分位

参考老白 https://www.cnblogs.com/liaojunbo/archive/2011/09/06/2168552.html 但是缺zcl_excel 。需要从 dotabap要引入abap2xlsx 英文版进入后 尝试了一下 1&#xff09;列的宽度自适应么有找到在哪里&#xff1f; 列宽设置 lo_worksheet->set_column_width( ip_co…

生信技能45 - 基于docker容器运行生信软件

1. 获取docker镜像 以运行xhmm CNV分析软件为例。 # 搜索仓库镜像 sudo docker search xhmm# 拉取镜像 sudo docker pull ksarathbabu/xhmm_v1.0# 启动镜像,非后台 sudo docker run -it ksarathbabu/xhmm_v1.0 /bin/bash # -i: 交互式操作。 # -t: 终端。 # ksarathbabu/xhmm…

软件测试经理工作日常随记【2】-接口自动化

软件测试主管工作日常随记【2】-接口自动化 1.接口自动化 jmeter-反电诈项目 这个我做过的一个非常有意义的项目&#xff0c;和腾讯合作的&#xff0c;主要为用户拦截并提示所有可能涉及到的诈骗类型&#xff0c;并以裂变的形式扩展用户&#xff0c;这个项目前期后端先完成&…

VMware虚拟网卡网络适配器出现黄色感叹号

问题发生&#xff1a;VMware在使用Ubuntu的过程中突然卡死&#xff0c;强制关闭开启后就发生了网络无法连接 找到电脑的设备管理发现VMware的适配器出现黄色感叹号 解决方法&#xff1a; 下载软件ccleaner 扫描问题&#xff0c;懒得去找就修复了所有的问题 最后发现适配器…

连锁收银系统批量调整商品价格教程

1、进入系统后台&#xff0c;系统后台登录网址&#xff1a; 2、点击商品>商品调价 3、将按模板整理好的商品价格数据导入即可。 Tips&#xff1a;每次导入的商品数量不要超过6000 条。

python 12实验

1.导入数据。 2.清洗数据&#xff0c;将缺失值或“NAN”替换为“无”&#xff0c;并将文本数据转换为数值型数据。 3.使用聚类算法&#xff08;如KMeans&#xff09;对数据进行聚类&#xff0c;并计算样本到簇中心的平均距离以确定最佳的簇数量。 4.对数据进行PCA降维&#xff…