我正在学习Raft,并且我已经知道Raft的基本机制。
当选一位领导人时,有责任将追随者的日志更新为该领导人的日志。当更新关注者时,它将向后查找第一个匹配的<entry, term>
,并使用以下日志更新关注者。
[筏]如何保证匹配的<entry, term>
之前的领导者和跟随者的日志相同?这种情况会发生吗:
|
Leader v
Entry : 1 2 3 4 5 6 7 8 9 10
Term : 1 1 1 2 2 3 3 3 3 3
Follower
Entry : 1 2 3 4 5 6 7
Term : 1 1 1 1 2 3 3
Raft算法的此属性称为对数匹配。
如果两个日志包含具有相同索引和术语的条目,则通过给定索引,所有条目中的日志均相同]
之所以成立,是因为:
[发送AppendEntries RPC时,领导者包括索引和日志中紧接新条目之前的条目的期限条目。如果关注者在其日志中找不到带有索引和术语相同,则拒绝新条目。一致性检查是一个归纳步骤:日志的初始空白状态满足日志匹配属性和一致性检查每当扩展日志时,都保留Log Matching属性。作为一个结果,只要AppendEntries成功返回,组长就知道追随者的日志与自己通过新日志记录的日志相同条目。