微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Raft follower 应该在什么时候记录 RPC?

如何解决Raft follower 应该在什么时候记录 RPC?

我正在从 paper's extended version 学习 Raft。在论文的第 5.2 节(领导人选举)中,它说:

如果跟随者在称为选举超时的一段时间内未收到任何通信,则它假定没有可行的领导者并开始选举以选择新的领导者。

同时,论文称在某些情况下可以拒绝 RPC,例如当它包含较小的术语编号时。

我的问题是:follower 何时应该将 RPC 识别为有效的“通信”并进行记录以防止其超时?


编辑:

我目前的实现如下:

  • RequestVote 仅在服务器授予投票权时重置超时
  • AppendEntries 如果其期限不小于服务器的期限,则重置超时

这在大多数情况下都可以正常工作,但有时会导致选举时间过长。考虑一个具有 2 个服务器的 Raft 集群,两个服务器都是跟随者。服务器 #1 有更新的日志,但服务器 #2 有更大的期限。

在这种情况下,服务器 #1 必须连续开始 2 次选举才能成为领导者,这(直觉上)以

解决方法

作为 Follower 的 Raft 节点响应两种类型的请求:

  • 附加来自领导者的条目
  • 请求候选人投票

如果 Follower 收到来自当前 Leader 的 AppendEntries,它应该做所有的检查(即来自请求的 term,日志匹配),如果所有的检查都得到满足,Follower 应该从请求中附加收到的条目。 Follower 还应该在从当前 Leader 接收 AppendEntries 时重置选举超时,因为 AppendEntries 还充当心跳(Leaders 还会定期发送没有日志的 AppendEntries 请求,以防止 Follower 超时并开始新的选举)。>

如果 Follower 收到 RequestVote RPC,并且如果 Follower 决定将其投票授予该 Candidate,则 Follower 也会重置其选举超时。

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