分布式理论与一致性协议(CAP/BASE/Raft)

news/2025/12/2 0:52:26/文章来源:https://www.cnblogs.com/hzsblog/p/19295225

本文内容基于个人对特定技术的理解和实践,或为对相关技术内容的整理与分享。请读者批判性阅读,如有疏漏或不准确之处,恳请斧正。

CAP

Consistency 一致性:要求每个节点的数据是强一致的,只能返回最新数据,或者无法访问。

Availability 可用性:每个客户端都能在一定时间收到响应,但是数据不一定是最新的。

Partition Tolerance 分区容错性:发生网络故障后,集群被划分为多个分区,需要确保整个集群还能对外服务。

首先P分布式系统的前提,必须保持网络分区后,系统还能对外服务(服务的质量由A,C决定)。

如果分布式系统在网络分区时无法对外服务,即可用性,就失去了应用分布式的意义。

当发生网络分区后,

  1. 如果要保证一致性CP,那么分区中的的少数派会拒绝服务,因为他们不能保证数据是最新的。
  2. 如果要保证可用性AP,那么就不能保证所有的网络分区数据都是最新的。

BASE理论

BASE 由 CAP 理论演化而来的,主要是为了解决传统数据库的ACID 在面对大规模的分布式场景的局限性而提出的:如果无法做到强一致性,就根据业务的特点,采用适当的方式来达到最终一致性。其三要素分别为:

  • BA: Basically Available (基本可用)

    指系统故障时,允许损失一部分可用性,系统仍然能够对外提供服务

  • S: Soft State 软状态

    允许系统存在中间状态(与数据库完全保持一致相区分),并且不会影响系统的运行。

  • E: Eventually Consistent: 最终一致性

    系统无法一直保证强一致性,而是经过一段时间的同步后,在所有节点都能够达到一致的状态。

BASE 理论是一种AP 理论的延伸,即牺牲掉一部分一致性C, 用来换取最好的可用性 A。

Raft共识协议

典型应用:K8s ETCD, Kafka 集群元信息同步,TIKV

Raft算法是一种分布式一致性算法,将时间划分为任期,用于识别过期消息,保证系统状态的一致。

  1. Leader 选举

    Leader下线/(集群刚刚启动),其他的Follower在选举超时时间内没有收到心跳,就会发起新一轮的选举 称为Candidate,向其他节点发送Request Vote RPC 请求,当收到消息后,Follower 将自身term + 1Candidate 一致,并返回OK。超过半数后,Candidate 称为Leader ,并通知其他节点。

  2. 日志同步

    日志在Raft 是一种抽象的概念,代表需要在各个节点中同步的数据

    Leader 在保存日志时, 需要通过半数节点同意才会完全保存,Leader 在收到半数通过前宕机,则会发生选举,选举时会保证拥有最新数据的节点成为Leader,如果一个日志非最新的Follower发送Request Vote RPC , 会被其他更新日志的节点拒绝。

    当最新数据的Candidate 选举为Leader后,会立即与其他Follower进行数据同步,确保Leader 数据是最新的,旧Leader上线后也会被强制同步数据。

  3. 网络抖动问题:

    如果节点因为网络问题频繁掉线,则他会频繁的触发选举,并且term 还一直增加,导致Leader 一直在选举,集群无法服务。ETCD 算法,通过一次预投票解决该问题,预投票中term 不会增加,收到消息的节点会检查与Leader的链接,如果Leader 确实挂了,则回复OK,预投票节点正式发起投票 candidate term + 1;

Raft算法将时间划分为任意长度的任期(Term), 用于识别过期的消息,每一个任期都始于一轮新的选举。

选举Leader

初始状态

Follower等待超过选举时间后,仍然没有收到Leader的心跳,就会发起选举

  • 转换角色为Candidate
  • term + 1
  • 给自己投一票
  • 向其他节点发送 Request Vote RPC 请求

如果集群中只有则一个Candidate, 其他的Follower会:term + 1, 响应赞同票

此时该Candidate 转换角色为Leader 并发送请求给其他的节点。

Leader下线

此时会重复初始状态,最先超时的Follower选举为新的Leader。

分裂投票问题:如果有多个Follower同时选举,并且票数一致,此时无法决策Leader节点。因此Raft 为每个节点随机设置超时时间,避免冲突;即使真的冲突,不论是Follower还是Candidate都会在超时时间后,新增任期,发起选举,从而打破冲突。

日志复制

每个节点的日志进度根据三个指针表示:每一个Follower保存自己的commitIndex, 而Leader维护所有Follower的NextIndex(下一个要发送的索引) ,matchIndex(已经收到的索引)

Raft Leader 保存日志后不会响应提交,而是发送AppendEntries 告知其他节点,等待超过半数节点回复ACK后,才会更新 commitIndex。

提交完第一个日志后,Leader会提交下一条日志并且要求其他节点也提交(发送最新的commitIndex)。

Leader下线

