Raft 分布式一致性算法

分布式共识算法 —— Raft详解 文章目录分布式共识算法顺序一致性线性一致性因果一致性Raft 算法原理概览选举机制参考文献 分布式共识算法 首先我们先明确这个问题:为什么需要分布式共识算法? 这就要从当前的分布式系统设计的缺陷来看了,假设我们的集群现在有两个客户端和三个服务端,如下图: 在这个分布式系统的设计中,往往要满足CAP理论,而分布式共识算法解决的就是CAP理论中的一致性问题。整个一致性问题分为三种问题: 顺序一致性 线性一致性 因果一致性 顺序一致性 顺序一致性是1979年Lamport 在论文《How to Make a 阅读详情

在一个由 Raft 协议组织的集群中有三类角色:

  1. Leader(领袖)
  2. Follower(群众)
  3. Candidate(候选人)

就像一个民主社会,领袖由民众投票选出。刚开始没有领袖,所有集群中的参与者都是群众,那么首先开启一轮大选,在大选期间所有群众都能参与竞选,这时所有群众的角色就变成了候选人,民主投票选出领袖后就开始了这届领袖的任期,然后选举结束,所有除领袖的候选人又变回群众角色服从领袖领导。这里提到一个概念「任期」,用术语 Term 表达。关于 Raft 协议的核心概念和术语就这么多而且和现实民主制度非常匹配,所以很容易理解。三类角色的变迁图如下,结合后面的选举过程来看很容易理解。


在极简的思维下,一个最小的 Raft 民主集群需要三个参与者(如下图:A、B、C),这样才可能投出多数票。初始状态 ABC 都是 Follower,然后发起选举这时有三种可能情形发生。下图中前二种都能选出 Leader,第三种则表明本轮投票无效(Split Votes),每方都投给了自己,结果没有任何一方获得多数票。之后每个参与方随机休息一阵(Election Timeout)重新发起投票直到一方获得多数票。这里的关键就是随机 timeout,最先从 timeout 中恢复发起投票的一方向还在 timeout 中的另外两方请求投票,这时它们就只能投给对方了,很快达成一致。


选出 Leader 后,Leader 通过定期向所有 Follower 发送心跳信息维持其统治。若 Follower 一段时间未收到 Leader 的心跳则认为 Leader 可能已经挂了再次发起选主过程。

Leader 节点对一致性的影响

Raft 协议强依赖 Leader 节点的可用性来确保集群数据的一致性。数据的流向只能从 Leader 节点向 Follower 节点转移。当 Client 向集群 Leader 节点提交数据后,Leader 节点接收到的数据处于未提交状态(Uncommitted),接着 Leader 节点会并发向所有 Follower 节点复制数据并等待接收响应,确保至少集群中超过半数节点已接收到数据后再向 Client 确认数据已接收。一旦向 Client 发出数据接收 Ack 响应后,表明此时数据状态进入已提交(Committed),Leader 节点再向 Follower 节点发通知告知该数据状态已提交。


在这个过程中,主节点可能在任意阶段挂掉,看下 Raft 协议如何针对不同阶段保障数据一致性的。

1. 数据到达 Leader 节点前

这个阶段 Leader 挂掉不影响一致性,不多说。


2. 数据到达 Leader 节点,但未复制到 Follower 节点

这个阶段 Leader 挂掉,数据属于未提交状态,Client 不会收到 Ack 会认为超时失败可安全发起重试。Follower 节点上没有该数据,重新选主后 Client 重试重新提交可成功。原来的 Leader 节点恢复后作为 Follower 加入集群重新从当前任期的新 Leader 处同步数据,强制保持和 Leader 数据一致。


3. 数据到达 Leader 节点,成功复制到 Follower 所有节点,但还未向 Leader 响应接收

这个阶段 Leader 挂掉,虽然数据在 Follower 节点处于未提交状态(Uncommitted)但保持一致,重新选出 Leader 后可完成数据提交,此时 Client 由于不知到底提交成功没有,可重试提交。针对这种情况 Raft 要求 RPC 请求实现幂等性,也就是要实现内部去重机制。


4. 数据到达 Leader 节点,成功复制到 Follower 部分节点,但还未向 Leader 响应接收

这个阶段 Leader 挂掉,数据在 Follower 节点处于未提交状态(Uncommitted)且不一致,Raft 协议要求投票只能投给拥有最新数据的节点。所以拥有最新数据的节点会被选为 Leader 再强制同步数据到 Follower,数据不会丢失并最终一致。


5. 数据到达 Leader 节点,成功复制到 Follower 所有或多数节点,数据在 Leader 处于已提交状态,但在 Follower 处于未提交状态

这个阶段 Leader 挂掉,重新选出新 Leader 后的处理流程和阶段 3 一样。


