/Raft-Django-Sample

基于Django,Redis的分布式K-V存储的Raft实现。

MIT LicenseMIT

Raft-Django-Sample

基于Django,Redis的分布式K-V存储的Raft实现。

设计初衷

  • 想要了解 Raft 的工作机制,在自己的服务器上进行实现。

  • 使用Django的原因是Django是一个成熟的网络框架,借助Django的一些借口,可以降低完成API的复杂度,把精力集中在完成Raft算法上。

流程

  1. 完成Raft三个阶段。

  2. 完成互相调用的借口。

  3. 完成对Redis的读写接口。

  4. 完成自身日志维护的接口。

设计

日志存储:使用Redis进行存储(初期),后期尝试更加快速,体积更小的解决办法(压缩等)。

数据存储:使用redis string 进行K-V存储。

(有点奇怪,再redis里面写执行日志,再在redis里面做落盘操作)

协议中需要硬落盘的(如版本号,历史版本号,任期等信息):还是相信可靠的redis,放在redis里面(宁可相信,Django服务挂了redis也不会挂)

不同版本之间互相的通信:

需要仔细考虑的一个问题:raft协议当中,只有leader节点能够对外服务还是所有节点都可以对外服务(已经不用思考了,raft只有一个节点对外服务)

代理:因为raft只有一个节点(leader)对外服务,所以前面要有一层代理服务器,实际的服务器连接位置需要代理服务器转发

API设计

1. 初始化API:在这个接口下,所有机器都将要处于初始状态。

2. 增加节点的平滑通信

3. 设计代理

4.