raft的实际运用
导读:本文共5347.5字符,通常情况下阅读需要18分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 这篇文章给大家分享的是raft的实际运用,相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。1、raft.go 的raft结构体 补充字段。 字段应该尽量与raft论文的Figure2接近。typeRaftstruct{musync.Mutex//Locktoprotectsharedaccesstothispeer... ...
目录
(为您整理了一些要点),点击可以直达。这篇文章给大家分享的是raft的实际运用,相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。
1、raft.go 的raft结构体 补充字段。 字段应该尽量与raft论文的Figure2接近。
1、获取当前节点的log个数,以及最后一个log的term 确定当前节点的term。
2、如果调用节点的term小于当前节点,返回当前term,并且不为其投票。
3、如果调用节点的term大于当前节点,修改当前节点的term,当前节点转为follower.
4、如果调用节点的term大于当前节点,或者等于当前节点term并且调用节点的log个数大于等于当前节点的log,则为调用节点投票。
5、投票后重置当前节点的选举超时时间。
除了一些基本的初始化过程,新开了一个goroutine。
除了shutdown,还有两个通道,一个是electionTimer,用于选举超时。
一个是resetTimer,用于重置选举超时。
注意time.reset是很难正确使用的。
一旦选举超时,调用go rf.canvassVotes()
replyHandler是进行请求返回后的处理。
当前节点为了成为leader,会调用每一个节点的RequestVote方法。
如果返回过来的term大于当前term,那么当前节点变为follower,重置选举超时时间。
否则,如果收到了超过一半节点的投票,那么其变为了leader,并立即给其他节点发送心跳检测。
1、leader调用每一个节点的AppendEntries方法。
2、如果当前节点大于调用节点,那么AppendEntries失败。否则,修改当前的term为最大。
3、如果当前节点是leader,始终将其变为follower(为了让leader稳定)
4、将当前节点投票给调用者(对于落后的节点)。
5、重置当前节点的超时时间。
如果心跳检测失败了,那么变为follower,重置选举超时。
看完上述内容,你们掌握raft的运用方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
raft的实际运用的详细内容,希望对您有所帮助,信息来源于网络。