当前位置: 首页 > news >正文

架构思维:从CAP到PACELC到BASE

文章目录

  • Pre
  • 概述
  • 问题
  • CAP
  • PACELC
  • BASE
  • BASE 理论的最佳实践
  • 小结

在这里插入图片描述

Pre

深入理解分布式技术 - 理论基石 CAP

分布式 - 从CAP到PACELC_分布式系统的一致性与可用性权衡

Nacos架构与原理 - CAP一致性协议 ( Raft & Distro)

分布式协同 - 分布式事务一二事儿

架构思维:分布式数据存储_从MySQL复制到NoSQL的CAP原理


概述

CAP 理论指的是什么?

C(Consistency)是数据一致性、A(Availability)是服务可用性、P(Partition tolerance)是分区容错性。C、A、P 只能同时满足两个目标,而由于在分布式系统中,P 是必须要保留的,所以要在 C 和 A 间进行取舍。假如要保证服务的可用性,就选择 AP 模型,而要保证一致性的话,就选择 CP 模型。


问题

为了数据容灾,我们会做数据的主从备份,那么主从节点的数据一致性对调用端有什么影响呢?


CAP

举个例子: 现在有一个分布式系统 A,它有一个副本 A1,在正常情况下,客户端 Client 写数据到系统 A,然后数据从 A 节点同步到 A1 节点,再返回给 Client 成功状态。

在这里插入图片描述

这时,客户端 Client 从任何节点 A 或 A1 读取数据,都能读取到最新写入的数据,说明 A 和 A1 的数据是一致的,并且 A 和 A1 也都是可用的。

但由于网络是不可靠的,节点 A 和 A1 的网络随时会因为中断而出现分区。所谓网络分区就是由于网络不通导致节点 A 和 A1 被隔离在不同的网络子集中,此时节点 A 的数据就不能及时同步到节点 A1 中了。

在这里插入图片描述

在分布式系统中,由于网络问题导致的网络分区是常态。也就是说出现网络分区时,根据 CAP 理论,需要在 A 和 C 中进行取舍,即要么保证系统的可用性,要么保证数据一致性。


PACELC

https://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf
在这里插入图片描述

要注意了,上面的例子有个大前提,就是系统出现了网络分区,但实际情况是,在绝大多数时间里并不存在网络分区(网络不会经常出现问题)。那么还要进行三选二吗(CP 或者 AP)?

其实,不同的分布式系统要根据业务场景和业务需求在 CAP 三者中进行权衡。CAP 理论用于指导在系统设计时需要衡量的因素,而非进行绝对地选择

当网络没有出现分区时,CAP 理论并没有给出衡量 A 和 C 的因素,但如果你做过实际的分布式系统设计,一定会发现系统数据同步的时延(Latency),即例子中节点 A 同步数据到节点 A1 的时间才是衡量 A 和 C 最重要的因素,此时就不会有绝对的 AP 模型还是 CP 模型了,而是源于对实际业务场景的综合考量。

因此,才会有如 PACELC 这样的新模型优化原有的 CAP 理论,理论指导实践,实践优化理论。根据 PACELC 模型的定义,如果有网络分区产生,系统就必须在 A 和 C 之间取得平衡,否则(Else,即 PACELC 中的 E)当系统运行在无网络分区情况下,系统需要在 L(延迟)和 C 之间取得平衡。

在这里插入图片描述


BASE

布式的设计方案是数据一致性和系统可用性的权衡,并不是非此即彼,这一点尤为重要。所以即使无法做到强一致性(简单来讲强一致性就是在任何时刻所有的用户查询到的数据都是最新的),也可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

这时就要引出 BASE 理论,它是 CAP 理论的延伸。BASE 是 Basically Available(基本可用)、Soft State(软状态)和 Eventually Consistent(最终一致性)三个单词的简写,作用是保证系统的可用性,然后通过最终一致性来代替强一致性,它是目前分布式系统设计中最具指导意义的经验总结。

BASE 理论的最佳实践

那么在实际项目中,如何通过 BASE 理论来指导设计实践呢?

BASE 中的基本可用指的是保障核心功能的基本可用,其实是做了“可用性”方面的妥协,比如:

  • 系统访问压力较大的时候,关闭次要功能的展示,从而保证主流程的可用性,这也是我们常说的服务降级;

  • 为了错开高峰期,网站会将预售商品的支付时间延后十到二十分钟,这就是流量削峰;

  • 在抢购商品的时候,往往会在队列中等待处理,这也是常用的延迟队列。

软状态和最终一致性指的是允许系统中的数据存在中间状态,这同样是为了系统可用性而牺牲一段时间窗内的数据一致性,从而保证最终的数据一致性的做法

目前这种处理数据的方式几乎成了互联网的标配设计模式,最经典的例子是在用户下单的时候不需要真正地扣减库存,而是仅在前台计个数,然后通过异步任务在后台批量处理。


小结

CAP、PACELC和BASE是分布式系统中的重要理论模型,分别从不同角度描述了系统设计中的权衡与原则。

CAP理论指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得,最多只能同时满足两项。例如,在网络分区发生时,系统需要在一致性和可用性之间做出选择。

PACELC理论是对CAP的扩展,进一步细化了在无分区(E)和有分区(P)情况下的权衡。它提出,在无分区时,系统需要在延迟(Latency)和一致性(Consistency)之间选择;在有分区时,则需要在可用性(Availability)和一致性(Consistency)之间选择。

BASE理论则强调分布式系统的设计应追求基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventual Consistency)。它通过放宽对强一致性的要求,提升系统的可用性和可扩展性。

这些理论为分布式系统的设计与优化提供了重要指导,帮助我们在不同场景下做出合理权衡。

在这里插入图片描述

相关文章:

  • :ref 和 this.$refs 的区别及 $ 的作用
  • 机器学习在自然语言处理中的应用与实践
  • c++高精度减法
  • @maptalks/gl-layers中的VectorTileLayer的Symbol样式文档
  • 对该Django ORM查询的改进方案及详细说明
  • 表达式树和编译原理【10道经典面试题】(中英对照)
  • 机器人前沿技术的发展与展望
  • 《Manus学习手册》.pdf(文末附完整版下载地址)
  • 二叉树的前,中,后序遍历
  • 前端 -- 计算机图形学基础:光与三角形面(Mesh)求交
  • 系统转换、系统维护、净室软件工程、构件软件工程(高软51)
  • 【C++教程】bool类型
  • Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
  • 【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
  • MySQL中怎么分析性能?
  • ollama 设置环境变量OLLAMA_HOST允许外部访问
  • 深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
  • 【图像处理基石】ISP中的TNR算法详解:原理、实现与优化
  • 【经验总结】AUTOSAR架构下NvMBlock无效问题分析
  • 替代-UX设计师
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 美财长称关税战升级的责任在中方,外交部:关税战、贸易战没有赢家
  • 初步结果显示加拿大自由党赢得大选,外交部回应
  • 民生访谈|规范放生活动、提升供水品质……上海将有这些举措
  • 上海112位全国劳动模范和先进工作者接受表彰,樊振东榜上有名
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话