• 暂时停更一段时间!
  • 近期网站将陆续进行前端页面改造!
  • 招募网站编辑,联系站长!

一致性协议(三)Raft 协议

文章目录[隐藏]

Raft 和 Paxos 类似,但是更容易理解,也更容易实现。

Raft 主要是用来竞选主节点。

单个 Candidate 的竞选

有三种节点:Follower、Candidate 和 Leader。Leader 会周期性的发送心跳包给 Follower。每个 Follower 都设置了一个随机的竞选超时时间,一般为 150ms\~300ms,如果在这个时间内没有收到 Leader 的心跳包,就会变成 Candidate,进入竞选阶段。

① 下图表示一个分布式系统的最初阶段,此时只有 Follower,没有 Leader。Follower A 等待一个随机的竞选超时时间之后,没收到 Leader 发来的心跳包,因此进入竞选阶段。

② 此时 A 发送投票请求给其它所有节点。

③ 其它节点会对请求进行回复,如果超过一半的节点回复了,那么该 Candidate 就会变成 Leader。

④ 之后 Leader 会周期性地发送心跳包给 Follower,Follower 接收到心跳包,会重新开始计时。

多个 Candidate 竞选

① 如果有多个 Follower 成为 Candidate,并且所获得票数相同,那么就需要重新开始投票,例如下图中 Candidate B 和 Candidate D 都获得两票,因此需要重新开始投票。

② 当重新开始投票时,由于每个节点设置的随机竞选超时时间不同,因此能下一次再次出现多个 Candidate 并获得同样票数的概率很低。

日志复制

① 来自客户端的修改都会被传入 Leader。注意该修改还未被提交,只是写入日志中。

② Leader 会把修改复制到所有 Follower。

③ Leader 会等待大多数的 Follower 也进行了修改,然后才将修改提交。

④ 此时 Leader 会通知的所有 Follower 让它们也提交修改,此时所有节点的值达成一致。

拜占庭将军问题

[拜占庭将军问题深入探讨](http://www.8btc.com/baizhantingjiangjun)

参考资料

– 杨传辉. 大规模分布式存储系统: 原理解析与架构实战[M]. 机械工业出版社, 2013.
– [区块链技术指南](https://www.gitbook.com/book/yeasy/blockchain_guide/details)
– [NEAT ALGORITHMS – PAXOS](http://harry.me/blog/2014/12/27/neat-algorithms-paxos/)
– [Raft: Understandable Distributed Consensus](http://thesecretlivesofdata.com/raft)
– [Paxos By Example](https://angus.nyc/2012/paxos-by-example/)


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:一致性协议(三)Raft 协议
喜欢 (0)
[247507792@qq.com]
分享 (0)

邀请您免费 注册账号 登录 即可参与讨论!