CAP原则

简述

提到分布式,那么CAP原则是绕不过去的,那么什么是CAP原则呢。

CAP原则:在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)不可能都同时满足,最多只能同时满足两个。

img

详解

选项 描述
一致性(Consistency 指在分布式系统中,多个副本之间能够保持严格的数据一致性。
可用性(Availability) 指服务一直处于可用状态,每次请求都能获取非错响应
分区容错性(Partition tolerance) 指在分布式系统中,某个分区或副本出故障了,其他分区或副本能继续对外提供服务

为什么不能CAP兼容

1、在分布式系统中,分区容错性肯定是必须的,所以必须要有P。

2、添加C,就是添加一致性,那么就是要保证所有分区中的数据是一致的。假设有A、B、C三个分区,现在分区上的数据一致。

3、添加A,添加可用性,保证服务一直可用,我们看能不能达到这种效果。

​ A、B、C三个分区,分区上的数据一致。现在操作A分区中的数据发生更改,在保证一直性的情况下,得先同步更改B、C分区上得数据。更改数据需要时间,在同步更改的这段时间中,是不是就不能对外提供服务。 如果要先保证可用性,那是不是就不能先同步更改B、C分区上的数据。由此就可以看出CAP不能同时存在。

解决方案

虽然CAP不能同时存在,但是在分布式系统中一般AP、CP也可以根据场景的不同解决我们的问题了。

在可用性要求高的场景中,可以放弃一致性。这要求在数据不一致的情况下不影响我们的服务,比如NoSQL。

在一致性要求高的场景中,可以放弃可用性。这种场景是对数据有很高的要求,比如转账服务,可以牺牲一段可用时间,以保证各分区数据同步一致。

折中方案

在一致性要求比较高的场景中,同步各分区的时候,是不是需要同步到所有分区,如果同步一个或者大部分分区就可以的,那么这时候返回,是不是会提高可用性。这是一个在保证一致性的情况下提高可用性的办法,前提是同步到一个或大部分分区就可以保证我们的业务。

归根究底,一致性和可用性不能同时兼得,一个增加另一个必然减少。