https://www.jianshu.com/p/2c30d1fe5c4e
CAP定理
CAP理论主要是针对分布式存储系统的;
C是指Consistency一致性;
A是指Availability可用性;
P是指Partition tolerance分区容忍性;
CAP定理认为分布式系统中这三个特性最多只能同时满足两个特性。
- 一致性(Consistency): 指在分布式系统中的所有数据备份,在同一时刻对外是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- 可用性(Availability): 在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(一个分布式系统会有多个集群部署,按类型大概为三种类型:高可用集群、负载集群、高性能计算集群)
- 分区容忍性(Partition tolerance):即当节点之间无法正常通信时,就产生了分区,而分区产生后,依然能够保证服务可用,那么我们就说系统是分区容忍的。显然如果节点越多,且备份越多,分区容忍度就越高(因为即便是其中一个或多个节点挂了,仍然有其它节点和备份可用)。
那么,为什么说三个特性无法全部保证呢?首先,假如我们要保证分区容忍性,必然要做多个副本节点,而这必然会带来一致性的问题,即保证多个节点的数据是相同的,但是,要让多个节点数据相同,就必须要花时间去复制数据,这还是能够正常通信的情况下,那么在数据复制的过程中为了保持一致性,就不能对外提供服务,所以这段时间就无法满足可用性的问题。
实际工程通常会采取一些折中措施,比如并不保证强一致性,只保证最终一致性,什么意思呢?比如,有三个数据节点互为备份,某份数据在节点A更改后,需要将更改复制到节点B和C,假设复制过程中,有客户访问该数据,那么此时不保证是一致的,即访问A节点的用户得到的是最新数据,而访问B和C节点的用户得到是老数据,但是最终,数据会复制完成,所以最终A、B、C三个节点的数据是一致的。(比如像文章点赞这种数据,延迟下也没有关系啦)