✨五分钟理解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协议。

相关推荐
SomeOtherTime36 分钟前
Rust所有权(AI回答)
开发语言·后端·rust
程序员cxuan2 小时前
离谱,AI 大佬顺手搓了个 YouTube ,而我顺手给他搓了个中文插件
人工智能·后端·程序员
学长毕设2 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
深蓝AI2 小时前
Gemini Decisions API 来了:一次前向打分取代逐字解码,校准误差 0.0250 才是 agent 分支调用的真门槛
人工智能·后端
学长毕设3 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
IT_陈寒3 小时前
Vue的watch把我坑惨了,原来要这样用才靠谱
前端·人工智能·后端
黃芢輝4 小时前
开源实战:基于 Spring Boot 3 + Vue 3 + Redis 的高校选修课管理系统(志愿填报 + 统一抽签)
后端
小雨的AI中台笔记4 小时前
502 还是 503?「无可用渠道」其实只有三个原因
后端
LCG元4 小时前
我让AI重写了这个老系统
后端
吴汐4 小时前
【CRMEB 社区版】二开第一问:这个需求该进 driver,还是进 modules?
后端