首页 > 代码库 > Raft系列文章之三:Raft RPC详解

Raft系列文章之三:Raft RPC详解

上一篇文章提到, Raft核心部分只需要用到2个RPC: RequestVote和AppendEntries, 本文将介绍这两个RPC的格式和作用。

RequestVote RPC是由candidate发送给其他节点,请求其他节点为自己投票,如果一个candidate获得了多数节点的投票,则该candidate转变为Leader。AppendEntries RPC是由Leader节点发送给其他节点,有两个作用,当其entries域为空时,该RPC作为Leader的心跳,当entries域不为空时,请求其他节点将entries域中的log添加到自己的log中。

每个Raft节点将会根据自己节点的状态数据来对这两种RPC请求进行处理,我们先看一下,每个Raft节点保存那些状态数据:


下面是AppendEntries RPC的格式和说明:


下面是RequestVote RPC格式及说明:


上面这两个RPC就是Raft核心部分用到的全部RPC. 下面再罗列一下Raft各种状态的节点处理RPC及状态转换的规则:



本文介绍了Raft 核心部分RPC调用的详细格式及处理流程,下一篇文章我将结合本文介绍的内容进一步解释Raft 日志复制的过程。

Raft系列文章之三:Raft RPC详解