algorithm - Raft 如何保证日志的一致性?
问题描述
我在学习Raft,已经知道了Raft的基本机制。
当一个Leader被选举出来时,它负责将Followers的日志更新为Leader的日志。在更新 Follower 时,它会找到第一个<entry, term>
向后匹配的,并使用以下日志更新 Follower。
Raft如何保证Leader和Follower在匹配前的日志<entry, term>
一致?这种情况会不会发生:
|
Leader v
Entry : 1 2 3 4 5 6 7 8 9 10
Term : 1 1 1 2 2 3 3 3 3 3
Follower
Entry : 1 2 3 4 5 6 7
Term : 1 1 1 1 2 3 3
解决方案
Raft 算法的这个属性称为对数匹配。
如果两个日志包含具有相同索引和术语的条目,则日志在通过给定索引的所有条目中都是相同的
这是因为:
发送 AppendEntries RPC 时,领导者在其日志中包含新条目之前的条目的索引和期限。如果跟随者在其日志中没有找到具有相同索引和术语的条目,则它拒绝新条目。一致性检查作为一个归纳步骤:日志的初始空状态满足日志匹配属性,并且一致性检查在日志扩展时保留日志匹配属性。因此,每当 AppendEntries 成功返回时,领导者通过新条目知道跟随者的日志与自己的日志相同。
推荐阅读
- android - 如何实现搜索视图模型并将其显示在 kotlin 的 recyclerview 中
- reactjs - 再次反应钩子道具未定义
- javascript - bpmn io vue 3 集成问题
- mysql - 参考外部查询 MySQL
- javascript - 如何在月份格式为字符串的“日期范围选择器”中翻译日期?
- c++ - 将继承的模板类转换为父类
- java - 使用设置文本功能后,数组适配器不显示项目
- azure-storage - 写入单独容器时节流与完全单独的 ADLS Gen2 存储
- react-i18next - react-i18next 输出中的 HTML 注释
- css - 如何在 tsx css styled-components 中声明变量?