【课程报告十】精度In Search of an Understandable Consensus Algorithm(2)

5.3节阐述了领导者如何进行日志复制。

领导者将客户端命令作为一个新条目添加到其日志中,然后并行地向每个其他节点发出AppendEntries rpc来复制该条目。如果出现各种问题导致复制缓慢甚至失败,则领导者会无限期地重新尝试AppendEntries rpc(甚至在响应客户端之后),直到所有节点最终存储所有日志条目。

也就是说,允许领导者先响应客户端命令,在进行日志复制。

 图6说明:日志由条目组成,条目按顺序编号。每个条目都包含创建它的term(每个框中的数字)和用于状态机的命令。日志条目中的术语编号用于检测日志之间的不一致。每个日志条目还有一个整数索引,标识其在日志中的位置。一旦创建该日志条目的领导在大多数服务器上复制了该日志条目,则提交该日志条目。(例如:条目6,7)

Raft日志机制来维护不同服务器上日志之间的高度一致性。

文章给出两个性质:

•如果不同日志中的两个条目具有相同的索引和term,那么它们存储相同的命令。

•如果不同日志中的两个条目具有相同的索引和term,则该日志在之前的所有条目中都是相同的。

第一个性质显然成立:领导者在给定的term中最多创建一个具有给定日志索引的条目,而且日志条目在日志中的位置永远不会改变。第二个性质可以由发送AppendEntries RPC时的一致性保证,如果节点在其日志中没有找到具有相同索引和项的条目,则拒绝新的条目。那么已经接收的条目一定和领导者的一致。

由于可能不是所有节点都完成了日志复制,所以在领导者失败后极有可能会造成系统的的不一致追随者可能缺少在新的领导者上存在的条目,也可能有在新的领导者上不存在的额外条目。

在Raft中,领导者通过强制追随者复制自己的日志来处理不一致性。领导者会寻找它与追随者两个日志中一致的最新的日志条目,删除追随者在此条目后的日志,复制领导者在此条目后的日志给追随者。这些操作将包含在AppendEntries rpc执行的一致性检查中。

领导者向每个追随者发送一个nextIndex,进行索引的比对,如果不一致则失败,nextIndex减一,直到找到相同的索引,相同的索引意味着相同的日志条目。以此来满足一致性检查。

这种日志复制机制展示了理想共识属性:Raft可以接受、复制和应用新的日志条目只要大部分节点可用。在正常情况下,一个新的条目可以通过单轮rpc复制到集群的大多数;一个缓慢的跟随者不会影响性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值