Raft 实现原理与踩坑指南

本文详细介绍了Raft分布式共识算法的学习过程、核心机制及实现难点,包括Leader选举、日志复制和安全性保证等方面。作者分享了在实现过程中遇到的坑,并提供了重要的学习资源和踩坑指南,强调了正确实现Raft算法的挑战性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

         因为学习了MIT6.824课程,我对于raft这个分布式算法感到很有兴趣,它宣称自己是容易理解的分布式共识算法,相比之前广泛应用的Paxos,Raft的描述使用的是工程化的语言,引入了RPC,Log等易懂的概念,使得它更加容易被理解。

        但是容易被理解并不等于就可以简单地实现正确,实际上,正确地实现Raft —— 甚至只是课程中那个非工业级的,完全按照paper中叙述的那种简单版 —— 也是极为困难的。因为分布式共识算法中一点细节不对,就可能会对整个系统的安全性活性造成打击。

        在长达一周的时间中,踩了无数坑,终于过了6.824 Lab2中提供的所有TestCase。但是需要指出的是,即便如此也不能保证我的Raft实现是正确的。因为我的代码没经过形式化验证。也可能只是问题没被测出来而已,分布式系统的状态太多太庞杂,完全覆盖是不可能的。

        但无论如何,我认为有一些东西值得记下来,让后人和之后的自己少走点弯路。

学习资料

        想看视频的话推荐MIT 6.824,网上有各种视频可以看,不过翻译可能不全,但是英文也不难。Raft只是这个课程的一部分。我做的Lab就是这个课程提供的

        Raft相关的是Lab 2 : 6.824 Lab 2: Raft

        Raft的paper :Paper (很重要,后面要非常仔细地参考这个paper)

        还有课程TA的建议: Students' Guide to Raft

        以上是我认为最有用的,如果对自己动手实现有兴趣建议仔细读。

Raft概述

        首先,Raft是什么呢?Raft是一种分布式共识算法,Paper中这样定义共识算法:公式算法使得一组机器能一致地工作,即便部分成员挂掉也可以继续工作(Consensus algorithms allow a collection of machines to work as a coherent group that can survive the failures of some of its members)

        在Raft之前,其实是有别的分布式共识算法的,比如Paxos,但是Paxos太过于晦涩难懂,即便懂了论文,实现到代码中也会有很大的不同,这样一来要保证实现的正确性就非常困难了。同时Paxos的晦涩让教学也很难进行。

        这时,Raft就诞生了,其论文标题 《In Search of an Understandable Consensus Algorithm》就指明了,它是以可理解性为重要目标的。

        在这篇Paper中,没有使用形式化的术语和符号,而是用状态机,Log,RPC等概念来描述算法,开发人员很容易去在代码上实现论文中描述的。

机制

        Raft将网络中的节点分成三种: Leader, Candidate和Follower

        Leader: 节点只有一个:Replication Log的追加操作必须通过Leader进行,同时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值