基于Django,Redis的分布式K-V存储的Raft实现。
-
想要了解 Raft 的工作机制,在自己的服务器上进行实现。
-
使用Django的原因是Django是一个成熟的网络框架,借助Django的一些借口,可以降低完成API的复杂度,把精力集中在完成Raft算法上。
-
完成Raft三个阶段。
-
完成互相调用的借口。
-
完成对Redis的读写接口。
-
完成自身日志维护的接口。
日志存储:使用Redis进行存储(初期),后期尝试更加快速,体积更小的解决办法(压缩等)。
数据存储:使用redis string 进行K-V存储。
(有点奇怪,再redis里面写执行日志,再在redis里面做落盘操作)
协议中需要硬落盘的(如版本号,历史版本号,任期等信息):还是相信可靠的redis,放在redis里面(宁可相信,Django服务挂了redis也不会挂)
不同版本之间互相的通信:
需要仔细考虑的一个问题:raft协议当中,只有leader节点能够对外服务还是所有节点都可以对外服务(已经不用思考了,raft只有一个节点对外服务)
代理:因为raft只有一个节点(leader)对外服务,所以前面要有一层代理服务器,实际的服务器连接位置需要代理服务器转发