CAP 定理
CAP 定理指的是在一个分布式系统中,一致性 (Consistency)、可用性(Availibility)、分区容错性(Partition tolerance) 不可能三者都兼顾,最多只能同时实现其中的两点。
一致性
一致性是指在分布式系统中,所有的数据备份,在同一个时刻具备雷同的值。
也就是说,客户端拜访所有的节点,同一时刻的数据该当是完全一致的。
可用性
可用性是指客户端拜访数据时,零碎是否能在失常响应工夫内,返回预期的后果。
也就是说,不论是胜利还是失败,都应该有预期的响应,而不是卡死在那里。
分区容忍性
分区容忍性是指零碎中某节点或者网络分区产生故障的时候,不会影响零碎的持续运作。
也就是说,不能因为一颗老鼠屎而坏了一锅汤。
CAP 不可得兼
鱼我所欲也,熊掌亦我所欲也,二者不可得兼,舍鱼而取熊掌者也。
CAP 是不可能同时实现的,必须去做取舍。
要么实现 AP,要么实现 CP,要么实现 CA。
而在分布式系统中,分区容错性是最为重要的,谁也不能保障这么大个零碎不出错不是?
所以一般来说,P 是肯定要保障的,个别不会思考应用 CA。
那什么时候抉择 AP,什么时候又抉择 CP 呢?
CAP 的取舍
举一个电商网站的例子,当用户下单后,须要在订单零碎中新建订单,而后去库存零碎中缩小库存。
假如订单零碎胜利新建了订单,而库存零碎却没有可能胜利缩小库存,则会呈现超卖的状况,所以须要进行弥补操作。
- 如果抉择的是 CP,即保障一致性和分区容错性,则订单创立后会始终期待库存零碎中的弥补操作实现后,即库存缩小后才返回创立订单胜利的后果
- 如果抉择的是 AP,即保障可用性和分区容错性,则订单创立后会间接返回创立订单胜利的后果,而不必期待库存零碎中的弥补操作实现
所以,基于 CP 的架构会给用户较差的体验,因为他不得不等到所有的一致性操作实现后能力持续其余操作,然而它很平安。而基于 AP 的架构会给用户足够疾速的响应,保障用户的应用体验,然而一致性就须要额定的思考。
CP 次要用于银行、金融、证券等对数据一致性要求很高的零碎中,比方在线领取之后的转圈圈;
AP 次要用于互联网利用中。
参考鸣谢
哔哩哔哩:https://www.bilibili.com/vide…