为什么筏领导在选举后发送空的AppendEntries RPC

问题描述

寻找一种可以理解的共识算法(扩展版本):

一旦作出选择:发送初始空AppendEntries的RPC(心跳),以 每个服务器;在空闲时间重复此操作以防止选举超时

为什么发送空的AppendEntries RPC但不携带日志?领导者何时发送带有日志的AppendEntries RPCS?

解决方法

AppendEntries没有条目的RPC被称为心跳,领导者会定期将其发送给关注者,以告知他们他还活着。每个跟随者都有一个不同的计时器,每当他们收到心跳信号时便会重置。如果此计时器达到零,则意味着领导者可能已经崩溃,并且计时器达到零的关注者会切换为候选状态,以尝试成为新的领导者。

当领导者收到来自客户端的任何请求并将请求存储在其自己的日志中时,领导者将发送带有日志的AppendEntries RPC。然后,它使用AppendEntries将新条目发送给其关注者。

Here,您可以看到木筏的活动状态,它们都以跟随者状态开始,并且由于没有领导者发送心跳,因此其中一个切换到候选状态并成为了领导者。

可能还有另一个专用的RPC作为心跳信号,但是Raft使用AppendEntries是因为它可以完成工作。心跳还用于更新告知关注者当前领导者是谁,以及他们在担任哪个职务。