RAFT概要设计
1. 引言
1.1 编写目的
本文档简单了说明了系统的基本功能和简要实现方式,指导开发员进行编码。
本说明书的预期读者为:系统设计者、系统开发员。
1.2 背景
待开发软件系统的名称:RAFT 算法
此软件系统任务开发者:xx
此软件系统用户:分布式系统
1.3 定义
- RAFT: 共识算法 raft
- Follower:追随者,集群成员默认身份
- Candidate:候选者,具有选举的能力
- Leader: 领导者,Candidate 选举成功
1.4 参考资料
- RAFT 需求分析说明书
2. 总体设计
2.1 需求规定
- 查看成员列表
- 添加成员
- 移除成员
- 查看成员身份
- 查看领导者
- 写入日志(提议)
- 获取共识成功的日志(提议)
- 节点恢复
2.2 运行环境
go1.10 以上
2.3 基本设计概念和处理流程
- raft 初始状态时所有节点都处于 Follower 状态,并且随机睡眠一段时间。最先醒来的节点进入 Candidate 状态,向其它所有节点发出投票请求。当其它节点收到投票请求后,如果同意(请求节点的任期日志比自己的新)将自己仅有的一票投给请求节点。当节点收到超过半数节点的投票后,就进入 Leader 状态,成为系统中仅有的 Leader。raft 系统中只有 Leader 才有权利接收并处理 client 请求,并向其它节点发出同步请求。
- Leader 选举出来后,就可以开始处理客户端请求。Leader 收到客户端请求后,将请求内容作为一条日志添加到自己的日志记录中,并向其它节点发送添加日志请求。其它节点收到请求后,判断该请求满足接收条件,如果满足条件就将其添加到本地的日志中,并给 Leader 发送添加成功的回复。Leader 在收到大多数节点添加成功的回复后,就将该条日志正式提交。提交后的日志日志就意味着已经被 raft 系统接受,并能应用到状态机中了。
2.4 结构
- 分布式架构
- 异步通信
- 领导者控制
2.5 功能需求与程序的关系
成员管理模块 | 选举模块 | 日志复制 | 复制状态机 | |
---|---|---|---|---|
查看成员列表 | √ | |||
添加成员 | √ | |||
移除成员 | √ | |||
查看成员身份 | √ | |||
查看领导者 | √ | |||
写入日志 | √ | |||
获取共识成功的日志 | √ | |||
节点恢复 | √ |