CAP和BASE理论

简介: CAP CAP是一个已经经过证实的理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

CAP

CAP是一个已经经过证实的理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

一致性

我们知道ACID中事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库都必须处于一致性状态。也就是说,事务的执行结果必须是使数据库从一个一致性状态转变到另一个一致性状态。

和ACID中的一致性不同,分布式环境中的一致性是指数据在多个副本之间是否能够保持一致的特性。

分布式系统中,数据一般会存在不同节点的副本中,如果对第一个节点的数据成功进行了更新操作,而第二个节点上的数据却没有得到相应更新,这时候读取第二个节点的数据依然是更新前的数据,即脏数据,这就是分布式系统数据不一致的情况。
在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都能读取到最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性)。

可用性

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果,如果超过了这个时间范围,那么系统就被认为是不可用的。

“有限的时间内”是在系统的运行指标,不同系统会有差别。例如搜索引擎通常在0.5秒内需要给出用户检索结果。

“返回结果”是可用性的另一个重要指标,它要求系统完成对用户请求的处理后,返回一个正常的响应结果,要明确的反映出对请求处理的成功或失败。如果返回的结果是系统错误,比如"OutOfMemory"等报错信息,则认为此时系统是不可用的。

分区容错性

一个分布式系统中,节点组成的网络本来应该是连通的。然而可能因为某些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,而数据就散布在了这些不连通的区域中,这就叫分区。

当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。

提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项仍然能在其他区中读取,容忍性就提高了。然而,把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。

总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。

面临的问题

对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C。

BASE

BASE理论是对CAP理论的延伸,思想是即使无法做到强一致性(CAP的一致性就是强一致性),但可以采用适当的采取弱一致性,即最终一致性。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

基本可用

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性(例如响应时间、功能上的可用性),允许损失部分可用性。需要注意的是,基本可用绝不等价于系统不可用。

响应时间上的损失:正常情况下搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。

功能上的损失:购物网站在购物高峰(如双十一)时,为了保护系统的稳定性,部分消费者可能会被引导到一个降级页面。

软状态

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据会有多个副本,允许不同副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

最终一致性

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

目录
相关文章
|
JavaScript Java 应用服务中间件
|
编解码 人工智能 对象存储
EAS
EAS
709 3
|
容灾 网络协议 大数据
阿里巴巴为什么不用 ZooKeeper 做服务发现?
服务发现,ZooKeeper 真的是最佳选择么?而回望历史,我们也偶有迷思,在服务发现这个场景下,如果当年 ZooKeeper 的诞生之日比我们 HSF 的注册中心 ConfigServer 早一点会怎样?
13129 6
|
安全 Shell 网络安全
如何通过SSH连接云服务器
当你购买云服务器后,你可以通过SSH方式安全的连接到你的云服务器,因为只有你连上云服务器后才能进行服务器相关的配置操作。这里分别介绍了MAC用户和Windows用户如何通过SSH连接云服务器。
2738 1
如何通过SSH连接云服务器
|
存储 JavaScript 前端开发
Wikijs 简介 - 强大 & 可扩展的开源维基软件
Wikijs 简介 - 强大 & 可扩展的开源维基软件
|
网络协议 C++ Docker
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
Docker pull拉取镜像报错“Error response from daemon: Get "https://registry-1.docker.io/v2”解决办法
71223 2
|
存储 消息中间件 缓存
直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践
本文将主要从高可用、弹性扩缩容、用户管理、消息分发、客户端优化等角度,分享直播间海量聊天消息的架构设计技术难点的实践经验。
1582 0
直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践
|
Java Spring 安全
JDK动态代理和CGLIB动态代理的区别以及反射
在Spring中的AOP是依靠动态代理来实现切面编程的.而这两者又是有区别的. JDK是基于反射机制,生成一个实现代理接口的匿名类,然后重写方法,实现方法的增强.它生成类的速度很快,但是运行时因为是基于反射,调用后续的类操作会很慢.
5843 0
|
JavaScript 前端开发 存储
AMD与CMD与Common.js
先从commomJS说起,因为在网页端没有模块化编程知识网页jsvascript逻辑复杂度也可以工作下去,但是在服务器端一定要有模块化,所虽然javascript在web端发展这么多年,第一个流行的模块化规范却由服务端的javascript应用带来,commonjs规范是由NodeJs发扬光大,这标志着javascript模块化编程正式登上舞台。
1552 0
|
12天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
4779 23
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考

热门文章

最新文章