raft游戏下载 raft( 四 )


在展示?一致性算法之后,这?一章节会讨论可?用性的?一些问题和计时在系统的作?用 。状态:
状态 较?长时间不不变的
currentTerm
服务器器最后?一次知道的任期号(初始化为 0,持续递增)
votedFor 在当前获得选票的候选?人的 Id
log[]?日志条?目集;每?一个条?目包含?一个?用户状态机执?行行的指令,和收到时的任期号
状态 经常改变的
commitIndex 已知的最?大的已经被提交的?日志条?目的索引值
lastApplied
最后被应?用到状态机的?日志条?目索引值(初始化为 0,持续递增)
状态 在领导?人?里里经常改变的 (选举后重新初始化)
nextIndex[]
对于每?一个服务器器,需要发送给他的下?一个?日志条?目的索引值(初始化为领导?人最后索引值加?一)
附加?日志 RPC:由领导?人负责调?用来复制?日志指令;也会?用作heartbeat
接收者实现:1. 如果 term < currentTerm 就返回 false (5.1 节)2. 如果?日志在 prevLogIndex 位置处的?日志条?目的任期号和 prevLogTerm 不不匹配,则返回 false (5.3 节)
3. 如果已经存在的?日志条?目和新的产?生冲突(索引值相同但是任期号不不同),删除这?一条和之后所有的 (5.3 节)
4. 附加?日志中尚未存在的任何新条?目5. 如果 leaderCommit > commitIndex,令 commitIndex 等于
leaderCommit 和 新?日志条?目索引值中较?小的?一个
matchIndex[]
对于每?一个服务器器,已经复制给他的?日志的最?高索引值
参数 解释
term 领导?人的任期号
leaderId 领导?人的 Id,以便便于跟随者重定向请求
prevLogIndex 新的?日志条?目紧随之前的索引值
prevLogTerm prevLogIndex 条?目的任期号
entries[]准备存储的?日志条?目(表示?心跳时为空;?一次性发送多个是为了了提?高效率)
leaderCommit 领导?人已经提交的?日志的索引值
返回值 解释
term 当前的任期号,?用于领导?人去更更新?自?己
【raft游戏下载 raft】success
跟随者包含了了匹配上 prevLogIndex 和 prevLogTerm 的?日志时为真
请求投票 RPC:由候选?人负责调?用?用来征集选票(5.2 节)
接收者实现:1. 如果term < currentTerm返回 false (5.2 节)2. 如果 votedFor 为空或者为 candidateId,并且候选?人的?日志?至少和?自?己?一样新,那么就投票给他(5.2 节,5.4 节)
所有服务器器需遵守的规则:所有服务器器:
? 如果commitIndex > lastApplied,那么就 lastApplied 加?一,并把log[lastApplied]应?用到状态机中(5.3 节)
? 如果接收到的 RPC 请求或响应中,任期号T > currentTerm,那么就令 currentTerm 等于 T,并切换状态为跟随者(5.1 节)
跟随者(5.2 节):? 响应来?自候选?人和领导者的请求? 如果在超过选举超时时间的情况之前都没有收到领导?人的?心跳,或者是候选?人请求投票的,就?自?己变成候选?人
候选?人(5.2 节):? 在转变成候选?人后就?立即开始选举过程
? ?自增当前的任期号(currentTerm)? 给?自?己投票? 重置选举超时计时器器
参数 解释
term 候选?人的任期号
candidateId 请求选票的候选?人的 Id
lastLogIndex 候选?人的最后?日志条?目的索引值
lastLogTerm 候选?人最后?日志条?目的任期号
返回值 解释
term当前任期号,以便便于候选?人去更更新?自?己的任期号
voteGranted 候选?人赢得了了此张选票时为真
? 发送请求投票的 RPC 给其他所有服务器器? 如果接收到?大多数服务器器的选票,那么就变成领导?人? 如果接收到来?自新的领导?人的附加?日志 RPC,转变成跟随者? 如果选举过程超时,再次发起?一轮选举领导?人:


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。