【发布时间】:2022-01-20 13:35:52
【问题描述】:
那么假设raft算法中3台服务器的日志配置如下:
S1 -> 3
S2 -> 3 3 4
S3 -> 3 3 5
如果假设 S3 是第 3 学期的领导者,则可能会出现这种配置,该条目已与每个副本一起提交,然后在具有相同领导者 S3 的另一个客户端操作中,它只能复制 S2 及其自身中的条目,然后它崩溃了。之后,S2从自身和S1中夺取选举。它获取一个条目并将其输入到日志中,然后崩溃。 S3 再次回来,然后从 S1 和它自己那里获得投票并成为领导者,在第 5 期进入另一个日志,然后崩溃。
现在我们遇到了第 4 和第 5 学期的条目肯定没有提交的情况。假设 S2 再次成为领导者(从自己和 S1 获得投票),它将尝试更正追随者中的日志,并最终覆盖并附加到两个追随者以获得:
S1 -> 3 3 4
S2 -> 3 3 4
S3 -> 3 3 4
在我的推理中,删除第 5 学期的日志是公平的,因为领导者可能没有向客户端响应完成消息,因为第 5 学期的条目复制没有在大多数服务器上完成。但是对于第 4 学期的条目来说,相同的论点是否有效,如果是,为什么它会在任何地方复制。客户端也不会在第 4 项中获得条目的完成响应,因此客户端会认为状态机不会运行此操作,但通过上述逻辑它会运行。
有人愿意解释一下吗?
【问题讨论】:
-
您也可以尝试在 cs.stackexchange.com 上提出这个问题
标签: distributed-computing distributed consensus raft