CAP 理论笔记

一、CAP 理论概述

CAP 理论由 Eric Brewer 于 2000 年提出,并在 2002 年被正式证明。它描述了分布式系统在 一致性(Consistency)可用性(Availability)分区容忍性(Partition Tolerance) 三个特性之间的取舍。

CAP 三个核心概念:

  • C(Consistency,一致性)
    所有节点在同一时间的数据视图一致。
    表现:客户端无论连接哪个节点,都能读取到最新数据。
  • A(Availability,可用性)
    每个请求都能在有限时间内得到响应(成功或失败)。
    表现:即使部分节点宕机,系统也能正常对外提供服务。
  • P(Partition Tolerance,分区容忍性)
    系统能够容忍网络分区(节点间通信中断)并继续提供服务。
    表现:即使集群被分隔成多个子集群,系统仍能运行。

二、为什么不能同时满足 CAP 三者?

原因:
分布式系统不可避免会出现 网络分区(P),如果系统要求 可用性(A),必须继续响应请求;如果要求 一致性(C),必须等待所有节点同步完成再返回结果。这两者在网络分区时是冲突的。

直观示例:

  • 如果要保证 一致性(C)
    网络分区后,某个节点接到写请求,必须等待另一个分区的节点确认,导致无法响应,降低可用性。
  • 如果要保证 可用性(A)
    网络分区后,节点仍然独立处理请求,但不同分区的数据可能不一致。

三、CAP 三者的关系

CAP 理论核心结论:

在分布式系统中,网络分区(P)必然会发生,因此只能在 一致性(C)和可用性(A)之间取舍

对应组合:

  • CP 系统(Consistency + Partition Tolerance)
    特点:牺牲可用性,保证一致性。
    示例:ZooKeeper、HBase。
  • AP 系统(Availability + Partition Tolerance)
    特点:牺牲强一致性,保证可用性,采用最终一致性。
    示例:Cassandra、Eureka。
  • CA 系统(Consistency + Availability)
    特点:不考虑网络分区(单机数据库)。
    示例:MySQL 单机模式。

四、分布式场景下的 CAP 取舍

系统类型选择典型案例
单机数据库CAMySQL 单机
分布式协调服务CPZookeeper、etcd
分布式缓存系统APRedis Cluster、Cassandra

五、CAP 理论在常见系统中的应用

1. MySQL 主从复制

  • 目标:数据一致性高(主从同步),但延迟可能影响可用性。

  • 方案:

    • 强一致性(CP):主从同步采用 同步复制,但可用性下降。
    • 高可用(AP):主从同步采用 异步复制,提升可用性,但可能出现短暂不一致。

2. Redis Cluster

  • 目标:高可用性。

  • Redis 选择 AP

    • 分区时,仍然接受请求,保证可用性。
    • 通过 异步复制 + 最终一致性 解决数据一致性问题。

3. ZooKeeper

  • 目标:强一致性。

  • ZooKeeper 选择 CP

    • 网络分区时,为保持一致性,部分节点拒绝服务,降低可用性。

六、CAP 与 BASE 理论

CAP 是基础理论,而实际工程中,很多系统选择 AP + 最终一致性,这就是 BASE 理论

  • Basically Available(基本可用)
  • Soft State(软状态)
  • Eventually Consistent(最终一致性)

七、图解 CAP

        CAP 三角关系+-----------+|    C      ||           ||           |+----+----+      ||         |      |A         P
  • CA:单机系统。
  • CP:一致性 + 分区容忍 → 牺牲可用性。
  • AP:可用性 + 分区容忍 → 牺牲强一致性。

八、面试高频问答

Q1:CAP 理论中,为什么不能同时满足三者?

  • 网络分区(P)在分布式系统中必然发生。
  • 分区发生时,保证 一致性(C) 需要同步确认,降低可用性。
  • 保证 可用性(A) 则必须放弃强一致性。

Q2:MySQL 属于 CAP 哪种?

  • 单机:CA。

  • 主从复制:

    • 同步复制:CP。
    • 异步复制:AP。

Q3:Redis 属于 CAP 哪种?

  • Redis Cluster:AP(高可用 + 最终一致性)。

Q4:ZooKeeper 属于哪种?

  • CP(牺牲可用性,保证一致性)。

Q5:CAP 理论与 BASE 理论区别?

  • CAP:理论模型,三者不可兼得。
  • BASE:工程实践,强调最终一致性。

九、总结表

特性含义典型场景
C所有节点数据一致事务数据库
A每次请求都能得到响应分布式缓存
P系统能容忍分区故障并继续提供服务所有分布式系统必须具备的能力

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

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

相关文章

Android 底层实现基础

Activity 生命周期应用内 Activity 跳转流程(A → B) 从 Activity A 打开新的 Activity B(如点击按钮跳转详情页) A.onCreate() → A.onStart() → A.onResume() (A 已在前台)点击跳转按钮 → A.onPause() …

MySQL进阶:(第一篇) 深入解析MySQL存储引擎架构

一、MySQL的体系结构连接层:最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层:第二层架构主要完成大多数的核心服务功能&#xff0c…

京东m端 滑块 分析 t30

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!部分python代码response requests.pos…

CentOS使用命令行工具为其配置静态网络并使用VMware软件ovf配置文件快速配置多台不同ip的centos文件

