浅谈 CAP 理论

简介:

本文介绍了介绍了分布式系统著名的 CAP 理论。什么是 CAP 理论?为什么说 CAP 只能三选二?了解 CAP 对于系统架构又有什么指导意义?本文将一一作答。

什么是 CAP 理论

在计算机科学理论,CAP 定理(也称为 Brewer 定理),是由计算机科学家 Eric Brewer 提出的,即在分布式计算机系统不可能同时提供以下全部三个保证:

  • 一致性(Consistency):所有节点同一时间看到是相同的数据;
  • 可用性(Availability):不管是否成功,确保每一个请求都能接收到响应;
  • 分区容错性(Partition tolerance):系统任意分区后,在网络故障时,仍能操作

为什么说 CAP 只能三选二

下面分别举例说明了为什么说 CAP 只能三选二。

上面的图显示了在一个网络中,N1 和 N2 两个节点。他们都共享数据块 V,其中有一个值 V0 。运行在 N1 的 A 程序可以认为是安全的、无 bug、可预测的和可靠的。运行在 N2 是 B 程序。这个例子中,A 将写入 V 新​值,而 B 从 V 读取值

系统预期执行下面的操作

  1. 首先写一个 V 的新​值 V1
  2. 然后消息(M)从 N1 更新 V 的拷贝到 N2
  3. 现在,从 B 读取将返回 V1

如果网络是分区的,当 N1 到 N2 的消息不能传递时,执行上面的第三步,会出现虽然 N2 能访问到 V 的值(可用性),但其实与 N1 的 V 的值已经不一致了(一致性)。

CAP 常见模型

牺牲分区(CA 模型)

举例:

  • 单站点数据库
  • 集群数据库
  • LDAP
  • xFS 文件系统

实现方式:

  • 两阶段提交
  • 缓存验证协议

牺牲可用性(CP 模型)

举例:

  • 分布式数据库
  • 分布式锁定
  • 绝大部分协议

实现方式:

  • 悲观锁
  • 少数分区不可用

牺牲一致性(AP 模型)

举例:

  • Coda
  • Web 缓存
  • DNS

实现方式:

  • 到期/租赁
  • 解决冲突
  • 乐观

CAP 的意义

在系统架构时,应该根据具体的业务场景,来权衡 CAP。比如,对于大多数互联网应用来说(如门户网站),因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须需要保证的,所以只有舍弃一致性来保证服务的 AP。而对于银行等,需要确保一致性的场景,通常会权衡 CA 和 CP 模型,CA 模型网络故障时完全不可用,CP 模型具备部分可用性。

参考引用

目录
相关文章
|
Ubuntu 测试技术 数据安全/隐私保护
Ubuntu搭建简单SIP服务器并使用sipdroid测试
Ubuntu搭建简单SIP服务器并使用sipdroid测试
913 0
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
352 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
206 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
403 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
4天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
204 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1362 8