一、CAP是什么
CAP是理解分布式系统的基础,它其实是三个英文单词Consistency,Availability,Partition tolerance的缩写,这三个英文单词也就是CAP的三大组成部分。
提出这个指标的人指出:这三个指标不能同时做到。这就是著名的CAP定理。
下面我们来说说这三个指标,注意不考虑单服务器的情况。
1.Consistency,一致性
一致性意味着当用户发起写操作后,所有的读操作都必须返回该值。这就要求用户在向A服务器发起写操作成功后,A服务器必须向与它相关联的B服务器发送一条消息,要求B服务器也完成相同的写操作。这样后面的用户发起读操作时,无论读取的是哪个服务器的信息,得到的数据都是一样的,这就是一致性。
2.Availability,可用性
即有求必应,服务器收到请求,就必须在有限的时间内返回结果给用户。
3.Partition tolerance,分区容错
即分布式系统在遇到任何网络分区故障的时候,仍然能够保证提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。
二、主要矛盾
对于一个分布式系统架构而言,分区容错性是一个最基本的要求,而如果不满足分区容错性,那实际上意味着如果分布式系统某个分区出故障了,整个系统都会停掉,这和分布式架构的设计理念不符。所以其实CAP原理的主要矛盾在于一致性和可用性。
那为什么一致性和可用性无法同时成立呢?
首先,假设我们拥有A和B两台数据服务器,那么如果要保证一致性,A在写入操作后,对B进行同步操作完成之前,这段时间必然B是不可用的;而如果要保证可用性,此时读取B时数据必然又是不一致的。所以实际上架构师们只能二择其一,根据业务的优先级选择保证高可用或强一致性。
三、应用
1.放弃可用性
即一旦某个网络分区法师故障,那么受到影响的服务在等待期间,整个系统都无法对外提供正常服务,等待故障分区维护完成以保证强一致性。
2.放弃一致性
其实就如上文一直提到的强一致性,这里的放弃一致性也是指强一致性,即并不是说完全不需要数据一致性,而是指保留数据的最终一致性。即承诺各分区的数据最终会达到一个一致的状态,而这个达到最终一致性的时间往往取决于系统的设计,主要包括数据副本的复制时间长短等。
关于CAP定理的一点说明
最新推荐文章于 2020-03-23 13:09:29 发布