6. 数据到达 Leader 节点,成功复制到 Follower 所有或多数节点,数据在所有节点都处于已提交状态,但还未响应 Client

这个阶段 Leader 挂掉,Cluster 内部数据其实已经是一致的,Client 重复重试基于幂等策略对一致性无影响。算法以正确性、高效性、简洁性作为主要设计目标。
虽然这些都是很有价值的目标,但这些目标都不会达成直到开发者写出一个可用的实现。
所以我们相信可理解性同样重要。


7. 网络分区导致的脑裂情况,出现双 Leader

网络分区将原先的 Leader 节点和 Follower 节点分隔开,Follower 收不到 Leader 的心跳将发起选举产生新的 Leader。这时就产生了双 Leader,原先的 Leader 独自在一个区,向它提交数据不可能复制到多数节点所以永远提交不成功。向新的 Leader 提交数据可以提交成功,网络恢复后旧的 Leader 发现集群中有更新任期(Term)的新 Leader 则自动降级为 Follower 并从新 Leader 处同步数据达成集群数据一致。


总结:


分布式一致性算法Raft详解 分布式存储系统通常通过维护多个副本来进行fault-tolerance,提高系统的availability,带来的代价就是分布式存储系统的核心问题之一:维护多个副本的一致性一致性协议就是用来干这事的,即使在部分副本宕机的情况下。Raft是一种较容易理解的一致性协议。一致性协议通常基于replicated state machines,即所有结点都从同一个state出发,都经过同样的一些操作序列, 阅读详情

相关推荐

Demo2Reward:用人类演示动态优化VLM奖励模型提示

多模态大模型(VLM)的奖励建模正面临核心瓶颈——静态提示导致语义鸿沟与泛化失效。其本质是将人类判断标准固化为不可更新的文本模板,使奖励信号脱离真实任务意图。Demo2Reward提出范式级改进:以结构化人类演示为元信号,驱动提示权重连续优化,实现从‘结果打分’到‘过程理解’的跃迁。该方法不修改VLM主干,却显著提升RLHF收敛效率与OOD鲁棒性,在医疗、工业质检等场景验证了跨任务迁移与热修复能力。它重新定义了提示工程的技术价值:不是前端微调,而是奖励系统的认知校准基础设施。

weixin_34302798的博客 379

分布式数据库之共识算法Raft协议介绍

一、背景概述 在分布式系统中,通常需要多副本进行备份,但是副本的同步一致一直是一个比较棘手的问题。Raft算法是一个能够代替Paxos的分布式一致性算法,能够管理日志复制(replicated log),他的性能与Paxos不相上下,但是却比Paxos更容易理解。 Paxos存在的问题: 难以理解(不过《Paxos Made Simple》比较容易理解)。一是因为paxos选择了single-degree Paxos作为基础,二是因为Multi-Paxos 的合成规则又增加了许多复杂性。 不能为构建

qq_34924156的博客 2177

从图片到3D模型:用Tripo+Unity打造AI建模流水线(避坑指南)

本文详细介绍了如何利用Tripo和Unity构建AI驱动的3D建模流水线,从图片到3D模型的高效转换。通过文生模型和图生模型的双模系统,开发者可以大幅提升建模效率,适用于游戏开发和数字内容创作。文章还提供了环境配置、图片预处理、批量生成等实用技巧,帮助开发者避开常见陷阱。

weixin_27024175的博客 555

分布式理论——Raft算法学习总结

Raft作为目前市面上重要分布式理论背景,有较多实际场景,比如redis集群、分布式数据库,都有Raft算法影子。Raft算法将共识问题分解成了多个相对独立的子问题,从而简化了共识的实现。其主要流程包括领导者选举以及日志复制,集群先选举出leader,然后leader负责复制、提交日志。

m0_73756442的博客 4053

浅谈 Raft 分布式一致性协议|图解 Raft

本篇文章将模拟一个KV数据读写服务,从提供单一节点读写服务,到结合分布式一致性协议(Raft)后,逐步扩展为一个分布式的,满足一致性读写需求的读写服务的过程。

qq_41468830的博客 1661

分布式理论与算法

注意:本文参考 CAP & BASE理论 | JavaGuide Paxos 算法 | JavaGuide Raft 算法 | JavaGuide CAP理论 CAP 理论/定理起源于 2000年,由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出,因此 CAP定理又被称作 布鲁尔定理(Brewer’s theorem) 2年后,麻省理工学院的Seth Gilbert和Nancy Lynch 发表了布鲁尔猜想的证明,CAP理论正式成为分布式领..

今天吃了吗的博客 1091

分布式一致性算法——Paxos 和 Raft 算法

