Raft 协议论文里面的commitIndex 和lastApplied 分别指啥

log 还分已应用的未应用的。log 对应的其实是一个状态机。log存储的是这个状态机的一系列操作。应用 log 导致状态机的状态发生变更。raft 假设log一定是连续应用的,即应用 i th log 需等待 0到i-1 log 都应用完毕。lastApplyIndex 就是指最后一个应用到状态机的 log 序号
■网友
可以把server和raft分层来对待。
打个比方,一个县有三个社区(server), 每个社区都有一个自己的居委会(raft), 负责商议各项提案(request)是否执行。现在这个县收到一个上级(client)的提案(request)。由master居委会(master raft)所在的社区接收这个提案,居委会将其记录在案(log),然后组织三个居委会开始讨论商议(appendentry),只要两个及以上的居委会表示赞成,那么这个县就决定执行这个提案,但是决议不代表这个事就完成了,还要发动社区的人去做事的(commit != execute)。 为了号召相应社区的群众去完成这个提案,必须在社区公告上对该提案进行公示通知(记录commitIndex),意思说群众们,咱们社区又有事要干了。但是完成事情是要时间的,社区(server)只能按照公告栏上提案被公示的时间顺序(commitIndex表示的是最后公示的提案)来一件一件完成相应的提案(lastApplied的表示这个社区刚做完的提案)。所以一个关系是,社区做完的事永远慢于社区需要做的事(lastApplied \u0026lt;= commitIndex)。只有等社区完成了(而不是仅仅通过了)这个提案,上级才能看的到。
【Raft 协议论文里面的commitIndex 和lastApplied 分别指啥】 如果题主在学MIT6.824分布式系统,欢迎交流。

■网友
commitindex指的是已经被大多数节点保存的日志的位置;lastapplyindex是这些被应用到状态机的日志的位置。只有日志被大多数节点commit之后,commitindex才会被更新,之后才可以被apply。
■网友
commit了不一定apply了。举个例子:commitIndex为10,lastAppliedIndex为10,这个时候新的commitIndex出来了,比如说15,这个时候你需要应用11~15的log到状态机中,应用完毕之后lastAppliedIndex就变为15。


    推荐阅读