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

相关推荐
Mk598782 小时前
一个 Markdown 文件就是一个员工 —— AgentScope-Java 多智能体编排实战(核心篇)
后端
imDwAaY3 小时前
微信运动每天晚上 10 点推送排行榜,技术上到底有多难?
后端
ServBay3 小时前
PHP 突爆 9.2 分高危漏洞,你升级了吗?
后端·php
武子康3 小时前
撤回发生在重建途中,旧索引还能切回来吗
人工智能·后端·agent
码事漫谈4 小时前
双十一,我为什么想买一台编码显示器
后端
一条泥憨鱼4 小时前
【Redis | 黑马点评】分布式锁;Lua脚本;Redisson与看门狗 |源码万字详解
redis·分布式·lua
喵个咪4 小时前
GoWind Kanban 拆解:看板拖拽背后——LexoRank、乐观锁与尽力而为广播
后端·架构·go
喵个咪4 小时前
GoWind OA 拆解:用 3000 行 Go 写一个够用的审批工作流引擎
后端·架构·go
喵个咪4 小时前
GoWind Ledger 拆解:单式记账的余额一致性——confirm、补偿,以及没进事务的那些缝隙
后端·架构·go
喵个咪4 小时前
GoWind Shop 拆解:订单超时关单——一个事务里的四联动
后端·架构·go