一篇文章读懂什么是CAP(基础入门)

举报
辰兮 发表于 2022/09/24 23:30:47 2022/09/24
【摘要】 【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、...

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、什么是CAP

Consistency (一致性)

一致性是指“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。

Availability (可用性):

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

Partition Tolerance (分区容错性):

分区容错性是说“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

It states, that though its desirable to have Consistency, High-Availability and Partition-tolerance in every system, 
unfortunately no system can achieve all three at the same time.
在分布式系统的设计中,没有一种设计可以同时满足一致性,可用性,分区容错性 3个特性 

二、业务场景

2.1 权衡取舍

分布式系统中,分区容错性必不可少,因为需要总是假设网络是不可靠的。

在这里插入图片描述
其实我们也只会对分布式系统谈分区容错性,单体系统不存在此概念

所以CAP 理论实际上是要在可用性和一致性之间做权衡。

可用性和一致性往往是冲突的,很难使它们同时满足。在多个节点之间进行数据同步时

● CP:为了保证一致性,不能访问未同步完成的节点,也就失去了部分可用性;
● AP:为了保证可用性,允许读取所有节点的数据,但是数据可能不一致。

2.2 AP应用案例

举例:比如分布式系统中的订单系统和库存系统一般是两套系统,正常是新建订单后调用库存系统再减少库存,再返回给用户,但是这样执行流程太长,用户可能等待时间,所以一般用户下单后我们采用异步扣除库存【解耦】,放弃了数据的高一致性,保障了用户的使用流畅性
在这里插入图片描述
继续分析:如果库存系统挂掉,订单系统也是可以正常下单的,不会影响用户体验

如果最后数据不一致怎么解决:我们可以通过日志的形式去记录对应的订单信息,同样会有专门的运营人员对数据,如果数据不一致,我们可以通过人工补偿等方法实现最终一致性


相同举例:比如用户抢购的应用场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。

2.3 CP应用案例

举例: 比如我们在涉及到银行金钱相关系统注册验证,转账等等,可能会发现等待时间较长,这里我们就要保证数据的高度一致性,用户可以适当等待也不应该照成系统数据错误。


📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

📚愿我们奔赴在各自的热爱里!

文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。

原文链接:blessing.blog.csdn.net/article/details/126437820

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。