简介
CAP定理
,有计算机科学家Eric Brewer提出也称Brewer定理
是在分布式系统中的一个基本定理,指出任何分布式系统最多可以有两个以下三个属性。
- Consistency(一致性)
- Availability(可用性)
- Partition tolerance(分区容错性)
它们的第一个字母分别是 C、A、P。
原文
Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。
Consistency
一致性(C),是指在分布式系统中所有数据备份在同一时刻是否拥有同样的值
如下图,是一个不一致的例子
客户端从G1写入,但是从G2读到的却是一个旧的数据,不满足一致性
下图则是一个一致的例子
如图,G1在向客户端发送确认信息前,跟G2进行了一次同步操作,因此客户端从G1,G2获取的数据都将满足一致性
Availability
可用性(A),是指系统中非故障节点收到的每个请求都必须导致响应
注
:在可用的系统中,如果我们的客户端向服务器发送请求并且服务器没有崩溃,则服务器最终必须响应客户端。不允许服务器忽略客户端的请求。也就是说用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。
Partition tolerance
分区容错性(P),分区容错性的分区相当于对通信的时限要求,系统如果不能在一定时限内达成数据一致性,就意味这发生了分区的情况,也就是说整个分布式系统不再互联。
如果G1和G2不能保持一致性,那么就会出现分区,即分布式环境中的节点分成了两组,彼此之间无法通信
结论
- 一个系统不能同时拥有这三个性质
组合维度
组合维度 | 组合描述 |
---|---|
CA | 放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择 |
AP | 放弃一致性(这里说的是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此 |
CP | 放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可以 |
网友评论