【软件设计原则】系统设计面试基础:CAP 与 PACELC

news2024/9/22 5:36:22

什么是 CAP 定理以及 PACELC 如何扩展它?

c02813d22185b818303fb324cc30e4d0.png

在分布式系统中,可能会发生不同类型的故障,例如,服务器可能会崩溃或永久故障,磁盘可能会损坏导致数据丢失,或者网络连接可能会丢失,导致系统的一部分无法访问。分布式系统如何对自身进行建模以从不同的可用资源中获得最大收益?帮助分布式系统在各种分布式特性之间选择理想平衡的指导原则是什么?
检查 Grokking the System Design Interview 以了解重要的分布式系统概念。


CAP 定理


CAP 定理指出,分布式系统不可能同时提供以下所有三个理想属性:

  • 一致性(C):所有节点同时看到相同的数据。这意味着用户可以读取或写入系统中的任何节点并接收相同的数据。它相当于拥有一个最新的数据副本。

  • 可用性(A):可用性是指系统中非故障节点收到的每个请求都必须产生响应。即使发生严重的网络故障,每个请求也必须终止。简单来说,可用性是指即使系统中的一个或多个节点出现故障,系统仍保持可访问性的能力。

  • 分区容差(P):分区是系统中任意两个节点之间的通信中断(或网络故障),即两个节点都已启动但无法相互通信。即使系统中有分区,分区容错系统也会继续运行。这样的系统可以承受任何不会导致整个网络故障的网络故障。数据在节点和网络的组合之间得到充分复制,以使系统在间歇性中断时保持正常运行。

根据 CAP 定理,任何分布式系统都需要从三个属性中选择两个。三个选项是 CA、CP 和 AP。但是,CA 并不是一个真正的连贯选项,因为在网络分区的情况下,不能容忍分区的系统将被迫放弃一致性或可用性。因此,该定理实际上可以表述为:在存在网络分区的情况下,分布式系统必须选择一致性或可用性。

607399e4bc726ed3760f5bb5671b3eaf.png

CAP 定理的证明


我们无法构建一个持续可用、顺序一致且能容忍任何分区故障的通用数据存储。我们只能构建具有这三个属性中的任意两个的系统。因为,为了保持一致,所有节点都应该以相同的顺序看到相同的更新集。但是,如果网络丢失了一个分区,则一个分区中的更新可能无法在客户端读取最新分区后从过期分区读取之前到达其他分区。应对这种可能性的唯一方法是停止为来自过期分区的请求提供服务,但随后该服务不再 100% 可用。


CAP 定理缺少什么?


我们无法避免分布式系统中的分区;因此,如上所述,根据 CAP 定理,分布式系统应该在一致性或可用性之间进行选择。 ACID(原子性、一致性、隔离性、持久性)数据库,例如 MySQL、Oracle 和 Microsoft SQL Server 等 RDBMS,选择一致性(如果无法与对等方检查,则拒绝响应)。相比之下,BASE(基本可用、软状态、最终一致)数据库,例如 MongoDB、Cassandra 和 Redis 等 NoSQL 数据库,选择了可用性(响应本地数据,但不确保它是最新的)。
CAP 定理沉默的一个地方是当没有网络分区时会发生什么?在没有分区的情况下,分布式系统有哪些选择?


救援 PACELC 定理


PACELC 定理指出,在复制数据的系统中:
如果存在分区(“P”),分布式系统可以在可用性和一致性(即“A”和“C”)之间进行权衡;
else(‘E’),当系统在没有分区的情况下正常运行时,系统可以在延迟(‘L’)和一致性(‘C’)之间进行权衡。

24eb86dee515484053babe1ba06dadb3.png

定理的第一部分(PAC)与CAP定理相同,ELC是扩展。整篇论文假设我们通过复制来保持高可用性。因此,当出现故障时,CAP 定理占上风。但如果不是,我们仍然需要考虑复制系统的一致性和延迟之间的权衡。


