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://xiahunao.cn/news/3018677.html

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

相关文章

集成逻辑分析器( ILA)IP核用法详解

集成逻辑分析器&#xff08;Integrated Logic Analyzer, ILA&#xff09;IP核是一个可定制的逻辑分析器&#xff0c;用于监测设计的内部信号。ILA核心包含了现代逻辑分析器的许多高级特性&#xff0c;比如布尔触发方程&#xff08;boolean trigger equations&#xff09;和边沿…

H5视频付费点播打赏影视系统程序全开源运营版

这是一款视频打赏源码&#xff0c;勿做非法用途&#xff0c;由用户亲测功能完善&#xff0c;源码仅用于学习使用&#xff0c;分享链接是用户云盘&#xff0c;具有时效性&#xff0c;感兴趣的可以去学习。 thinkphp开发&#xff0c;前后端分离设计&#xff0c;支持游客登陆、VIP…

了解集合与数据结构(java)

什么是数据结构? 数据结构就是 数据结构, 功能就是描述和组织数据 比如我有10万个QQ号, 我来组织, 有很多种组织方法, 比如链表, 树, 堆, 栈等等. 假如QQ号要查找数据, 有种数据结构查找数据速度很快, 我们就用它 加入QQ号要进行删除数据, 有种数据结构删除速度很快, 我们…

Python中设计注册登录代码

import hashlib import json import os import sys # user interface 用户是界面 UI """ 用户登录系统 1.注册 2.登陆 0.退出 """ # 读取users.bin def load(path): return json.load(open(path, "rt")) # 保存user.bin def save(dic…

Covalent引入五个新网络运营商,提升去中心化特性和数据安全性

为了进一步扩大运营商基础以并践行去中心化网络基础设施的宗旨&#xff0c;Covalent Network&#xff08;CQT&#xff09;在网络中引入了五个新的区块样本生产者&#xff08;BSPs&#xff09;角色。该举措不仅重申了 Covalent Network&#xff08;CQT&#xff09;对社区驱动协议…

如何保护数据安全?迅软DSE加密系统给信息撑把保护伞!

信息安全当然需要保护&#xff0c;不然企业的信息可以发给任何人&#xff0c;普通信息还好&#xff0c;如果是重要机密呢&#xff0c;企业重要信息被发出去后可能会造成一些麻烦&#xff0c;所以可以使用加密系统&#xff0c;对数据进行安全保护&#xff0c;防止泄密问题&#…

pandas 预处理

文章目录 第1关&#xff1a;数据读取与合并第2关&#xff1a;数据清洗第3关&#xff1a;数据转换 第1关&#xff1a;数据读取与合并 任务描述 本关任务&#xff1a;加载 csv 数据集&#xff0c;实现 DataFrame 合并。 知识讲解 Pandas 模块导入 import pandas as pd 读取 cs…

如何在没有备份的情况下恢复 Mac 上丢失的数据

如果您因意外删除、错误格式化硬盘或文件损坏而丢失了重要的、感伤的文件、照片或音乐&#xff0c;那么这可能会令人非常痛苦。幸运的是&#xff0c;您有几个选择。 您的 Mac 位于数字宇宙的中心。您可能会在上面留下照片和视频形式的记忆&#xff0c;以及来自您不再见面的朋友…

[嵌入式系统-69]:RT-Thread-组件:网络组件“组”,RT-Thread系统通向外部网络世界的入口

目录 RT-Thread 提供的网络世界入口 - 网络组件 1. 总概 2. AT 3. Lwip&#xff1a; 轻量级IP协议栈 4. W5500 5. Netdev 6. RT-Thread SAL&#xff08;Socket Abstraction Layer&#xff09;套接字和BSD套接字区别 RT-Thread SAL 套接字接口示例 BSD 套接字接口示例 …

css: hover 划过显示/隐藏 div 样式

1. 图例: 划过用display: block;和 display: none; 显示div和隐藏div div: <div class="sectorBox"> <div v-for="(item, index) in sectorList" :key="index" class="sill"> <div class="si…

