概述
本文章只实现raft一致性算法的核心功能:leader选举、日志复制,不包括集群成员变化、日志压缩等功能。主要目的适用于学习;
本文为raft实现的设计文档,对raft算法进行抽象,将关键逻辑用图形和表格梳理清楚,从而给使用Java代码进行实现提供设计文档。
实现代码GitHub:https://github.com/DanielJyc/raft-simple
主要概念
- server:服务器,可能为leader、candidate、follower中的任意一方
- leader:主节点
- candidate:候选节点
- follower:从节点
- RPC:远程过程调用,在这里指通信接口
- election:选举leader的过程
- client:客户端,发起请求,传输数据的使用方
- entry:条目,=term + 状态机指令(数据) + logIndex(日志索引)。
- term:任期号,即一个数字。如下图,多个term组成了整个生命周期的时间轴。