美文网首页区块链研习社区块链大学区块链
代码实现raft共识算法,并进行Demo展示

代码实现raft共识算法,并进行Demo展示

作者: 肉山大魔王i | 来源:发表于2019-12-04 09:14 被阅读0次

参考资料:


源码地址:https://github.com/corgi-kx/blockchain_consensus_algorithm/tree/master/raft

本demo为raft的代码实现,如果想了解raft的详细信息请自行谷歌
本demo展示了raft的部分功能,写的并不严谨,仅作为对raft的了解用途

实现功能:

  • 节点状态分为Leader(领导者)、Follower(追随者)、Candidate(候选人)
  • 节点间随机成为candidate状态并选举出Leader,且同时仅存在一个Leader
  • Leader节点定时发送心跳检测至其他Follower节点
  • Follower节点们超过一定时间未收到心跳检测,则Follower节点们重新开启选举
  • 客户端通过http发送消息到节点A,如果A不是Leader则转发至Leader节点
  • Leader收到客户端的消息后向Follower节点进行广播
  • Follower节点收到消息,反馈给Leader,等待Leader确认
  • Leader收到全网超过二分之一的反馈后,本地进行打印,然后将确认收到反馈的信息提交到Follower节点
  • Follower节点收到确认提交信息后,打印消息

运行步骤:

1.下载/编译
 git clone https://github.com/corgi-kx/blockchain_consensus_algorithm.git
 cd blockchain_consensus_algorithm/raft
 go build -o raft.exe
2.开启三个端口,并分别执行raft.exe A 、raft.exe B 、 raft.exe C,代表开启三个节点(初始状态为追随者)
3.三个节点会随机选举出领导者(其中A节点默认监听来自http的访问),成功的节点会发送心跳检测到其他两个节点
4.此时打开浏览器用http访问本地节点8080端口,带上节点需要同步打印的消息,比如:

http://localhost:8080/req?message=噢,我的上帝呀


可以看到三个节点同时打印了消息,本段数据同步步骤可以用下图进行理解(不过缺少了4.1步骤)
在这里插入图片描述
5.如果领导者节点宕机了怎么办呢,我们尝试关闭领导者节点B

可以发现关闭领导者B后,节点间有个超时机制,如果超过一定时间没有收到心跳检测,则会自动开始重新进行选举,此时A当选了新的领导者

6.再次打开浏览器用http访问本地节点8080端口,带上节点需要同步打印的消息,看看还能同步打印吗

http://localhost:8080/req?message=天气不错


结果发现可以打印的,因为新的领导者A、追随者C并没有宕机,A收到了C的回馈(2>3/2)超过了全网一半的节点,所以是可以进行打印数据的
7.重新启动节点B,B自动变为追随者状态,并接收来自新的领导者A的心跳检测


   建了个QQ群:722124200 有问题可以加群互相讨论 :)
   邮箱:mikesen1994@gmail.com                  vx:965952482

相关文章

网友评论

    本文标题:代码实现raft共识算法,并进行Demo展示

    本文链接:https://www.haomeiwen.com/subject/flskgctx.html