原文地址:https://www.yuque.com/aidt/tq712e/bhhyno
第一期,只实现raft一致性算法的核心功能,先不实现集群成员变化、日志压缩等功能。 本文为raft实现的设计文档,对raft算法进行抽象,将关键逻辑用图形和表格梳理清楚,从而给使用Java代码进行实现提供设计文档。
- server:服务器,可能为leader、candidate、follower中的任意一方
- leader:主节点
- candidate:候选节点
- follower:从节点
- RPC:远程过程调用,在这里指通信接口
- election:选举leader的过程
- client:客户端,发起请求,传输数据的使用方
- entry:条目,=term + 状态机指令(数据) + logIndex(日志索引)。
- term:任期号,即一个数字。如下图,多个term组成了整个生命周期的时间轴。
核心的数据结构即为entry,多个entry组成了本地的数据模型,如下图:
- term:任期号
- index:日志索引,从1开始递增
- data:保存的数据

- 如果term < currentTerm返回 false (5.2 节)
- 如果 votedFor 为空或者为 candidateId,并且候选人的日志至少和自己一样新,那么就投票给他(5.2 节,5.4 节)
- 如果接收到的 RPC 请求或响应中,任期号T > currentTerm,那么就令 currentTerm 等于 T,并切换状态为跟随者(5.1 节)

dubbo参考:
grpc参考:























