初衷
长期以来看mongoDB、etcd都使用的raft,也看过braft,在分布式文件存储中元信息也用过raft库(C++版本),但是,始终都是调用库的apply接口而已,没有自己实现过。接下来的时间决定用go实现分布式中常用的一些算法。
raft是分布式一致性算法的经典算法,首当其冲成为了分布式基础库go版本的第一站。
为什么要自己写
- 看一个庞大的、现成的raft库,是很难自学到事无巨细的了解的。只有实践过,才能知道其中的琐碎细节,俗称“踩坑”。
- 网上现有go-raft实现的存在,公司级大型库不易学习
- 个人开源项目实现不完整:基本都是只实现了基本的选举过程,没有实现wal、snapshot、配置变更,没有一个麻雀虽小,五脏俱全的简单实现。
中文注释
由于是个人开源项目,没有团队,当然也没有老外参与,所以,代码注释都用中文了,关键是我英语还不太好,平时在公司编写代码可以用英文注释,可是开源项目要接受无数网上大佬的鞭尸,所以为了避免英语语言上驾驭不好而造成词不达意,故而采用中文注释,方便大家交流探讨。
代码
github地址:
https://github.com/lwwgo/goraft
采用的是MIT license,大家可以拿去使用,不要忘记一键三连(B站看多了,哈哈哈),能被大家看到、收藏、使用是很好的,若有同学提交代码是更好的,也欢迎邮箱联系我,北京线下当面交流。
安装
go get github.com/lwwgo/goraft
进度
选举 done
日志复制 done
wal done
snapshot done
配置变更 TODO
节点配置reload TODO