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
类似,因为它们都是精确的值,而不是启发式的“猜测”,但它们的含义不同,用途也不同
非常感谢您的回答,另一个快速问题是
matchIndex
中的信息已经在nextIndex
中捕获?因为nextIndex-1
应该是matchIndex