CAP定理

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

一致性

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

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

可用性

可用性是指客户端拜访数据时,零碎是否能在失常响应工夫内,返回预期的后果。

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

分区容忍性

分区容忍性是指零碎中某节点或者网络分区产生故障的时候,不会影响零碎的持续运作。

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

CAP不可得兼

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

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

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

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

CAP的取舍

举一个电商网站的例子,当用户下单后,须要在订单零碎中新建订单,而后去库存零碎中缩小库存。

假如订单零碎胜利新建了订单,而库存零碎却没有可能胜利缩小库存,则会呈现超卖的状况,所以须要进行弥补操作。

  1. 如果抉择的是CP,即保障一致性和分区容错性,则订单创立后会始终期待库存零碎中的弥补操作实现后,即库存缩小后才返回创立订单胜利的后果
  2. 如果抉择的是AP,即保障可用性和分区容错性,则订单创立后会间接返回创立订单胜利的后果,而不必期待库存零碎中的弥补操作实现

所以,基于CP的架构会给用户较差的体验,因为他不得不等到所有的一致性操作实现后能力持续其余操作,然而它很平安。而基于AP的架构会给用户足够疾速的响应,保障用户的应用体验,然而一致性就须要额定的思考。

CP次要用于银行、金融、证券等对数据一致性要求很高的零碎中,比方在线领取之后的转圈圈;
AP次要用于互联网利用中。

参考鸣谢

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