32 | Raft(一):不会背叛的信使
![](https://static001.geekbang.org/resource/image/26/7f/2652e0df7e8223008629c732e05e957f.jpg)
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
Raft算法:简单易懂的分布式共识算法 Raft算法是一种用于解决分布式系统中一致性和共识问题的分布式共识算法。相较于Paxos算法,Raft算法更易于理解和实现。文章介绍了Raft算法的基本概念和实现框架,包括Leader选举、日志复制和安全性三个关键问题。在Raft系统中,服务器分为Leader、Follower和Candidate三个角色,通过定期心跳、超时机制和投票过程实现Leader选举。日志复制过程通过两阶段提交实现同步复制,确保数据一致性。安全性机制则通过比较已提交的日志信息来保证Leader的准确性。总的来说,Raft算法通过简化问题、强化系统限制和拆分子问题,使得分布式共识问题变得更易理解和实现。Raft算法的特点在于其简单易懂的实现方式,以及通过半数以上通过的原则确保最新提交数据的一致性。 Raft的主要目标是找到一个容易理解的分布式共识算法。它通过直接从“状态机复制”这个角度,来直接设计算法,而不是通过共识问题绕一圈,映射成一个状态机复制问题。在算法设计层面,Raft采取了分而治之的办法。通过把问题拆分成Leader选举、日志复制、安全性等一系列子问题,来使得算法更容易理解。在Leader选举上,Raft采用的是典型的心跳检测Leader存活,以及随机超时时间投票,确保不会死循环,来确保我们可以快速选出Leader。在日志复制层面,Raft采用的是一个典型的两阶段提交。为了让算法简单,它直接在日志复制过程中,强制Follower和Leader同步,来解决删除未提交的脏日志的办法。而为了做到这一点,Raft又需要确保无论Leader如何通过选举切换,都需要包含最新已提交的日志的办法。而要确保这一点,它也只是在Leader选举的时候,带上了日志索引和任期信息就简单地解决了。 总的来说,Raft算法以其简单易懂的实现方式和确保最新提交数据一致性的原则,为读者提供了一种容易理解的分布式共识算法。
《大数据经典论文解读》,新⼈⾸单¥59
全部留言(5)
- 最新
- 精选
- piboye老师,为什么follower不直接告诉leader我已提交的位置,而是要leader一个一个的去回朔,是基于什么考虑?2022-01-1812
- CRT再问老师一个问题哈,在选举的时候,能够选举有最新日志leader的前提是有过半数拥有最新日志的follower,那如果因为网络原因,没有过半数最新日志的follower呢?2022-01-11
- CRT关于思考题目,可以利用时间的随机性,各自等待一个随机的时间再选举,时间戳最大为master,失败的话,继续等待随机时间再选举。2022-01-11
- 在路上徐老师好,我认为启动时的选举涉及两个问题,第一、什么时候发起投票,第二、如何才能被选中。对于第一点,集群启动是需要一段时间的,每台机器启动完成的时间不同,本身符合随机性,所以可以在启动后立即发起投票,对于第二点,还是需要本地已提交的日志是最新的,并获得大多数的Follower同意。如果选举失败,则随机等待一段时间,进入下一个选举循环。2021-12-24
- 曾轼麟我理解刚启动的时候有点类似于抢占模式,每个刚启动的服务都会发起一次选举请求,最先获得半数的实例会宣布为master 我这边有一个疑问,redis的raft实现好像又是另一种变种,通过一群哨兵去基于raft选举redis master,而哨兵本身是不能成为master,不知道这种方式下能否满足raft的状态机复制的安全性呢?2021-12-24