✨五分钟理解CAP理论✨


前言

在分布式数据存储系统 中,有一个绕不开的理论模型,叫做CAP 定理,又称为布鲁尔定理 ,由计算机科学家Eric Brewer 提出,本文将以最简单的例子来说明CAP 定理的理论模型,最多只花你五分钟。

正文

一. 概念速览

CAP定理由如下三部分组成。

  1. C (Consistency),一致性。每次对数据的读取都是最近一次写入的内容;
  2. A (Availability),可用性。每次请求读取数据都能成功读取到数据,但读取到的数据不保证总是最近一次写入的内容;
  3. P (Partition tolerance),分区容错性。网络节点之间可能发生网络故障从而导致消息丢失,但这不会影响系统的运行。

二. 概念说明

CAP 里面的C 和A 都比较好理解,P 好像有点抽象,其实这么理解就对了,P的意思就是允许存在网络故障。

对于一个分布式数据存储系统来说,如果没有网络故障 ,那么CAP 的 三个特性都是可以满足 的。

但分布式系统的 网络故障一定是不可避免的 ,所以P 是一定要满足的,并且此时C 和A 只能满足一个,因此就出现了CP 模型和AP模型。

假设我们现在有如下这么一个分布式数据存储系统。

当数据同步因为网络问题而无法实现时,下面来分别看下CP 模型和AP模型的行为是什么。

1. CP模型

在CP 模型下,因为要满足C 的一致性,所以一旦网络出现问题导致数据同步失败,此时数据的读取就会被拒绝从而导致读取超时或失败,这种情况下,系统变得不可用,即A不满足。

2. AP模型

在AP 模型下,因为要满足A 的可用性,所以就算网络出现问题导致数据同步失败,此时数据的读取还是能够成功读取到数据,但这种情况下节点间的数据是不同的,即C不满足。

总结

CAP 的C 表示一致性,要求节点间的数据要完成数据同步。

CAP 的A 表示可用性,要求系统对外随时都能提供数据读取的服务。

CAP 的P 表示分区容错性,要求系统能够在存在网络故障的情况下运行。

因为分布式系统中网络故障是一定会存在的,所以P 是一定要满足的,并且C 和A 是一定无法同时满足的,此时就形成了CP 模型和AP模型。

CP 模型在网络发生故障时会拒绝对外提供数据读取服务,此时A也就是可用性无法满足。

AP 模型在网络发生故障时还是会对外提供服务,但节点间的数据会不一致,此时C也就是一致性无法满足。

在Nacos 中,对于临时实例 的服务实例信息获取,Nacos 采用AP 模型,具体的实现采用Distro 协议,而对于持久化实例 ,Nacos 采用CP 模型,具体的实现采用SOFAJRaft协议。

相关推荐
喵个咪9 分钟前
Go 写业务,Rust 扛底盘:一套可落地的混合架构
后端·rust·go
小小张说故事34 分钟前
Python logging 日志不输出?根源在 propagate 这条链上
后端·python
ZealSinger1 小时前
Go slog生产落地LevelVar与共存
开发语言·后端·golang·go
灯澜忆梦1 小时前
【RabbitMQ #11】 | 消费者可靠性
分布式·rabbitmq·ruby
w***48822 小时前
SpringBoot整合easy-es
spring boot·后端·elasticsearch
dpharness2 小时前
踩完 dsh-ads 的四个坑,我说说虚构排名该怎么看
后端
预知同行2 小时前
深入解析 AI 应用可观测性:OpenTelemetry GenAI 规范下的调用链追踪与 Token 成本治理
后端·架构
张宏宇2 小时前
我把微软开源的 tgrep 做成了本地版 GitHub Code Search:45,629 个文件里搜一次 10ms
前端·后端
打工仔折腾 AI2 小时前
把模型切换交给平台:用蓝耘智能路由搭建商品评论分析工具
java·服务器·前端·后端·python·性能优化·ai agent 实战
后端LV2 小时前
Caffeine 源码详解:为什么它是最快的 Java 本地缓存——一次压测引发的源码考古
java·后端