raft游戏下载 raft( 七 )


5.3 ?日志复制?一旦?一个领导?人被选举出来,他就开始为客户端提供服务 。客户端的每?一个请求都包含?一条被复制状态机执?行行的指令 。领导?人把这条指令作为?一条新的?日志条?目附加到?日志中去,然后并?行行的发起附加条?目 RPCs 给其他的服务器器,让他们复制这条?日志条?目 。当这条?日志条?目被安全的复制(下?面会介绍),领导?人会应?用这条?日志条?目到它的状态机中然后把执?行行的结果返回给客户端 。如果跟随者崩溃或者运?行行缓慢,再或者?网络丢包,领导?人会不不断的重复尝试附加?日志条?目 RPCs (尽管已经回复了了客户端)直到所有的跟随者都最终存储了了所有的?日志条?目 。
图 6:?日志由有序序号标记的条?目组成 。每个条?目都包含创建时的任期号(图中框中的数字),和?一个状态机需要执?行行的指令 。?一个条?目当可以安全的被应?用到状态机中去的时候,就认为是可以提交了了 。?日志以图 6 展示的?方式组织 。每?一个?日志条?目包括:1.状态机指令2.从领导?人收到这条指令时的任期号?日志中的任期号?用来检查是否出现不不?一致的情况,同时也?用来保证图 3 中的某些性质 。每?一条?日志条?目同时也都有?一个整数索引值来表明它在?日志中的位置 。领导?人来决定什什么时候把?日志条?目应?用到状态机中是安全的;这种?日志条?目被称为已提交 。Raft 算法保证所有已提交的?日志条?目都是持久化的并且最终会被所有可?用的状态机执?行行 。在领导?人将创建的?日志条?目复制到?大多数的服务器器上的时候,?日志条?目就会被提交(例例如在图 6 中的条?目 7) 。同时,领导?人的?日志中之前的所有?日志条?目也都会被提交,包括由其他领导?人创建的条?目 。5.4 节会讨论某些当在领导?人改变之后应?用这条规则的隐晦内容,同时他也展示了了这种提交的定义是安全的 。领导?人跟踪了了最?大的将会被提交的?日志项的索引,并且索引值会被包含在未来的所有附加?日志 RPCs (包括?心跳包),这样其他的服务器器才能最终知道领导?人的提交位置 。?一旦跟随者知道?一条?日志条?目已经
被提交,那么他也会将这个?日志条?目应?用到本地的状态机中(按照?日志的顺序) 。我们设计了了 Raft 的?日志机制来维护?一个不不同服务器器的?日志之间的?高层次的?一致性 。这么做不不仅简化了了系统的?行行为也使得更更加可预计,同时他也是安全性保证的?一个重要组件 。Raft 维护着以下的特性,这些同时也组成了了图 3 中的?日志匹配特性:
? 如果在不不同的?日志中的两个条?目拥有相同的索引和任期号,那么他们存储了了相同的指令 。
? 如果在不不同的?日志中的两个条?目拥有相同的索引和任期号,那么他们之前的所有?日志条?目也全部相同 。
第?一个特性来?自这样的?一个事实,领导?人最多在?一个任期?里里在指定的?一个?日志索引位置创建?一条?日志条?目,同时?日志条?目在?日志中的位置也从来不不会改变 。第?二个特性由附加?日志 RPC 的?一个简单的?一致性检查所保证 。在发送附加?日志 RPC 的时候,领导?人会把新的?日志条?目紧接着之前的条?目的索引位置和任期号包含在?里里?面 。如果跟随者在它的?日志中找不不到包含相同索引位置和任期号的条?目,那么他就会拒绝接收新的?日志条?目 。?一致性检查就像?一个归纳步骤:?一开始空的?日志状态肯定是满?足?日志匹配特性的,然后?一致性检查保护了了?日志匹配特性当?日志扩展的时候 。因此,每当附加?日志 RPC 返回成功时,领导?人就知道跟随者的?日志?一定是和?自?己相同的了了 。在正常的操作中,领导?人和跟随者的?日志保持?一致性,所以附加?日志 RPC 的?一致性检查从来不不会失败 。然?而,领导?人崩溃的情况会使得?日志处于不不?一致的状态(?老老的领导?人可能还没有完全复制所有的?日志条?目) 。这种不不?一致问题会在领导?人和跟随者的?一系列列崩溃下加剧 。图 7 展示了了跟随者的?日志可能和新的领导?人不不同的?方式 。跟随者可能会丢失?一些在新的领导?人中有的?日志条?目,他也可能拥有?一些领导?人没有的?日志条?目,或者两者都发?生 。丢失或者多出?日志条?目可能会持续多个任期 。


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