什么是CAP
-
CAP 是分布式系统的三要素 ,分别是
- 一致性 Consistency
- 可用性 Availability
- 分区容错性 Partition tolerance
- 一个简单的分布式系统架构如上图,serve端 一共由B,C组成,client端为 A
- 下面我们来简单谈一下什么是CAP?
- 一致性 Consistency
- 可以理解为如果我写了一个值就一定可以读到这个值,不管是从分布式的那台机子上读
- 举例我 A 写入 B
id=1 name=tony
,那 A 读 C 就可以读出id=1 的 name=tony
- 可用性 Availability
- 可以理解成分布式服务的主机,收到命令就一定要给回复
- 分区容错性 Partition tolerance
- 分布式的子系统可能在不同的网络中,我们必须考虑,分布式系统间网络不通的情况,比如B和C之间网络连接断开
为什么分布式 CAP 理论,只能满足其中两个
- 因为既然是分布式,那么 P 分区容错性就一定要保障
- 保障了分区容错性就说明我们B,C间的网络可能是不通的
- 那么这时就可能出现两种情况了
情况一、A向B更新数据,B不能同步给C,于是A求情C的时候C直接返回未同步的结果给A,很明显这没有符合CAP里的C一致性
情况二、A向B更新数据,B不能同步给C,于是A求情C的时候,C一直等待B的同步,直到B同步才返回结果给A,但由于B、C间网络中断,所以C一直阻塞,不能返回结果给A,很明显这没有符合CAP里的A可用性
结论
- 在分布式系统中 CAP 不能兼得,通常我们只能保证 CP 和 AP(CA模型不是分布式而是传统数据库模型)
- 在业务的技术选型中,要着重考虑我们的服务是优先需要保证一致性还是可用性
- 只有明白了我们服务自身的特点,我们才能在技术选型的时候不选错技术方案