algorithm - 服务器中 volatile 状态的 raft 协议(protocol)中的 lastApplied 和 matchIndex 是什么?

标签 algorithm distributed-system consensus raft

我正在使用以下 pdf作为引用。 enter image description here

它说 lastApplied 是应用于状态机的最高日志条目,但这与 commitIndex 有何不同?

领导者的 matchIndex 只是追随者的 commitIndex 吗?如果不是,有什么区别?

最佳答案

您的观察是合理的:大多数时候,nextIndex 等于 matchIndex + 1,但并非总是如此。

比如leader发起时,matchIndex发起到0,而nextIndex发起到最后一条日志索引+1。

这里的区别是因为这两个字段用于不同的目的:matchIndex 是一个准确的值,指示 leader 和 follower 中的所有日志条目匹配到的索引。然而,nextIndex 只是一个乐观的“猜测”,指示领导者应该为下一个 AppendEntries 操作尝试哪个索引,它可以是一个很好的猜测(即它等于 matchIndex + 1 ) 在这种情况下 AppendEntries 操作会成功,但它也可能是一个错误的猜测(例如,在领导者刚刚启动的情况下)在这种情况下 AppendEntries 将失败,因此领导者将递减 nextIndex 并重试。

至于lastApplied,它只是另一个准确的值,表示跟随者中的所有日志条目已应用到底层状态机的索引。它与 matchIndex 相似,因为它们都是准确的值而不是启发式“猜测”,但它们实际上意味着不同的东西并用于不同的目的。

关于algorithm - 服务器中 volatile 状态的 raft 协议(protocol)中的 lastApplied 和 matchIndex 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46376293/

相关文章:

algorithm - 用给定的总和计算最小子集

python - 如何输入一个数字并使该数字显示一个符号那么多次?

events - 如何处理去中心化事件源数据库中的共识?

database - 数据库中重新连接的节点如何与多数集群同步?

distributed - Raft 是如何线性化的?

在树中查找最大独立集的算法

java - QuickSort 实现中的 ArrayIndexOutofBoundsException

database - 严格的可序列化和外部一致性之间的区别

algorithm - Paxos phase 2a 消息丢失

distributed-computing - 在 2PC 中如果提交失败会发生什么?