大数据经典论文解读
徐文浩
bothub 创始人
13844 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
大数据经典论文解读
15
15
1.0x
00:00/00:00
登录|注册

32 | Raft(一):不会背叛的信使

你好,我是徐文浩。
在前面课程中,我们了解过的这些大数据处理系统,其实都属于分布式系统。所以,它们也都需要解决分布式一致性,或者说分布式共识的问题。
我们之前已经介绍过 Chubby,这个 Google 开发的分布式锁。正是通过 Chubby 这样的系统,使得我们可以确保系统里始终只有一个 Master,以及所有的数据分区在一个时间点只有一个所有者。而 Chubby 的底层,就是 Paxos 这样的分布式共识(Distributed Consensus)算法。另外在后面的 Spanner 这样的分布式数据库里,我们也看到了 Paxos 也可以直接拿来作为分布式数据库的解决方案。
在之前的这些论文里,我们对 Paxos 的算法做了一些简单的介绍。不过,我们并没有对 Paxos 的算法做非常深入地剖析。一方面,Paxos 算法其实并不容易理解,这也是为什么 Paxos 的论文第一次发表的时候,并没有得到足够的关注。另一方面,目前市场上实际的开源项目,大部分也并不是采用了 Paxos 或者 Multi-Paxos 算法,而是往往采取了简化和变形。Google 的 Chubby 并没有开源,而开源的 ZooKeeper 实现的是自家的 ZAB 算法,对 Paxos 做了改造。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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-18
    1
    2
  • 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
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部