一、CAP理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了CP系统,但是CAP不可同时满足 。
二、CAP通俗理解
2.1 分区容错性解释
2.1.1 什么是分区
比如说,我们现在有一个分布式系统,它里面有两个节点。现在客户端向节点1发送了一条数据,在节点1里面存储了数据,作为分布式系统,最终肯定是要达到一致的,那节点1和节点2肯定要做数据实时的同步,保证整个集群的数据一致性。
但是,现在有一个问题,节点1和节点2之间突然发生网络分区了,说白了就是网络不通了,节点1和节点2没法做通信了,这就叫分区。简而言之,分区就是分布式系统中,节点之间网络不通了,相互不能进行数据的同步。
2.1.2 什么是容错?
分布式系统即使分区了,节点之间网络不通了,不能同步数据了,不能因为这个问题,导致整个系统对外不可用,说白了就是系统节点出现分区了对外依然要能提供服务,不能说分区了导致整个系统宕机无法对外提供服务。
2.2 CAP的选择
2.2.1 三选二原则
CAP原则是三选二,不可能同时满足,要么CA,要么CP,要么AP。P分区容错性必须要满足的,系统不能因为网络出现了分区,节点之前网络不通了,导致整个系统瘫痪了。所以,分布式系统要么是AP,要么是CP。
2.2.2 CP
在满足P的前提下,客户端往节点1发送了一条数据a,由于出现了网络分区,节点1没办法往节点2同步数据,如果我们要保证整个分布式系统的一致性C,那我们必须在两个节点进行数据同步之前,让这个分布式系统暂时不可用。
2.2.3 AP
在满足P的前提下,客户端发送了一条数据给节点1,由于要保证可用性,节点2还是可以正常访问的,但是,节点1和节点2之间是不能同步的,这就造成客户端查询节点1和节点2的这条数据结果不一样,也就造成了数据不一致。