例子

  • Dynamo 和 Cassandra 是 PA/EL 系统:它们在发生分区时选择可用性而不是一致性;否则,他们会选择较低的延迟。

  • BigTable 和 HBase 是 PC/EC 系统:它们总是会选择一致性,放弃可用性和更低的延迟。

  • MongoDB 可以被认为是 PA/EC(默认配置):MongoDB 在主要/次要配置中工作。在默认配置中,所有写入和读取都在主节点上执行。由于所有复制都是异步完成的(从主节点到辅助节点),当存在主节点丢失或在少数节点上被隔离的网络分区时,可能会丢失未复制到辅助节点的数据,因此会丢失分区期间的一致性。因此,可以得出结论,在网络分区的情况下,MongoDB 选择可用性但其他方面保证一致性。或者,当 MongoDB 配置为在多数副本上写入并从主副本上读取时,它可以归类为 PC/EC。


结论


CAP 和 PACELC 定理帮助分布式系统在各种分布式特性(如一致性、可用性、分区容限和延迟)之间选择理想的平衡。请查看 Grokking the System Design Interview 和 Grokking the Advanced System Design Interview 以获得一些系统设计基础知识的好例子。

本文 :https://architect.pub/system-design-interview-basics-cap-vs-pacelc
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
c444a2c44985be0621c1ca06950fef73.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

77acd094b7e6356f9def87106bd3e994.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

0dc54727304d03d840fe843a67bd43ba.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

51bd6d65b7ad97dda8fdfa4f1bafa83b.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

ad0dc1da2c75a6ce5b3dfc92f53c0f7c.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

d29389918e59eee531644b8a5ec2c3fb.jpeg

抖音【cea_cio】超级架构师

430d5066c3a87f8f64964230583c0c7d.jpeg

快手【cea_cio_cto】超级架构师

6cc46cc83b841c21661252e2e2614a7f.jpeg

小红书【cea_csa_cto】超级架构师

04742e86c9042bd11927abca1ff43ca6.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

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

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

相关文章

在openFoam中创建cellZone

简介 openFoam的cellZone概念十分重要,可以给一个区域的单元命名,广泛应用于设置初始场(如气、液两相流的初始VOF分布) 而cellZone通常由cellSet转化而来,本文将介绍使用cellSet定义cellZone的方法 方法 在项目的sy…

【JavaWeb】博客系统的前端页面设计

目录 前言 1、页面组成 2、实现博客列表页 🍂设置背景图片 🍂设置导航栏 🍂实现版心 🍃实现个人信息 🍃实现博客列表 3、实现博客详情页 4、编写博客的登录页 5、博客编辑页面 🍂实现标题的编辑区 …

Python学习笔记-基于socket基础的http服务端程序

通过HTTP协议可以进行通信可以规范化的进行网络间通信。下面技术第一个http服务器小程序。简单的记录第一个试手程序。 1.http通信的基本流程 整个流程对应四层网络架构:应用层、传输层、网络层、链路层。有的部分已经封装,不需要我们再行处理。 2.服务…

哈夫曼树-算法

一、霍夫曼树基本概念: 路径:从树的一个结点到另外一个结点的分支构成这两个结点的路径 结点的长度:两节点之间路径的分支数 树的路径长度:从树根到每一个结点的长度之和,记做TL: 结点数目相同的二叉树中&#xff0…

LwIP系列(5):TCP 3次握手+4次挥手+状态机转换

前言 TCP的3次握手、4次挥手以及TCP状态机,是TCP的核心概念,我们在分析LwIp中TCP相关代码流程,也需要熟悉这些流程,本文就详细介绍这些概念。 TCP 3次握手、应用数据交互、4次挥手完整流程 TCP 为什么是3次握手,而不…

51单片机--动态数码管显示

文章目录 LED数码管一位晶体管多位一体数码管单片机上的数码管原理 静态数码管显示动态数码管显示 LED数码管 简介:LED数码管是一种常用的数字显示设备。它由多个发光二极(LED)封装在一起,形成“8”字型的器件。数码管通常由7段LE…

【从0开始离线数仓项目】——新能源汽车数仓项目介绍

目录 1、数据仓库概念 2、项目需求及架构设计 3、集群资源规划设计 4、车辆日志字段说明 1、数据仓库概念 数据仓库(Data Warehouse)是为企业提供数据支持,用以协助企业制定决策、改进业务流程和提高产品质量等方面的工具。它可以接收多种…

