RAFT概要设计

admin
admin 2019年04月24日
  • 在其它设备中阅读本文章

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 功能需求与程序的关系

成员管理模块 选举模块 日志复制 复制状态机
查看成员列表
添加成员
移除成员
查看成员身份
查看领导者
写入日志
获取共识成功的日志
节点恢复

2.6 人工处理过程

2.7 尚未解决的问题

3. 接口设计

3.1 用户接口

3.2 外部接口

3.2 内部接口

4. 运行设计

4.1 运行模块组合

4.2 运行控制

4.3 运行时间

5. 系统数据结构设计

5.1 逻辑结构设计要点

5.2 物理结构设计要点

5.3 数据结构与程序的关系

6. 系统出错处理设计

6.1 出错信息

6.2 补救措施

6.3 系统维护设计