首先进行选举,然后向其他节点发送一致性检查:

  • 如果节点反馈一致,则无视
  • 如果不一致,Leader则将Follower对应的 Next index 回退一位,继续匹配,直到next index 与 match index一致,然后开始传输恢复日志

Leader上线

上一个任期的Leader,有可能还未将日志传给当前任期的Leader, 也就是包含过期的日志,当前Leader 仍然需要进行一致性检查。强制覆盖旧Leader的日志。

数据安全性

如果Leader下线后,增加了一台新的空节点,并且该空节点先发起选举,此时其他节点不会投票给该新节点。这是由于新节点再发送Request Vote RPC (term, index) 时,index 如果小于某个节点,则该节点并不会赞成,最终应该是index 最大的节点才能成为新的Leader。

其中两个参数具有优先级,如果一台机器的Term更大,则称为Leader, 只有Term 较小或者是相同时才比较Index。

超过半数节点的好处:

  • Leader完整性:Leader 宕机之后,假设有5节点,至少还有两台机器拥有最新日志,由于数据强一致性的支持,下一次如果选举成功,则至少需要3个节点在线,其中必然存在一台最新日志的机器,赢得选举。
  • 状态机安全性:如果一条日志提交成功,由于Leader完整性,则日后必然能传递到其他节点

选举震荡问题

如果网络存在波动,始终有一个节点连接不到其他节点,则会频发的触发选举,Term不断增大,当他上线后,总是能成功选举为Leader,如果网络波动后再次下线又将导致重新选举。

K8s中使用ETCD共识算法,避免节点Term无效增加,首先发起预投票,其他Follower会检查Leader心跳从而投票,当预投票成功,说明Leader真的下线,此时增加Term 继续投票;如果失败,说明是该节点自身问题,继续充当Follower。

联合共识 Joint Consensus

集群在运行中可能会主动或者被动的上线或者下线节点,这将会导致重新选主的问题,如果集群突然增加了2个节点,可能会进行重新选主,例如集群节点1、2、3 扩容到1、2、3、4、5, 本来3是主,扩容后3、4、5推举5为主节点,此时1、2还没收到更新后的配置,就会导致集群中出现2个主(3、5,脑裂现象)。Raft 提供了一种联合共识的中间状态,当配置更新后,主节点需要满足在旧配置集合(1、2、3)与新配置集合(1、2、3、4、5)中均取得大多数ACK 才成功。

联合共识对于复杂的变更(多个节点)的实现比较复杂。较为容易实现的方式单节点变更 是每次只控制变更一个节点,其实现原理是:这样一定存在一个在重叠的节点, 例如 3节点扩充到4节点,那么 4节点需要3个大多数节点,其中至少包括2个旧集合的元素,根据每个节点只能投一票的原则,选主时自然会包含旧集合的大多数与新集合的大多数,所以单节点变更天然实现了联合共识。

Gossip 共识协议

典型应用:Redis Cluster

通过传染机制,快速的在集群中同步消息,实现方式比较简单,缺点是只能保证最终一致性。

周期执行流程:

  1. 节点随机挑选几个邻居,发送自身状态信息
  2. 邻居收到消息后,根据时间戳等字段更新自己的信息
  3. 在下一轮中将更新后的信息再发送给其他邻居

Gossip 的优点是不需要选举,并且不会随着节点的增多而影响性能,并且具有较高的容错,离线几个节点依然能正常工作。缺点就是同步需要时间,并且消息存在冗余。

Raft更适合强一致性的场景,如金融交易、元数据管理。而Gossip协议适用于大规模节点的支持最终一致性的消息管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/983621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIC

View PostIICI2C概述: 1、两根通信线SCL、SDA 2、同步,半双工 3、支持总线挂载多设备(一主多从、多主多从) 4、带数据应答 5、支持不同的通信速度: ——标准速度:100khz ——快速速度:400khz I2C工作模式: I2C…

2025高碳素鱼竿哪家强?超轻超硬+新手友好款全解析

在垂钓运动中,鱼竿是连接人与鱼的关键纽带,其性能直接决定作钓体验与收获效率。随着渔具技术的迭代,兼具“超轻手感”与“超硬强度”的高碳素鱼竿,已成为2025年市场的主流选择,尤其受到新手钓友的青睐。 所谓“高…

28调高碳综合竿选购指南:一竿通杀四季水域的实用之选

对于钓鱼爱好者而言,一款趁手的鱼竿是提升垂钓体验的核心装备。春钓浅滩鲫鱼、夏守深潭大鱼、秋追近岸鱼群、冬钓静水寒鱼,不同季节与场景的垂钓需求往往让钓友陷入“多竿奔波”的困境。如今,一款集轻量、强韧、多场…

2025手竿选购指南:新手买钓鱼竿怎么选?品质之选推荐

