RAFT算法需求分析

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

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 也可

4.3 接口

4.3 控制