Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对于服务器中的易失性状态,raft协议中的lastApplied和matchIndex是什么?_Algorithm_Distributed System_Consensus_Raft - Fatal编程技术网

Algorithm 对于服务器中的易失性状态,raft协议中的lastApplied和matchIndex是什么?

Algorithm 对于服务器中的易失性状态,raft协议中的lastApplied和matchIndex是什么?,algorithm,distributed-system,consensus,raft,Algorithm,Distributed System,Consensus,Raft,我使用以下内容作为参考 它说,lastapplicated是应用于状态机的最高日志条目,但是这与commitIndex有什么不同呢 另外,leader上的matchIndex是否只是followers上的commitIndex?如果没有,区别是什么 lastApplied是应用于状态机的最高日志条目,但这与commitIndex有什么不同 这些在实际系统中是不同的,因为在日志中提交数据的组件通常与将数据应用于复制状态机或数据库的组件分开。commitIndex通常比lastplicated更新的

我使用以下内容作为参考

它说,
lastapplicated
是应用于状态机的最高日志条目,但是这与
commitIndex
有什么不同呢

另外,leader上的
matchIndex
是否只是followers上的commitIndex?如果没有,区别是什么

lastApplied
是应用于状态机的最高日志条目,但这与
commitIndex
有什么不同

这些在实际系统中是不同的,因为在日志中提交数据的组件通常与将数据应用于复制状态机或数据库的组件分开。
commitIndex
通常比
lastplicated
更新的时间仅为纳秒或几毫秒

领导者上的
matchIndex
是否只是追随者上的
commitIndex
?如果没有,区别是什么

他们是不同的。有一段时间数据位于服务器上,但尚未提交,例如在复制过程中


领导者跟踪每个对等方上最新未提交的数据,只需向每个对等方而不是整个日志发送
log[matchIndex[peer],…]
。如果同伴明显落后于领导者,这尤其有用;因为领导者可以通过一系列小的
AppendEntries
调用来更新对等方,从而使对等方不断更新。

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

例如,当启动前导时,
matchIndex
启动到0,而
nextIndex
启动到最后一个日志索引+1

这里的差异是因为这两个字段用于不同的目的:
matchIndex
是一个精确的值,指示前导项和跟随项中的所有日志项所匹配的索引。但是,
nextIndex
只是一个乐观的“猜测”,表明领导者应该为下一个AppendEntries操作尝试哪个索引,它可能是一个好的猜测(即它等于
matchIndex+1
),在这种情况下AppendEntries操作将成功,但也可能是一个坏的猜测(例如,在先导刚刚启动的情况下)在这种情况下,AppendEntries将失败,因此先导将递减
nextIndex
,然后重试

至于
lastapplicated
,它只是另一个精确的值,指示跟随者中的所有日志项已应用到底层状态机的索引。这与
matchIndex
类似,因为它们都是精确的值,而不是启发式的“猜测”,但它们的含义不同,用途也不同

  • 提交并不意味着已经应用,它们之间存在时间差。但最终应用将赶上提交索引
  • 保存在leader中的matchIndex[i]等于follower_i的commitIndex,它们试图赶上nextIndex

  • 非常感谢您的回答,另一个快速问题是
    matchIndex
    中的信息已经在
    nextIndex
    中捕获?因为
    nextIndex-1
    应该是
    matchIndex