大数据Scala教程从入门到精通第五篇:Scala环境搭建

一&#xff1a;安装步骤 1&#xff1a;scala安装 1&#xff1a;首先确保 JDK1.8 安装成功: 2&#xff1a;下载对应的 Scala 安装文件 scala-2.12.11.zip 3&#xff1a;解压 scala-2.12.11.zip 4&#xff1a;配置 Scala 的环境变量 在Windows上安装Scala_windows安装scala…

通过红黑树封装 map 和 set 容器(1):红黑树的迭代器

一、红黑树的迭代器 红黑树的遍历默认为中序遍历 —— key 从小到大&#xff0c;因此 begin() 应该获取到红黑树的最左节点 —— 最小&#xff0c;end() 获取到红黑树最右节点的下一个位置&#xff0c; operator() 也应保证红黑树的遍历为中序的状态。 首先对红黑树节点进行改造…

FMEA助力智能电网升级:构建安全、高效、可靠的电力网络

随着科技的不断进步&#xff0c;智能电网已成为现代电力行业的重要发展方向。而在这个过程中&#xff0c;FMEA&#xff08;失效模式和影响分析&#xff09;作为一种重要的质量管理工具&#xff0c;正日益发挥着其在智能电网建设中的赋能作用。本文将从FMEA的基本概念出发&#…

Springboot 集成 Consul 实现服务注册中心-05

因为后续很多模块都要用到注册中心&#xff0c;所以此处先实现此模块。 Consul简介 Consul是一个开源的服务发现和配置管理工具&#xff0c;具有跨平台、运行高效等特点。它由HashiCorp公司开发&#xff0c;并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康…

python中一些莫名其妙的异常

目录 一、字符串中空格\xa0二、文件写入为空问题三、Counter对NAN空值的统计问题 一、字符串中空格\xa0 对于文本中的一些空格&#xff0c;原始状态时显示为普通“空格”&#xff08;其实是latin1编码字符&#xff09;&#xff0c;但是经过split()操作后&#xff0c;这些latin…

MOSFET场效应管栅极驱动电流的计算

MOSFET驱动 MOSFET场效应管是电压驱动器件&#xff0c;输入有电容&#xff0c;因此为可靠驱动MOSFET&#xff0c;栅极需要施加较大的驱动电流。 功率MOSFET开关模型 该模型显示了影响开关性能的最重要的寄生器件。 图1 MOSFET开通过程 MOSFET场效应管的开通动作可分为如下…

《起风了》观后感

我想宫崎骏的电影是很多人心目中美好的回忆&#xff0c;每当听到有他的新电影要上映&#xff0c;总是迫不及待想去捧场&#xff0c;一刷二刷三刷却还是依然看得津津有味&#xff0c;这就是宫崎骏电影独特的魅力。《起风了》跟他的其他电影有很明显的不同&#xff0c;他的大部分…

I forgot my Plex Account PIN; how can I reset it? How can I change my PIN?

If you’ve set a PIN on your Plex account, it’s possible to reset or remove that PIN. Related Page: Plex Home Regular Plex Account If you know the current PIN If the current PIN is known, then simply edit the current PIN on the Settings > Users &…

ESP8266固件烧写

概述 因为手上有块闲置的ESP8266开发板&#xff0c;想着拿来倒腾一下WIFI探针&#xff0c;倒腾了一阵测试成功&#xff0c;博文记录用以备忘 硬件 ESP8266 NodeMCU 环境 Windows 11 步骤 1.下载esp32_win32_msys2_environment_and_toolchain-20181001.zip 2.下载xtensa…

【禅道客户案例】北大软件携手禅道,开启产品化之路新征程

在项目制项目模式下&#xff0c;软件公司根据客户的需求进行短期项目开发&#xff0c;具有灵活、高效、受众面广的优点&#xff0c;在业界得到了广泛的应用。但这种模式也面临诸多挑战&#xff0c;软件公司需要不断地开发新项目来维持业务增长&#xff0c;由于没有自己的产品也…