二十张图带你一次性学懂Raft算法

Raft是一种比Paxos更易理解的分布式一致性算法,它通过选举领导者、日志复制和处理脑裂问题来保证集群一致性。节点有领导者、跟随者和候选者三种状态。日志是数据交互的关键,每个日志项包含指令和附加信息。选举过程中,节点通过随机超时时间分散选举,确保多数节点投票给同一候选人。日志一致性通过领导者强制其他节点复制其日志实现。脑裂问题通过选举规则避免,单节点变更是安全的成员变更方式。掌握Raft算法对于理解和实现分布式系统至关重要。
摘要由CSDN通过智能技术生成

基础

什么是Raft算法?

Raft是一种用于替代Paxos算法。相比于Paxos,Raft的目标是提供更清晰的逻辑分工使得算法本身能被更好地理解,同时它安全性更高,并能提供一些额外的特性。Raft能为在计算机集群之间部署有限状态机提供一种通用方法,并确保集群内的任意节点在某种状态转换上保持一致。Raft算法的开源实现众多,
在Go、C++、Java以及 Scala 中都有完整的代码实现。Raft这一名字来源于"Reliable, Replicated, Redundant, And Fault-Tolerant"(“可靠、可复制、可冗余、可容错”)的首字母缩写。[3]

集群内的节点都对选举出的领袖采取信任,因此Raft不是一种拜占庭容错算法,是一种故障容错算法

by 维基百科

用通俗的话来说,Raft算法是在兰伯特 Multi-Paxos思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者、候选人三种状态,在理解和算法实现上都相对容易许多。

除此之外,Raft算法是现在分布式系统开发首选的共识算法,基本上全新的分布式系统选择了Raft算法。所以说掌握Raft算法是很有必要的,我们可以通过Raft算法,来探寻分布式系统的具体实现,也可以得心应手的处理绝大部分场景的容错和一致性需求,比如分布式配置系统,分布式NoSQL存储等等。

如果要用一句话概括Raft算法,我觉得是这样的:

从本质上说。Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

节点有哪些状态 ?

一个 Raft 集群包括若干服务器,以典型的 5 服务器集群举例。在任意的时间,每个服务器一定会处于以下三个状态中的一个:

  • Leader:负责发起心跳,响应客户端,创建日志,同步日志。
  • Candidate:Leader 选举过程中的临时角色,由 Follower 转化而来,发起投票参与竞选。
  • Follower:接受 Leader 的心跳和日志同步数据,投票给 Candidate。

在正常的情况下,只有一个服务器是 Leader,剩下的服务器是 Follower。Follower 是被动的,它们不会发送任何请求,只是响应来自 Leader 和 Candidate 的请求。

下图展示了这三个节点状态之间的变更情况

img

在讲解完领导人选举之后,会针对该图做出详细的解释。

什么是日志?

我们可以发现不同角色之间数据交互就是通过一种叫日志的东西来完成的。

日志由日志项组成,日志项是一种数据格式,它主要包含用户指定的数据,也就是指令,还包含一些附加信息,比如索引值,任期编号。

什么是term?

我们发现上图有一个单词叫做term

raft 算法将时间划分为任意长度的任期(term),任期用连续的数字表示,看作当前 term 号。每一个任期的开始都是一次选举,在选举开始时ÿ

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值