尺有所短,寸有所长:CAP和数据存储技术选择
2020-11-26 本文已影响0人
码农架构
理解概念
CAP 的概念
CAP 理论,又叫做布鲁尔理论(Brewer’s Theorem),指的是在一个共享数据的分布式存储系统中,下面三者最多只能同时保证二者,对这三者简单描述如下:
- 一致性(Consistency):读操作得到最近一次写入的数据(其实就是上一讲我们讲的强一致性);
- 可用性(Availability):请求在限定时间内从非失败的节点得到非失败的响应;
- 分区容忍性(Partition Tolerance):系统允许节点间网络消息的丢失或延迟(出现分区)。
进一步理解
保持一致性:
发生分区:
- 如果写入并返回成功,满足系统的可用性,就意味着丢失了数据一致性。因为节点 A 的数据是最新的,而节点 B 的数据是过期的。
- 如果不写入数据,而直接返回失败,即节点 A 拒绝写操作,那么 A 和 B 节点上的数据依然满足一致性(写入失败,但依然都是相互一致的老数据),但是整个系统失去了可用性。
三选二 ?
CAP 的应用似乎就是一个三选二的选择题,但事实上,完全不是这样的。
- 在讨论 CAP 定理的时候,P,也就是分区容忍性,是必选项
- 工程师能做的,就是从 CP 和 AP 中选择合适的那一个, 是二选一
需要特别说明的是,这里说的是只能“保证”一致性和可用性二者之一,而不是说,在系统正常运行时,二者不可能“同时满足”。在系统运行正常的时候,网络分区没有出现,那么技术上我们是可能同时满足一致性和可用性两者的。
是否存在 CA 系统?
有!但请注意,那其实已经不是 CAP 理论关心的对象了,因为 CAP 要求的是节点间的数据交换和数据共享。任何时候都不会有分区发生,这种系统基本上有这样两种形式:
- 单点系统
- 虽然是多节点,但是节点间没有数据共享和数据交换
存储技术的选择:NoSQL 三角形
它被设计出来的目的,并非要取代关系数据库,而是成为关系数据库的补充,即“Not Only SQL”。
- 损失了强结构定义和关系查询等能力,但是它往往可以具备比关系数据库高得多的性能和横向扩展性(scalability)等优势
我们可以利用 CAP 定理来权衡和帮助选择合适的存储技术,且看下面这张 NoSQL 系统的 CAP 三角形
实际场景
从特性上说,甚至可以部分特性做到 CP,部分做到 AP,这都是有可能的。
![](https://img.haomeiwen.com/i24563685/ffa36deadb59ab26.png)