Raft 的 CommitIndex 和 AppliedIndex 差在哪?
查看完整题解
参考回答
直接回答
CommitIndex 表示协议认定已提交到的位置。AppliedIndex 表示本机状态机实际执行到的位置。后者追上前者之前,本机还没把所有已提交操作应用到本机能读取的 KV 状态。
讲清原理
日志先复制到其他成员,提交后再由每个成员执行。I/O、慢操作或队列都可能拉开差距。读取选择了某个安全位置之后,读所在节点需等条件满足再读。
例子与易错点
日志 120 已提交,本机只执行到 117。如果直接读本机状态,就有可能漏掉 118–120 的变化。
延伸阅读 etcd 默认读取为什么能线性一致? · etcd 怎么用 Raft 保证写入的强一致性? · ReadIndex 在 etcd 读请求里起什么作用?
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。