关于CAP定理的一点说明

此生再无相见时 提交于 2019-11-26 13:21:15

一、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.放弃一致性
    其实就如上文一直提到的强一致性,这里的放弃一致性也是指强一致性,即并不是说完全不需要数据一致性,而是指保留数据的最终一致性。即承诺各分区的数据最终会达到一个一致的状态,而这个达到最终一致性的时间往往取决于系统的设计,主要包括数据副本的复制时间长短等。
    
    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!