本文主要围绕Paxos算法Raft算法进行了讨论。我们首先介绍了分布式一致性算法的概念和必要性,然后分别从算法基本原理、角色和状态、基本流程、选举过程、优缺点等方面详细介绍了Paxos算法Raft算法。同时,我们也对这两种算法进行了比较和区分,并讨论了如何选择合适的算法以满足不同场景下的需求和限制。为了更加清晰地描述算法的流程,我们也对Paxos算法Raft算法的基本流程和选举过程进行了图形化展示。本文将对从事分布式系统相关工作的人员有所帮助,有助于更好地理解分布式一致性算法

Shockang的博客 6656

分布式一致性协议:Raft算法详解

分布式系统中,有很多复杂的理论,从CAP理论到BASE理论,我们不断的在可用性以及一致性之间做出抉择,每一部分都相当复杂,就分布式一致性而言,又有许多协议,从2PC到3PC再到paxos算法,到ZAB协议,再到Raft算法。本篇文章主要介绍Raft算法的实现过程,最近有空看了下国外的论文,这里做个简单的总结,本人水平有限,如有问题,欢迎批评指正。 在介绍Raft算法之前,你肯定听说过Paxo...

不清不慎的博客 1万+

分布式一致性算法 Raft

Raft 算法是共识算法(也叫一致性算法)的一种,用来解决分布式一致性问题,主要作为 Paxos 的替代算法。文章有一万多个字,对算法的主要内容进行了整理,加上了对关键问题的消化和理解,希望对大家学习 Raft 算法能提供一些帮助。

_山月 1724

分布式一致性raft算法

文章目录一句话简介ratf算法分布式一致性的难点CAP理论分布式一致性Raft算法选举过程新官上任根正苗红仍需努力 一句话简介ratf算法 没听过不要紧,我原先也没听过。 Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。 熟悉吗?redis的哨兵用的就是这一套,不过哨兵简化了一些部分,提升了运行效率,降低了一致性,保证了最终一致性。 晕吗?晕就完蛋了。 分布式一致性的难点 1、时钟不一致 如果两条命令,分别为 A、B,被发往两个节点。由于网络延迟等原因,导致一个节点先.

看,未来的博客 1907

分布式一致性算法Paxos、Raft 及 Zookeeper ZAB

分布式一致性算法是用于在分布式系统中确保数据一致性的一类算法。在分布式计算环境中,数据通常会分布在多个节点或副本中,并且这些节点可能由于网络延迟、故障或其他原因而导致数据的不一致。因此,分布式一致性算法的目标是确保分布式系统中的所有节点最终都能达到一致的状态。分布式一致性算法可以分为两种主要类型:强一致性和弱一致性。强一致性算法(Strong Consistency):强一致性算法保证在任何时刻,系统中的任意节点都可以看到相同的数据副本,并且对数据的任何操作都会立即反映在系统的其他部分。

不积跬步,无以至千里 2597

分布式一致性算法-Raft翻译和注解

Raft算法是一种分布式系统中的一致性算法,提供和Paxos相同级别的功能和性能,2014年首次发表。Raft因其易于理解和实现的特性,已经被广泛应用于多种分布式系统中,包括分布式数据库、分布式文件系统、服务发现系统等。

Mr.H的专栏 1297

Raft 分布式一致性算法实现指南

Raft 分布式一致性算法实现指南 项目介绍 Raft 是一个用于实现分布式系统中领导者选举和日志复制的一致性算法,由 Dieogo Ongaro 和 John Ousterhout 提出,以清晰的概念和易于理解而著称。shaj13/raft 是该算法的一个开源实现,提供了在实际项目中集成和研究的基础框架。该项目遵循 Raft 算法的核心原则,支持多种编程语言环境,帮助开发者理解和实施分布式一致性...

gitblog_00657的博客 1061

自己动手,从零开始编写Raft算法来实现分布式一致性算法分布式一致性算法开发实战】

本篇文章分析了分布式一致性Raft算法以及Raft算法所依赖的理论,在此基础上讲解并实现Raft算法以及基于Raft算法的KV服务。通过阅读本篇内容,你可以深入了解Raft算法的运行机制,也可以学习到如何正确地实现Raft

程序员高级码农的博客 1173

raft算法_理解分布式一致性Raft算法

作者:吴纹羽https://www.cnblogs.com/mokafamily/p/11303534.html永远绕不开的CAP定理出于可用性及负载方面考虑,一个分布式系统中数据必然不会只存在于一台机器,一致性简单地说就是分布式系统中的各个部分保持数据一致但让数据保持一致往往并不像看上去那么简单,假设我们有两台机器A与B,这时A更新了数据,A需要将更新的指令同步到B,如果A到B网络传输...

weixin_39616003的博客 316

谈一谈raft分布式一致性算法

