Raft存档(raft怎么共享存档)

清理不一致的日志

领导者变更可能导致日志的不一致,之前主要展示了会影响状态机安全的情况,这里展示另外可能出现的两种情况,如图4-40所示。

Raft存档(raft怎么共享存档)

从图4-40中可以看出,系统中通常有两种不一致的日志:缺失的条目(Missing Entries)和多出来的条目(Extraneous Entries)。

新的领导者必须使跟随者的日志与自己的日志保持一致,我们要清理的就是这两种日志,对于缺失的条目,Raft算法会发送AppendEntries消息来补齐;对于多出来的条目,Raft算法会想办法删除。

为了清理不一致的日志,领导者会为每个跟随者保存变量nextIndex[],用来表示要发送给该跟随者的下一个日志条目的索引。对于跟随者i来说,领导者上的nextIndex[i]的初始值为1+领导者最后一条日志的索引。

领导者还可以通过nextIndex[]来修复日志。如果AppendEntries消息发现日志一致性检查失败,那么领导者递减对应跟随者的nextIndex[i]值并重试。具体流程如图4-41所示。

Raft存档(raft怎么共享存档)

此时属于缺失条目,其完整流程为:

(1)一开始领导者根据自己的日志长度,记nextIndex[1]的值为11,带上前一个日志条目的唯一标识:索引为10且任期为6。检查发现跟随者1索引为10处没有日志,检查失败。

(2)领导者递减nextIndex[1]的值,即nextIndex[1]等于10,带上前一个日志条目的唯一标识:索引为9且任期为6。跟随者1处还是没有日志,依然检查失败。

(3)如此反复,直到领导者的nextIndex[1]等于5时,带上索引为4且任期为4的信息,该日志在跟随者1上匹配。接着领导者会发送日志,将跟随者1从5到10位置的日志补齐。

对于跟随者2,此时属于多出来的日志,领导者同样会从nextIndex[2]为11处开始检查,一直检查到nextIndex[2]等于4日志才匹配。值得注意的是,对于这种情况,跟随者覆盖不一致的日志时,它将删除所有后续的日志记录,Raft算法认为任何无关紧要的记录之后的记录也都是无关紧要的,如图4-42所示。之后再由领导者发送日志来补齐。

Raft存档(raft怎么共享存档)

内容摘自《深入理解分布式系统》,作者唐伟志,曾任网易游戏、腾讯基础架构工程师。

Raft存档(raft怎么共享存档)

请点击输入图片描述(最多18字)

网友评论1:大概看了下,书还不错,打算转go,分布式应该是必不可少的

网友评论2: 到货快 分布式内容比较全

?

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dasum.com/47851.html