17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Hashicorp Raft是一个流行的Raft实现,本文从算法原理和代码实现两个角度,带领读者逐步掌握了该实现的核心功能。文章首先强调了理论和实践之间的差异,强调了理解API背后的代码实现的重要性。接着,文章详细介绍了Hashicorp Raft中领导者选举的实现方式。通过分析源码,阐述了节点状态的数据结构和RPC消息的格式,以及领导者选举的具体步骤。在领导者选举过程中,文章重点介绍了跟随者、候选人和领导者三种节点状态对应的功能函数,以及选举领导者的具体步骤。通过对Hashicorp Raft的领导者选举实现进行深入剖析,读者可以更好地理解Raft算法的实际应用和技术细节。 本文详细介绍了Hashicorp Raft中日志复制的重要性以及其代码实现。读者通过学习日志相关的数据结构和代码实现,了解了日志复制是由领导者发起的,跟随者来接收的。文章强调了日志项的数据结构,包含了LogType和Extensions两个额外的字段,以及领导者复制日志和跟随者接收日志的具体步骤。在领导者复制日志过程中,文章详细介绍了启动新协程、流水线复制模式等关键步骤。而在跟随者接收日志过程中,文章着重介绍了处理接收到的RPC消息和核心函数appendEntries()的执行流程。 总的来说,本文通过深入剖析Hashicorp Raft的实现细节,帮助读者更好地理解了Raft算法的实际应用和技术细节,以及日志复制的重要性和代码实现。对于开发分布式系统的读者来说,本文提供了宝贵的学习资源,使他们能够更高效地阅读源码并理解Raft算法的实现原理。
《分布式协议与算法实战》,新⼈⾸单¥59
全部留言(21)
- 最新
- 精选
- 姜川Java版可以看dledger
作者回复: 加一颗星:)
2020-03-27221 - 吴小智Raft 说到底就是保证集群中各节点的日志一致,那么在 Consul、InfluxDB、IPFS 中,Raft 又是怎么被使用的呢?
作者回复: 可以这么理解,Raft是通过实现各节点日志的一致等,最终实现了强一致性,能保证写操作完成后,就能立即和一直读到新数据,这也是Consul他们所需要的。
2020-03-2028 - 沉淀的梦想流水线复制是如何优化日志复制的性能的呢?
作者回复: 加一颗星:),发、收分离,持续异步发送日志项,不阻塞,也不需要考虑日志不一致等异常情况,纯复制。
2020-03-2027 - 吴小智Leader 收到 client 请求,然后把日志写到自己的 disk 中,然后通知 Follower 复制日志,然后 leader 等待相应,收到大多数相应后,commit 该条日志;在代码中,只找到了 “Leader 收到 client 请求,然后把日志写到自己的 disk 中,然后通知 Follower 复制日志”,没找到 leader 是如何判断是否有大多数相应,且是在什么时候 commit 的。希望老师可以指点一下? PS:源代码中的 chan 通信,真的折磨人。
作者回复: 加一颗星:),调用match()函数,来统计日志复制结果和判断大多数的,并将结果发送到commitCh,最终在leaderLoop()中处理committed日志项的。
2020-03-246 - Ethan Liu老师 runFollower()里面这两个判断 if r.configurations.latestIndex == 0 和 if r.configurations.latestIndex == r.configurations.committedIndex && !hasVote(r.configurations.latest, r.localID) 原理是什么啊?
作者回复: 加一颗星:),条件1,当前集群只有它一个节点,那么此时不需要进行领导者选举;条件2:该节点不具有投票权,不能进行领导者选举。
2020-06-232 - 奕Hashicorp Raft 找了半天 没有找到入口 main 函数
作者回复: Hashicorp Raft是个package,可以将它理解成库(lib),是没有main函数的,可以通过API函数(比如AddVoter())或者核心函数(比如run()),作为入口函数,来进一步学习。
2020-03-292 - 坤韩老师,您好,hashicorp 实现的raft package, 我看github上的标签是build failed, 我试过多个tag都是一样的。
作者回复: package是无法直接编译的,需要在程序的main()中被调用后,才能编译。可以编译、研究下20讲的程序。
2020-03-222 - 每天晒白牙好,下去结合之前的理论看看源码
作者回复: 加油!有问题多交流:)
2020-03-202 - cyq对于hashicorp/raft的代码中,如果一个节点是candidate状态。那么他是在什么时候会恢复为Follower的身份?
作者回复: 加一颗星:),存在领导者,或者它发现了有比它更适合作为领导者的节点,具体来说,就是接收到领导者的心跳,或者接收到的投票请求的响应中的任期编号,比它的大。
2020-05-2721 - Michael Tesla老师,是不是得先把大论文看一遍,再看代码,效果比较好?
作者回复: 加一颗星:)。我推荐,先大概了解下算法的原理,然后将Raft实现(比如Hashicorp Raft)使用起来,有了感觉后,再将代码和论文结合着学习。
2020-03-231