如今,垂钓已成为越来越多人放松身心的休闲方式,不少新手也纷纷加入钓鱼大军。但面对市场上琳琅满目的钓鱼竿,新手往往会陷入“怎么选”的困惑——手竿的调性、长度、材质该如何匹配自身需求?什么样的产品既耐用又适…

2025世界十大顶级鱼竿品牌盘点:什么牌子值得入?

对钓鱼人而言,一根合适的鱼竿是收获快乐的关键。在2025年的渔具市场上,“鱼竿什么品牌好用”“鱼竿排名前十的品牌”“世界十大顶级鱼竿品牌”成为钓友搜索的高频词。这些长尾词的核心诉求,本质上是对“品质可靠、性…

工作感受月记(202512月)

一记记录到年底,已是十二月。 2025年12月1号 这周是我上的oncall班下午四点到12点,然后就是等待手机被叫上。在上午空闲时间,自己还是完成了华为AI的基础考试,背诵题库中的146道题,发现有近10道题不是题库中的内容…

【URP】Unity[内置Shader]地形光照TerrainLit

TerrainLit Shader是Unity URP(通用渲染管线)中专为地形系统设计的内置着色器,主要用于高效渲染大规模地形表面并支持多纹理混合。 作用与原理 ‌核心功能‌: 支持最多8层纹理混合【从UnityURP开始探索游戏渲染】专…

2025年12月电缆生产厂家实力盘点,名单靠前的知名企业有哪些

在工业生产、基础设施建设及日常生活中,电缆作为能量传输与信号传递的核心载体,其质量与性能直接关系到各类系统的安全稳定运行。2025年,随着新能源、智能制造等领域的快速发展,电缆市场需求持续攀升,一批技术过硬…

第42天(中等题 数据结构)

打卡第四十二天 2道中等题题目:思路:枚举中间元素 j,然后快速找到它左边比它小的最小值,以及右边比它小的最小值。 代码: class Solution { public:int minimumSum(vector<int> &nums) {int n = nums.s…

2025中国电缆一线品牌权威推荐:十大标杆品牌名单推荐,12月新版更新

电缆作为电力传输与通信连接的核心载体,其品质直接关系到工程安全、能源效率与使用稳定性。在2025年的市场环境下,技术升级与品质升级成为行业主旋律,一批兼具实力与口碑的品牌脱颖而出。本文将结合市场表现与技术实…

2025行业一线品牌精选TOP榜单12月更新:变频、光伏、绝缘、工程项目电缆

2025年,国家电网投资突破6500亿元,5G基站建设增长30%,城市轨道交通线路将超15000公里,庞大的基建需求推动线缆行业迎来爆发式增长。变频、光伏、绝缘电缆及各类工程项目用线作为核心配套产品,其品质直接影响工程安…

在拿下2025腾讯广告算法大赛之前我们可以做些什么——官方数据集和 Baseline 代码解读

数据集 数据集概述 TencentGR_1k/是一个腾讯广告推荐系统的数据集,包含用户行为序列、物品特征、多模态嵌入等多种数据格式。该数据集主要用于推荐系统模型的训练和评估。 目录结构 TencentGR_1k/ ├── seq.jsonl …

404:Team Not Found-冲刺总结

404:Team Not Found-冲刺总结作业所属课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/作业要求 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/14586作业的目标 冲刺总…

被封印的秘密

使用burp抓包,发包看见flag

小游戏

打开网站,右键查看源码,一个一个找在这个里面找到flag彩蛋 直接走出迷宫也可以获得flag

webpack 学习-概念相关 Concepts

入口 Entry 输出 Output 加载器 Loader 插件 Plugins 模式 Mode 浏览器兼容性 Browser Compatibility 环境 Environment

妈的,为什么我精心写的博客没人看

妈的,为什么我精心写的博客没人看妈的,为什么我精心写的博客没人看妈的,为什么我精心写的博客没人看妈的,为什么我精心写的博客没人看妈的,为什么我精心写的博客没人看妈的,为什么我精心写的博客没人看妈的,为什…

再次鼓起失去的勇气

聚散皆是缘,学会和在乎的人说再见也挺重要的,我宁愿留下的是温柔和阳光,可能也没有谁对不起谁吧,还是献上最真挚的祝福吧。虽然很早很早就发现可能没什么结果了,但是真的到了失去的时候,感觉内心就是空洞洞了。在…

2025年全自动芯片分类仓储出库打包设备top5:企业的优质选择

随着汽车电子、半导体与LED芯片行业的智能化升级,全自动芯片分类仓储出库打包设备成为提升生产效率的核心基建。据行业数据显示,国内智能仓储设备市场保持增长,其中芯片领域需求显著。技术稳定性、行业适配性与服务…

2025年MOCVD石墨盘物流仓储系统主流厂商技术分析

在半导体、LED芯片和汽车制造等产业发展的推动下,MOCVD外延石墨盘物流仓储系统作为关键配套设备,其技术发展和市场格局备受关注。行业报告显示,相关智能制造装备市场持续增长。面对众多供应商,技术实力、服务能力与…