CAP理论

1、CAP原则

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

在绝大多数分布式系统场景中,通常选择AP,牺牲强一致性来换取系统的高可用性,系统往往只需要保证最终一致性即可。

2、CAP详细介绍

2.1、Consistency(一致性)

在分布式环境中,一致性是指数据在多个副本之间能否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
对于一个将数据副本分布在不同分布式节点上的系统来说,如果对一个节点的数据进行了更新操作,并且更新成功后。却没有使得第二个节点的数据得到相应的更新。于是对第二个节点的数据进行读取的时候,获取的依然是老数据(或称为脏数据),这是典型的分布式数据不一致的情况
在分布式系统中,如果能做到针对一个数据项的更新操作执行成功后,所有的节点都能读取到其最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性)

2.2、Availability(可用性)

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。这里的重点是"有限的时间内"和"返回结果"。

  • “有限的时间内”
    “有限的时间内” 是指对于一个请求操作,系统必须能够在指定的时间(即响应时间)内返回对应的处理结果。如果超过了这个时间范围,那么系统就被认为是不可用的。另外"有限的时间内" 是一个系统在设计之初就设定好的系统运行指标,不同的系统之间会有很大的不同。

  • “返回结果”
    "返回结果"是可用性的另一个非常重要的指标,它要求系统完成对请求的处理后,返回一个正常的响应结果。正常的响应结果通常能明确的反应出对请求的处理结果,成功还是失败,而不是一个让请求方困惑的返回结果。

2.3、Partition tolerance(分区容错性)

分区容错性约束了一个分布式系统需要具有如下特性:分布式系统在遇到任何网络分区故障的时候,仍然能够保证对外提供满足可用性和一致性的服务,除非是整个网络环境都发生了故障。
网络分区是指在分布式系统中,不同的节点分布在不同的子网络中(机房或异地网络),由于一些原因,导致这些子网络之间出现网络不连通的状况,但是各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成若干个独立的区域。

需要注意的是:组成一个分布式系统的每个节点的加入或者退出,都可以看做是一个网络分区。

3、CAP为什么不能同时满足?

3.1、放弃其中一项

一个分布式系统,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)、我们都说无法满足三项,只能满足其中的两项。因此在CPA理论的实际运用中,我们需要牺牲其中的一项,下表是对牺牲其中一项特性的场景说明。

放弃CPA理论说明
放弃P如果希望能够避免系统出现分区容错性问题,一种较为简单的做法就是将所有的数据(或者是那些和事务有关的数据)统一都放在一个分布式节点上。这样的做法虽然无法保证系统100%不会出错,但至少不会遇到因为网络分区带来的负面影响。同时要注意的是,放弃P的同时,就意味着放弃了系统的可扩展性
放弃A相对于放弃P来说,放弃A则正好相反,其做法是一旦系统遇到网络分区或者其他故障的时候,那么受到影响的服务必须等待一定的时间,在等待期间系统无法对外提供正常的服务,即系统不可用
放弃C这里说的放弃C一致性,并不是完全不需要数据一致性,如果真是这样的话,那么系统的数据将毫无意义,整个系统也是没有价值的。事实上放弃C一致性,通常指的是放弃数据的强一致性,而保证数据的最终一致性。这样的系统无法保证数据的实时一致性,而能够承诺的是数据最终会达到一致的状态。这就引入了一个时间窗口的概念,具体多久能够达到数据的最终一致状态,取决于系统的设计指标。

3.2、总结

从CAP理论中,我们可以看出,对于一个分布式系统不可能同时满足一致性、可用性、分区容错性、三个需求。另一个方面,需要明确的一点是,对于一个分布式系统而言,分区容错性可以说是一个最基本的要求。为什么这样说,因为分布式系统与单机系统不同,分布式系统中不同组件必然部署到不同的节点上,否则也就称不上分布式系统了,它涉及到多节点间的通讯和交互,节点间的分区故障是必然发生的。所以在分布式系统中分区容错性是必须要考虑的,因此架构师通常根据业务的特点在C、A中做出平衡。

  • 当一套系统在发生分区故障后,客户端的任何请求都被拒绝或者超时。但是可用的时候,系统的每个节点总是会返回一致的数据,则这套系统就是 CP 系统,经典的比如 Zookeeper。

  • 如果一套系统发生分区故障后,客户端依然可以访问系统,但是获取的数据有的是新的,有的还是老数据,那么这套系统就是 AP 系统,经典的比如 Eureka。

4、对CAP理论的误解

  • 因为 CAP 理论,分布式系统肯定彻底放弃了 C 或者 A 中的一个
    这是错误的,P 这种问题发生的概率比较低,所以当没有出现分区问题的时候,系统应该尽可能的保证数据一致性C和可用性A。针对分布式系统中不同组件服务的业务特点,会优先保证C或者A,然后再尽可能保证另一个。

  • C 和 A 之间的选择是针对整个分布式系统的,只能整体考虑选择 C 还是 A
    这是错误的,当分区发生的时候,对一致性和可用性的抉择是局部性的,不是针对整个系统的。当我们请求支付的时候,账务流水的要求是必须强一致性的,这个时候你就要考虑保证C的前提下,尽可能保证A;当请求做一些个人信息修改的时候,如会员别名,这个时候你可以考虑保证A的前提下,尽可能保证C;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值