下面是有关Raft协议中不同术语和概念的翻译及解释:
AppendEntries
消息,并将自己的任期号放在XTerm中。如果在对应位置没有日志,则XTerm为-1。持久化数据:需要在服务器重启后依然保持的数据,包括:
非持久化数据(适用于所有服务器):
非持久化数据(仅适用于领导者)(选举后重新初始化):
All Servers:所有服务器的共通行为规则。
commitIndex > lastApplied
:lastApplied
自增,应用 log[lastApplied]
到状态机(§5.3)T
大于 currentTerm
:设置 currentTerm = T
,转变为追随者(§5.1)Followers:追随者的特定行为规则。
Candidates:候选人的特定行为规则。
currentTerm
Leaders:领导者的特定行为规则。
目的:由领导者调用以复制日志条目,同时也作为心跳信号,以维持权威并防止超时。
prevLogIndex
对应的日志条目的任期。commitIndex
。prevLogIndex
和 prevLogTerm
匹配的条目,则为真。term < currentTerm
,回复假(§5.1)prevLogIndex
位置且任期与 prevLogTerm
匹配的条目,回复假(§5.3)leaderCommit > commitIndex
,将 commitIndex
设置为 leaderCommit
与最后一个新条目的索引中的较小者目的:由候选者调用,用于在选举中收集选票。
term < currentTerm
,回复假(§5.1)votedFor
为空或等于 candidateId
,并且候选者的日志至少与接收者的日志一样新,授予选票(§5.2, §5.4)AppendEntries
从当前领导者处获得 RPC(即,如果参数中的术语AppendEntries
已过时,则不应重置计时器);AppendEntries
RPC,其 prevLogIndex
指向日志末尾之外,您应该像确实有该条目但术语不匹配一样处理它(即回复 false)。AppendEntries
应该执行 RPC 处理程序的检查 2 。min
最后一步(#5)中的是AppendEntries
必要的,并且需要使用最后一个新条目的索引来计算。仅仅拥有应用日志中的内容并在到达日志末尾时停止的函数是不够的。这是因为在领导者发送给您的条目(全部与您的日志中的条目匹配)之后,您的日志中可能有与领导者日志不同的条目。因为#3 规定只有在存在冲突条目时才截断日志,这些条目不会被删除,并且如果 超出领导发送给您的条目,您可能会应用不正确的条目。lastApplied``commitIndex``leaderCommit