时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warnin…

Dart - dill文件序列化为可读文本(续)

文章目录 前言开发环境app.dill文件DEPS文件最后 前言 对前文Dart - dill文件序列化为可读文本做一些补充。 开发环境 macOS: 13.4Dart: 3.0.5Flutter: 3.10.5 app.dill文件 因为Flutter项目编译后会自动生成app.dill文件(位于项目根目录下的.dart_tool/flutte…

基于PyQt5的桌面图像调试仿真平台开发(9)去噪

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

Detect-SLAM论文翻译

Detect-SLAM:实现目标检测与SLAM的互利共赢 摘要 - 尽管近年来在SLAM和目标检测方面取得了重大进展,但这两项任务仍然存在一系列挑战,例如动态环境中的SLAM和复杂环境中的目标检测。为了解决这些挑战,我们提出了一种新的机器人视觉系统&…

UE使用UnLua(一)

一、概述 Unlua是个功能丰富的插件,可以在UE中进行蓝图绑定,在Lua中进行逻辑开发,使用Lua热更新的特性,可以快速开发迭代表层逻辑 二、UnLua环境 首先下载UnLua的插件包,点击下载,不会吧不会吧还有人打不…

基于simulink使用前景检测跟踪汽车(附源码)

一、前言 此示例基于simulink演示如何使用高斯混合模型 (GMM) 检测和计数视频序列中的汽车。 二、模型 下图显示了使用前景检测跟踪汽车模型: 三、检测和跟踪结果 检测和计数汽车可用于分析交通模式。检测也是执行更复杂的任务&#xff0…

【Linux】C++项目实战-实际应用

目录 典型IO的两个阶段(网络IO)Linux上的五种IO模型1.阻塞 blocking2、非阻塞3、IO复用4、信号驱动5、异步 Web ServerHTTP协议(应用层的协议)简介概述工作原理HTTP请求格式HTTP响应报文格式HTTP请求方法(仅作了解)HTTP状态码 服务…

【Java|多线程与高并发】死锁以及哲学家吃饭问题

文章目录 1. 什么是死锁2. 哲学家吃饭问题3.如何解决死锁 1. 什么是死锁 死锁(Deadlock)是多线程编程中的一个常见问题,指的是两个或多个线程相互等待对方释放资源,导致程序无法继续执行的状态。 在一种典型的死锁情况中&#x…

建立点到多点的IPSec隧道(IKE安全策略方式)

目录 1. 组网需求1.1 网络拓扑1.2 配置思路1.3 版本 2. 配置USG5500 A2.1 基本配置2.2 配置域间包过滤规则2.3 配置到达分支的静态路由2.4 定义被保护的数据流2.5 配置名称为tran1的IPSec安全提议2.6 配置序号为10的IKE安全提议2.7 配置IKE Peer2.8 配置IPSec安全策略组map12.9…

哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议

哈工大计算机网络课程数据链路层协议详解之:多路访问控制(MAC)协议 在上一小节介绍完数据链路层功能和所提供的服务后,接下来我们介绍一个在数据链路层非常重要的一个协议:多路访问控制MAC协议。 多路访问控制主要是…

简易登录页面实现

导言 本文将介绍一个简单的登录页面的实现&#xff0c;使用HTML、CSS和JavaScript完成。该登录页面具有选项卡切换和表单提交功能。 HTML基础知识 首先&#xff0c;我们来了解一下HTML文档的基本结构&#xff1a; <!DOCTYPE html> <html> <head><titl…

python创建多个logging日志文件

为每一个计算过程创建一个单独的日志文件&#xff0c;并写入对应的结果&#xff0c;同时保留控制台输出的功能&#xff0c;控制台输出与日志文件记录可以分开单独控制。 import os import loggingdef creat_logger(log_path,logging_name,suf_name):if not os.path.exists(log…

NC65 输出打印模板设置流程

NC65 输出打印模板设置流程 一、添加打印模板 1、可以在单据模板初始化设置中生成打印模板&#xff08;这里以结算单为例&#xff09; 输入模板编码和名称&#xff0c;然后按确定即可。 此时&#xff0c;去输出模板初始化节点查看&#xff0c;就可以查看到刚才生成的打印模…