raft游戏下载 raft( 八 )


图 7:当?一个领导?人成功当选时,跟随者可能是任何情况(a-f) 。每?一个盒?子表示是?一个?日志条?目;?里里?面的数字表示任期号 。跟随者可能会缺少?一些?日志条?目(a-b),可能会有?一些未被提交的?日志条?目(c-d),或者两种情况都存在(e-f) 。例例如,场景 f 可能会这样发?生,某服务器器在任期 2 的时候是领导?人,已附加了了?一些?日志条?目到?自?己的?日志中,但在提交之前就崩溃了了;很快这个机器器就被重启了了,在任期 3 重新被选为领导?人,并且?又增加了了?一些?日志条?目到?自?己的?日志中;在任期 2 和任期 3 的?日志被提交之前,这个服务器器?又宕机了了,并且在接下来的?几个任期?里里?一直处于宕机状态 。在 Raft 算法中,领导?人处理理不不?一致是通过强制跟随者直接复制?自?己的?日志来解决了了 。这意味着在跟随者中的冲突的?日志条?目会被领导?人的?日志覆盖 。5.4 节会阐述如何通过增加?一些限制来使得这样的操作是安全的 。要使得跟随者的?日志进?入和?自?己?一致的状态,领导?人必须找到最后两者达成?一致的地?方,然后删除从那个点之后的所有?日志条?目,发送?自?己的?日志给跟随者 。所有的这些操作都在进?行行附加?日志 RPCs 的?一致性检查时完成 。领导?人针对每?一个跟随者维护了了?一个 nextIndex,这表示下?一个需要发送给跟随者的?日志条?目的索引地址 。当?一个领导?人刚获得权?力力的时候,他初始化所有的 nextIndex 值为?自?己的最后?一条?日志的index加1(图 7 中的 11) 。如果?一个跟随者的?日志和领导?人不不?一致,那么在下?一次的附加?日志 RPC 时的?一致性检查就会失败 。在被跟随者拒绝之后,领导?人就会减?小 nextIndex 值并进?行行重试 。
最终 nextIndex 会在某个位置使得领导?人和跟随者的?日志达成?一致 。当这种情况发?生,附加?日志 RPC 就会成功,这时就会把跟随者冲突的?日志条?目全部删除并且加上领导?人的?日志 。?一旦附加?日志 RPC 成功,那么跟随者的?日志就会和领导?人保持?一致,并且在接下来的任期?里里?一直继续保持 。如果需要的话,算法可以通过减少被拒绝的附加?日志 RPCs 的次数来优化 。例例如,当附加?日志 RPC 的请求被拒绝的时候,跟随者可以包含冲突的条?目的任期号和?自?己存储的那个任期的最早的索引地址 。借助这些信息,领导?人可以减?小 nextIndex 越过所有那个任期冲突的所有?日志条?目;这样就变成每个任期需要?一次附加条?目 RPC ?而不不是每个条?目?一次 。在实践中,我们?十分怀疑这种优化是否是必要的,因为失败是很少发?生的并且也不不?大可能会有这么多不不?一致的?日志 。通过这种机制,领导?人在获得权?力力的时候就不不需要任何特殊的操作来恢复?一致性 。他只需要进?行行正常的操作,然后?日志就能?自动的在回复附加?日志 RPC 的?一致性检查失败的时候?自动趋于?一致 。领导?人从来不不会覆盖或者删除?自?己的?日志(图 3 的领导?人只附加特性) 。?日志复制机制展示出了了第 2 节中形容的?一致性特性:Raft 能够接受,复制并应?用新的?日志条?目只要?大部分的机器器是?工作的;在通常的情况下,新的?日志条?目可以在?一次 RPC 中被复制给集群中的?大多数机器器;并且单个的缓慢的跟随者不不会影响整体的性能 。
5.4 安全性前?面的章节?里里描述了了 Raft 算法是如何选举和复制?日志的 。然?而,到?目前为?止描述的机制并不不能充分的保证每?一个状态机会按照相同的顺序执?行行相同的指令 。例例如,?一个跟随者可能会进?入不不可?用状态同时领导?人已经提交了了若?干的?日志条?目,然后这个跟随者可能会被选举为领导?人并且覆盖这些?日志条?目;因此,不不同的状态机可能会执?行行不不同的指令序列列 。这?一节通过在领导选举的时候增加?一些限制来完善 Raft 算法 。这?一限制保证了了任何的领导?人对于给定的任期号,都拥有了了之前任期的所有被提交的?日志条?目(图 3 中的领导?人完整特性) 。增加这?一选举时的限制,我们对于提交时的规则也更更加清晰 。最终,我们将展示对于领导?人完整特性的简要证明,并且说明领导?人是如何领导复制状态机的做出正确?行行为的 。


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