本项目为学习项目,仅供参考。
RaftKV是分布式强一致的KV存储数据库,使用raft共识算法确保线性一致性。
raft算法核心实现参考了 etcd的go实现,位于模块 raftkv-raft。其实现不依赖网络和存储,仅完成了算法核心逻辑,实现非常优雅。算法核心逻辑均通过了测试。
网络通信部分用netty实现,位于模块raftkv-remoting(第一次用netty写东西,代码可能比较搓)
存储方面使用了内存存储(持久化和快照写起来太麻烦。。。)
命令行启动参数为
- --id代表节点id
- -c或--cluster代表集群地址的集合,以逗号,分隔开
- -p或--port代表部署端口 对于三节点的raft group,示例如下
--id 1 -c 127.0.0.1:8888,127.0.0.1:8889,127.0.0.1:8890 -p 8888
--id 2 -c 127.0.0.1:8888,127.0.0.1:8889,127.0.0.1:8890 -p 8889
--id 3 -c 127.0.0.1:8888,127.0.0.1:8889,127.0.0.1:8890 -p 8890
使用了restful风格的交互,
- 提议某个值使用 PUT方法,uri代表key,body代表值
- 线性一致读使用 GET方法, uri代表key
- 集群动态扩容
- 持久化和快照
- PreVote