Raft协议的纯java实现,最简单,最好懂的代码

Raft

Raft是一种较为广泛使用的分布式协议。博主在学习这个算法时,在网上找到了很多不同的实现方式,但是都引用了很多第三方库,使用了RPC等工具(博主没学过),代码比较晦涩难懂,对刚接触分布式算法的朋友很不友好。本文通过java不依赖任何第三方工具,实现了Raft协议的核心选主功能。

参考资料

Raft原理

选主逻辑

Raft协议中所有节点都有三种状态,leader,candidate,follower。leader是一个集群的领导者,所有的节点都要和leader保持同步。leader要定时给follower发送心跳,如果follower在一定的时间内没有收到心跳则认为leader宕机了,会变为candidate,向其他节点发起竞选。
同一时刻一个集群中只能存在一个leader,当一个leader挂掉时其他节点会根据一定的算法选择出下一个leader维持集群的稳定。
Raft协议中每个节点都有机会成为leader,当一个candidate得到半数以上的follower投票时就会成为下一任leader。这样可以保证选举速度不会过慢,也可以防止同时出现复数个leader。

项目结构

知道了raft的基本逻辑,开始尝试设计java项目结构的思维导图。

项目结构
最初目的是设计出一个基于raft的kvdb,但是本文着重讲解raft协议的实现。

最终的项目结构如下:
项目结构

实现细节

采用状态机实现节点的三个状态,所有网络操作都封装在Network中。每一个节点可能会执行的操作都放在RaftNode里。

演示

https://www.bilibili.com/video/BV1xS4y1v7op/

Git链接

https://gitee.com/Nana7mi/raft-kvdb.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值