目录 一、实验前准备 1.SSH远程登录工具 二、CentOS配置静态IP并实现远程ssh登录 1.VMware软件查看NAT模式下默认网段和网关 2.使用ipconfig查看当前网卡名字和动态分配的ip地址 3.使用VIM编辑网络配置文件(此步骤可有其他编辑器替代,例如&#xf…

设计模式学习[17]---组合模式

文章目录前言1.引例2.一致性抽象处理3.透明组合模式与安全组合模式总结前言 在画类图的时候,类与类之间有组合关系,聚合关系,我本来以为这个组合模式应该是整体与部分的关系,其实设计模式中的组合模式和类图中的组合不是同一个东…

48Days-Day12 | 添加字符,数组变换,装箱问题

添加字符 添加字符_牛客笔试题_牛客网 算法原理 因为本题数据量都比较小,所以我们可以直接使用暴力解法,枚举B字符串的每一个位置作为与A字符串比较的起点,维护一个最小位数的值 代码 import java.util.*;// 注意类名必须为 Main, 不要有…

关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案

背景:使用vueelementui的前端项目,使用jenkins进行自动化编译部署,某天在进行编译发版的时候,突然出现 npm ERR! Maximum call stack size exceeded 错误,一直都没法编译成功。原因:随着前端项目的不断迭代…

微信小程序组件发布为 npm 包的具体步骤

1. 准备工作 首先,您需要在系统上安装 Node.js 和 npm。如果尚未安装,请访问 Node.js — Run JavaScript Everywhere 下载并安装最新版本。 2. 创建独立的组件目录 为了更好地管理组件,建议将其从当前项目中独立出来: wechat-…

LCM中间件入门(2):LCM核心实现原理解析

文章目录一、good()函数:LCM实例状态检查的实现原理1. 实现逻辑2. 简化代码示例(C语言核心逻辑)二、publish():向指定channel发送消息的原理1. 完整流程拆解2. 简化代码示例(C核心逻辑)三、subscribe()&…

Nginx安装及配置

一.nginx安装1.1nginx概述1.1.1 nginx介绍Nginx是一款高性能的开源HTTP和反向代理服务器,是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器解决C10K问题(10K Connections)。同时也支持IMAP/POP3代理服…

SelectDB数据库,新一代实时数据仓库的全面解析与应用

摘要:SelectDB是一款基于Apache Doris的新一代实时数据仓库解决方案,具备实时极速、融合统一、弹性架构和开放生态四大核心特性。它采用云原生存算分离架构,支持秒级数据更新、毫秒级查询响应,在TPC-H等基准测试中性能超越传统系统…

自动驾驶的未来:多模态传感器钻机

伦敦大学学院博士生袁方正在建造多模态传感器钻机,以探索自动驾驶的未来。他的最新设置汇集了一套尖端传感器: 📡 60 GHz 雷达(用于 Raspberry Pi 的 DreamHAT)DreamRF 📷 RGB 深度摄像头 (Real…

13.Redis 的级联复制

Redis 的级联复制 即实现基于Slave节点的Slave 1. 修改 Slave 节点配置文件 # 第一个slave节点 [rootubuntu2204 ~]#vim /apps/redis/etc/redis.conf(大约在533行附近) replicaof 10.0.0.100 6379 masterauth 123456# 第二个slave节点 [rootubuntu2204 ~]#vim /apps/redis/etc/…

spring-ai-alibaba 学习(二十)——graph之检查点

前面学习了graph的基本概念,参数设置,特殊节点和边,今天学习一下检查点检查点可能名称比较抽象,换个名字可能比较容易理解,进度保存点或者存档点,可以类比游戏中保存当前游戏进度的存档进度主要用于人工介入…

sqli-labs:Less-19关卡详细解析

1. 思路🚀 本关的SQL语句为: $insert"INSERT INTO security.referers (referer, ip_address) VALUES ($uagent, $IP)";注入类型:字符串型(单引号包裹)、INSERT操作提示:参数需以闭合关键参数&a…

Java小红书源码1:1还原uniapp_仿小红书源码

在内容驱动型社交平台兴起的背景下,小红书作为图文/视频种草社区的代表,其产品结构与功能体验逐渐成为众多开发者与创业团队的模仿蓝本。本项目基于Java后端uni-app前端栈,完整复刻小红书主要功能,支持多端(小程序、H5…

USB Type-C PD协议一文通

原文:https://www.richtek.com/Design%20Support/Technical%20Document/AN056?sc_langzh-TW译者:TrustZone1、概述 USB Type-C标准的出现是为了满足不断增长的现代设备之间的连接需要,它在传统USB标准的基础上提供了更高的电源传输能力和资料…

AI文档比对和Word的“比较”功能有什么区别?

AI文档比对工具的核心区别在于,它超越了Word的纯文本“找不同”,能精准处理扫描件、表格及印章,并将文档审查从被动的文本核对,处理大文档也更为快速及准确。 为什么Word的“比较”功能已经不够用了? 对于许多专业人士…

AI驱动SEO关键词智能进化

内容概要 随着人工智能(AI)技术的快速演进,搜索引擎优化(SEO)领域正迎来前所未有的变革。本文核心探讨AI如何驱动SEO关键词的智能进化,重点解析人工智能革新关键词研究与优化策略的机制,包括智能…

基于SpringBoot+MyBatis+MySQL+VUE实现的青年公寓服务平台管理系统(附源码+数据库+毕业论文+部署教程+配套软件)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,房屋信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…