详解分布式CAP定理

什么是CAP定理?


Consistency一致性: 指数据的一致性,特指分布式系统中数据的一致性
Availability:可用性:指服务的高可用,特指分布式系统中服务的高可用,某个服务瘫痪不影响整个分布式系统的运行。
Partition tolerance:分区容错性: 指网络故障,特指分布式系统中,服务之间出现网络故障,整个分布式系统仍然保持可用性和一致性。

一句话概括CAP:在分布式网络中,网络故障,服务瘫痪,整个系统的数据仍然保持一致性

举例分析CAP

在这里插入图片描述
张三有100元优惠券,在淘宝买了件衣服。
1.怎么体现C数据一致性
整个分布式系统中,一致性体现这笔订单,必须扣除100元优惠券
2.怎么体现A可用性
整个分布式系统中,可用性体现在张三下订单的时候,如果订单服务或卡卷服务瘫痪了,这时不能影响张三下订单。(一般做法是采用集群部署)
3.怎么体现P分区容错性?
整个分布式系统中,分区容错体现在张三下订单的时候,突然订单服务和卡卷服务之间的网络断开了,但是不能影响张三下订单。

什么是分区?
在断网的情况下,2台系统变成了独立的网络,各自访问不了,这种情况就是分区。
在分区的情况下,如果保持数据一致性和系统可靠性那就是分区容错性了。

CAP技术实现,所面临的困惑

在分布式系统中,出现网络故障P,服务瘫痪A,整个系统的数据仍然保持一致性C,这是无法做到的。
相对可以实现的方案是CAP中任选其二
CP,AP和CA
在这里插入图片描述
当服务之间出现网络故障的情况下:
1.如何保证订单服务和卡卷服务高可用?
2.下一笔订单同时扣除100元优惠券如何实现?

分布式系统的解决方案:

1.CAP牺牲一致性(AP):保证高可用(保证订单服务可以正常访问,保证卡卷服务可以正常访问,是牺牲了数据的一致性)张三下单成功,但是不扣除100优惠券,这种情况下,张三下订单成功后再去查看100元,居然还存在。
如果解决?
一般的做法是,当网络恢复正常的情况下,订单服务重试请求卡卷服务,再扣除100元优惠卷。
2.CAP牺牲可靠性(CP):保证数据一致性,即为了保证数据的强一致性,当张三来下订单的时候,提示“系统维护中”。等服务间的网络恢复正常后,张三再来下订单。

如果不要P,只要CA可行吗?
不要p分区,即不允许网络出现故障,这是不可能实现的。
所以在分布式系统中,是不存在CA
即使单体系统也做不到CA,因为单体系统也会出现单一故障。

zooKeeper和eureka的CAP原理

zooKeeper是CP的原理:即保证了数据一致性,牺牲了可以用性
eureka是AP的原理:即保证了可用性,却牺牲了一致性

感谢观看!

发布了80 篇原创文章 · 获赞 7 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_42332821/article/details/104268600