有人问你什么是CAP?你就把这篇文章发给他

简介: CAP定理是分布式存储系统的基石,分布式系统(distributed system)指的是建立在网络上的软件系统,它是多个计算机节点通过协调工作的方式,共同完成任务的系统。分布式系统解决了单个计算机无法完成的计算和存储任务。但是分布式系统的设计十分复杂,设计者必定面临诸多挑战,比如节点故障、网络分区、异地网络等等问题。

1、什么是分布式系统

CAP定理是分布式存储系统的基石,分布式系统(distributed system)指的是建立在网络上的软件系统,它是多个计算机节点通过协调工作的方式,共同完成任务的系统。分布式系统解决了单个计算机无法完成的计算和存储任务。但是分布式系统的设计十分复杂,设计者必定面临诸多挑战,比如节点故障、网络分区、异地网络等等问题。

2、垂直扩展和水平扩展

上面有说到分布式系统,分布式和水平扩展等概念经常会一起出现,文中也通过阅读资料和自己的理解总结一下计算机系统超负荷时,常用的两种扩展解决手段。

垂直扩展(纵向扩展、向上扩展、Scale up):

指的是增加现有系统部件的内存、CPU等资源来提升系统的负荷能力。

水平扩展(横向扩展、向外扩展、Scale Out):

指的是在现有系统部件的基础上新增新的机器来提升系统的符合能力。

优缺点:

垂直扩展实现简单,但是机器的增加硬件资源仍然容易达到性能瓶颈,需要继续扩展。

水平扩展实现复杂,但是相比之下能带来系统的高可用、高吞吐量等优势。

3、CAP原则

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A):保证每个请求不管成功或者失败都有响应。

分区容错性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。


上面有说到分布式系统建立在网络上,需要依靠网络来进行节点之间的通信,由于网络的不稳定性是必然存在的,这可能会导致节点网络断开,专业术语叫“网络分区”。

在上图中当网络分区产生的时候,分布式节点之间无法进行通信,数据无法及时同步,此时客户端对Node A节点数据的修改无法同步到Node B节点上,这会导致分布式系统中数据不一致,一致性(Consistency)将无法得到保证,如果此时要保证分布式系统中数据一致性,那么只能停止提供服务,等待节点网络恢复数据同步之后,在提供服务,但是这样系统就无法满足可用性(Availability)。

因此CAP原理可以这样简单的总结:当网络分区发生时,一致性和可用性不可兼得。

4、如何取舍

CAP理论应该如何取舍,CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。并且上面有分析在分布式系统中网络分区必然存在的问题,因此理论上CAP在分布式系统中只有CP和AP两种选择。

CP—不要求可用性(Availability),CP追求的是强一致性,每个服务器节点之间的数据必须保证完全一致,选择CP会导致系统在发生网络分区时,无法对外提供服务。CP强一致性的系统架构在银行转账系统中比较常见。Redis、HBase等数据库也是典型的强一致性分布式数据库。

AP—不要求一致性(Consistency),AP追求的是系统高可用,在网络分区发生时,分布式系统仍然能够提供服务,这会导致数据短暂的不一致性。AP高可用的系统架构在淘宝、京东等电商系统的秒杀活动中比较常见。

CA—不允许分区(Partition tolerance),这种情况不符合分布式系统架构,一般情况下都是Mysql、Oracle等RDBMS传统的关系型数据库。

5、资源推荐

关于CAP理论,其实比较简单,但是具体运用于分布式系统实现起来是非常复杂的。网上的文章非常多,我感觉其实只需要看下Robert Greiner的两篇文章就可以。

https://robertgreiner.com/cap-theorem-explained/

https://robertgreiner.com/cap-theorem-revisited/

目录
相关文章
win10下双击运行.bat文件,一闪而过
直接在cmd运行.bat里面的命令可以运行,但是双击.bat就是一闪而过,那么为什么会出现这样的问题呢,一般情况是.bat里面的命令,在双击运行的环境下出现了问题导致的。
1873 0
win10下双击运行.bat文件,一闪而过
|
4月前
|
数据可视化 算法 数据挖掘
HiChIP 数据分析: 分析简介
HiChIP 数据分析: 分析简介
HiChIP 数据分析: 分析简介
|
5月前
|
人工智能 搜索推荐 大数据
2025年电商API发展趋势:智能化与个性化
2025年,电商API在人工智能与大数据推动下加速智能化、个性化发展。从智能库存预警到情境感知推荐,技术驱动效率跃升与体验升级。预计个性化API调用占比达75%,智能决策渗透率超90%,开发成本下降60%。电商API正从“功能连接器”进化为“智能服务中枢”,重构用户体验与商业生态。
202 0
|
机器学习/深度学习 监控 API
基于云计算的机器学习模型部署与优化
【8月更文第17天】随着云计算技术的发展,越来越多的数据科学家和工程师开始使用云平台来部署和优化机器学习模型。本文将介绍如何在主要的云计算平台上部署机器学习模型,并讨论模型优化策略,如模型压缩、超参数调优以及分布式训练。
1704 2
|
存储 人工智能 关系型数据库
MySQL 8.0 字符集与比较规则介绍
我们都知道 MySQL 8.0 与 MySQL 5.7 的区别之一就是默认字符集从 latin1 改成了 utf8mb4 ,除此之外,MySQL 8.0 下的字符集和比较规则还有没有其他变化呢?本篇文章我们一起来学习下。
885 1
|
前端开发 JavaScript Java
招聘信息管理|基于SpringBoot招聘信息管理系统
招聘信息管理|基于SpringBoot招聘信息管理系统
615 1
|
消息中间件 分布式计算 关系型数据库
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
|
Dubbo Java 应用服务中间件
Dubbo日志链路追踪TraceId选型
开发排查系统问题用得最多的手段就是查看系统日志,但是在分布式环境下使用日志定位问题还是比较麻烦,需要借助全链路追踪ID把上下文串联起来,本文主要分享基于Spring Boot + Dubbo框架下日志链路追踪ID的实现方案选型思路
5131 0
Dubbo日志链路追踪TraceId选型
|
安全 Linux 测试技术
软件工程之维护阶段
软件工程之维护阶段
543 0