CAP定理

256 阅读2分钟

CAP定理

CAP定理指的是在一个分布式系统中,一致性(Consistency)、可用性(Availibility)、分区容错性(Partition tolerance)不可能三者都兼顾,最多只能同时实现其中的两点。

一致性

一致性是指在分布式系统中,所有的数据备份,在同一个时刻具有相同的值。

也就是说,客户端访问所有的节点,同一时刻的数据应当是完全一致的。

可用性

可用性是指客户端访问数据时,系统是否能在正常响应时间内,返回预期的结果。

也就是说,不管是成功还是失败,都应该有预期的响应,而不是卡死在那里。

分区容错性

分区容忍性是指系统中某节点或者网络分区发生故障的时候,不会影响系统的继续运作。

也就是说,不能因为一颗老鼠屎而坏了一锅汤。

CAP不可得兼

鱼我所欲也,熊掌亦我所欲也,二者不可得兼,舍鱼而取熊掌者也。

CAP是不可能同时实现的,必须去做取舍。
要么实现AP,要么实现CP,要么实现CA。

而在分布式系统中,分区容错性是最为重要的,谁也不能保证这么大个系统不出错不是?
所以一般来说,P是一定要保证的,一般不会考虑使用CA。

那什么时候选择AP,什么时候又选择CP呢?

CAP的取舍

举一个电商网站的例子,当用户下单后,需要在订单系统中新建订单,然后去库存系统中减少库存。

假设订单系统成功新建了订单,而库存系统却没有能够成功减少库存,则会出现超卖的情况,所以需要进行补偿操作。

  1. 如果选择的是CP,即保证一致性和分区容错性,则订单创建后会一直等待库存系统中的补偿操作完成后,即库存减少后才返回创建订单成功的结果
  2. 如果选择的是AP,即保证可用性和分区容错性,则订单创建后会直接返回创建订单成功的结果,而不用等待库存系统中的补偿操作完成

所以,基于CP的架构会给用户较差的体验,因为他不得不等到所有的一致性操作完成后才能继续其他操作,但是它很安全。而基于AP的架构会给用户足够快速的响应,保证用户的使用体验,但是一致性就需要额外的考虑。

CP主要用于银行、金融、证券等对数据一致性要求很高的系统中,比如在线支付之后的转圈圈;
AP主要用于互联网应用中。

参考引用

哔哩哔哩:www.bilibili.com/vide...