谈一谈raft分布式一致性算法1、什么是分布式一致性2、raft算法应用场景3、raft算法4、总结 本文讲解Raft分布式一致性理论算法,阅读了raft算法论文,帮助后面大家更好的理解Raft分布式一致性算法。 1、什么是分布式一致性 分布式一致性问题,简单的说,就是在一个或多个进程提议了一个值应当是什么,使系统中所有进程对这个值达成一致意见。它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Cons

一群专业码农的笔记本 827

分布式理论基础——Raft算法

从上图可以看出,不管原集群节点数量是奇数还是偶数,也不管是在原集群上新增一个节点还是删除一个节点,在集群的节点数变更之后,原集群的多数派和新集群的多数派一定存在交集,那么在同一个任期内,原集群C_old和新集群C_new中交集的那个节点只会进行一次投票,要么投票给C_old,要么投票给C_new,这样就避免同一个任期出现了两个Leader的现象。阶段b:S1宕机,S5选举获得了S3、S4、S5三票,当选任期(term)为3的leader,收到客户端请求后保存了日志项(3,2),尚未复制给任何节点。

Atticus的博客 1815

深度解析 Raft 分布式一致性协议

对于我们的KV服务,要像操作一台机器一样,对用户来说在写入成功后,就应该能读到最近写入的值,而不关心具体底层是如何分布式实现。最终一致性:读取可能暂时读不到但是总会读到线性一致性:最严格,线性时间执行(写完KV确保就能读到),是最理想中的状态选主(Leader election)就是在分布式系统内抉择出一个主节点来负责一些特定的工作。在执行了选主过程后,集群中每个节点都会识别出一个特定的、唯一的节点作为 leader。

听得到微笑的博客 6615

分布式Raft原理详解,从不同角色视角分析相关状态

CAP : 一个分布式系统不可能同时满足一致性 (C: Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的两项 分布式存储架构中,设计共识算法要考虑在一个复制集群中,所有节点按照确认的顺序处理命令,最终结果是在客户端看来,一个复制集群表现的像一个单状态机一样一致。为了保证多个节点顺序一致,需要处理如下问题: - 非拜占庭错误,包含网络延迟,分区,丢包,重复和乱序 - 只要多数节点(quorum)

李姓门徒 1871

一文彻底搞懂Raft算法,看这篇就够了!!!

分布式一致性是指在分布式环境中对某个副本数据进行更新操作时,必须确保其他副本也会更新,避免不同副本数据不一致。在大量客户端并发请求读/写的情况下,维护数据多副本的一致性无疑非常重要,且富有挑战。因此,分布式一致性在我们生产环境中显得尤为重要。数据不能存在单个节点(主机)上,否则可能出现单点故障。多个节点(主机)需要保证具有相同的数据。

很多时候犯错都是在不知情的情况下发生的 9912

电气类的visio模版元件库

Visio是一款由Microsoft开发的专业绘图软件,广泛用于创建流程图、组织结构图、网络图、电路图等多种类型的图表。在电气工程领域,Visio的元件库尤其受到青睐,因为它提供了丰富的电气符号和元件,使得工程师能够快速、准确地绘制出专业级别的电气系统图。“电气类的visio模版元件库”是专门为电气工程师和设计师设计的一套资源集合,它包含了各种电气设备、组件和电路符号。这些模板和元件库可以帮助用户节省大量时间,无需从头开始绘制每个细节,只需简单拖放即可构建复杂的电气系统模型。元件库通常包括以下几大类内容:1. **电源与发电机**:如交流发电机、直流发电机、电池、电源插座等,这些都是构成电力系统的基础元素。2. **开关与控制器**:如断路器、接触器、继电器、开关、熔断器等,它们是控制电路通断和保护设备的关键部件。3. **电机与驱动器**:包括电动机、伺服电机、步进电机以及相关的变频器和驱动器,这些都是自动化系统中的核心组件。4. **传感器与执行器**:如压力传感器、温度传感器、光电开关、电磁阀等,它们负责检测和响应环境变化。5. **电路元件**:包括电阻、电容、电感、二极管、晶体管、集成电路等基本电子元件,用于表示电路原理。6. **连接件与端子**:如导线、接线端子、插头插座,用于连接和固定电气元件。7. **配电与布线**:包括配电盘、电缆桥架、接线盒等,它们是电气系统安装和布局的一部分。8. **自动化与PLC**:可编程逻辑控制器(PLC)及其输入输出模块,是工业自动化中的重要组成部分。9. **照明与安全**:如灯具、开关、安全标志,确保工作环境的照明和安全。

上一篇: 深入探索SpringApplication执行流程
下一篇: etcd集群启动参数说明及注意事项
嫁狗狮
博客等级 码龄18年 10粉丝 58原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值