RAFT算法需求分析
1. 引言
1.1 编写目的
实现 RAFT 共识算法,提高集群的协作能力和效率。为算法的设计、实现、测试提供重要依据。本文档可供开发人员、测试人员、用户阅读和参考。
1.2 背景
1982 年,Lamport 首次发表了关于拜占庭将军问题解决方案的论文,后来获得了计算机界的最高奖:图灵奖。
1999 年,Jakobsson 发表了关于 PoW 的论文。
2008 年,中本聪发表了比特币的论文,并用了 PoW 作为共识机制。
2012 年,PeerCoin 项目开始采用 PoS 作为共识机制。
2016 年,Tendermint 项目开始采用 PBFT 作为公示机制。
2018 年,以太坊项目提出在 2.0 版本中,通过 Casper 方法采用 PoS 作为共识机制。
共识算法作为一个集群中沟通与协调的工具,性能和安全等对集群的影响较大,raft 算法是共识算法中一个较为高效的算法实现,对于提升集群的效率有着非凡意义
项目名称:RAFT 算法
项目开发者:xx
1.3 定义
- RAFT: 共识算法 raft
- Follower:追随者,集群成员默认身份
- Candidate:候选者,集群没有领导者
- Leader: 领导者,Candidate 选举成功
2. 任务概述
2.1 目标
解决集群中就某一指令(提议)达成一致的问题,实现稳定可靠的 RAFT 算法
2.2 用户特点
本算法为集群共识而设计,集群成员(计算机)即为用户,要求性能强大、能够互相通信、存在唯一成员标识
2.3 假定和约束
节点要求:
- 信道安全
- 节点忠诚
约束
- 集群成员可以宕机,但要保证超过半数可以正常工作
- 领导者是整个集群的枢纽,对集群的性能起决定性作用
3. 需求规定
3.1 对功能的规定
- 共识提议:领导者共识提议,以前的共识没有完成也可以继续提出提议,一旦共识完成对所有成员发出通知
- 成员变更:成员变更(添加和移除)可视为特殊的提议,也需要共识。
- 选取领导者:节点一旦成为主节点,对所有成员发出通知
3.2 性能需求
3.2.1 精度
数据要求必须完整、精确、可靠、真实。
3.2.2 时间特性要求
在通信良好的情况下:在 30 秒以内选出领导者,实时处理提议,结果可以延时返回,成员变更 1 分钟内完成;
在通信较差的情况下可以适当增加时间
3.2.3 灵活性
RAFT 算法在每个成员都有一份持久化的日志(提议)和自己的标识,可更新成员的运行环境,只要这些数据不变
3.3 输入输出要求
3.4 数据管理能力要求
3.5 故障处理要求
节点宕机之后,可使用本地的数据或者同步其他节点的数据进行恢复
3.6 其他专门需求
4. 运行环境规定
4.1 设备
计算机性能有较高要求,越快越好。
4.2 支持软件
开发工具:goland
编程语言:go
操作系统:Linux 最佳,windows 也可