【辰兮要努力】: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应用案例

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


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

  1. 一篇文章读懂MySQL的各种联合查询

    一篇文章读懂MySQL的各种联合查询 联合查询是指将两个或两个以上的表的数据根据一定的条件合并在一起! 联合查询主要有以下几种方式: 全连接:将一张表的数据与另外一张表的数据彼此交叉联合查询出来 举例 ...

  2. 一篇文章读懂“天猫无货源店群”,这是一个怎么样的项目?

    这是个什么样的项目?(有经验的人可以自动跳过) 天猫店群,一种通过盗取他人天猫店铺内的产品,来进行盈利的电商操作模式,因为不需要我们自己有货,所以被也被称为无货源模式.在天猫上操作就叫天猫无货源店群, ...

  3. 一篇文章让你从JAVA零基础入门`OOP`编程12.19

    一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...

  4. 一篇文章让你从JAVA零基础入门`OOP`编程12.20

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.png)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  5. 一期完结《一篇文章让你从JAVA零基础入门`OOP`编程》12.21

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.jpg)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  6. 一期完结《一篇文章让你从HTML零基础入门前端开发》12.28

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRcXH9FM-1672214813897)(./assets/%E7%8E%84%E5%AD%90Shaer-%E4% ...

  7. 8问8答,一篇文章读懂空间音效

    近日,第一届网易集团创新奖评选落下帷幕,网易智企"逼近人耳极限-音频通话"项目从众多参赛作品中脱颖而出,荣获"0-1创新奖"三等奖. 此次获奖的项目诞生于网易智 ...

  8. java多线程 模型_一篇文章读懂Java多线程模型

    要真正了解Java的多线程,我们还要从进程和线程的概念说起 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期 ...

  9. 一篇文章读懂Java类加载器

    Java类加载器算是一个老生常谈的问题,大多Java工程师也都对其中的知识点倒背如流,最近在看源码的时候发现有一些细节的地方理解还是比较模糊,正好写一篇文章梳理一下. 关于Java类加载器的知识,网上 ...

最新文章

  1. 阿里巴巴公布第二财季报告,净利润同比增长71%
  2. 【Python】序列通用操作
  3. ajax异步传输代码,Ajax同步与异步传输的示例代码
  4. bzoj1935: [Shoi2007]Tree 园丁的烦恼
  5. Docker镜像提交命令commit的工作原理和使用方法
  6. C#利用反射将Datatable转化为指定实体类ListT
  7. Request header field content-type is not allowed by Access-Control-Allow-Headers(请求头设置问题)
  8. Unity超基础学习笔记(四)
  9. 一则故事表达:并发,并行,同步,异步,线程,多线程
  10. cmd合并多个ts文件,ffmpeg快速转ts为mp4文件,通过m3u8合并文件
  11. Asp.Net 2.0 发布问题(转)
  12. 元器件封装大全:图解+文字详述
  13. 缓和曲线计算机编程,缓和曲线坐标计算软件
  14. 智能制造-汽车行业线体工艺模拟仿真应用
  15. SGG Trans【Bridging Knowledge Graphsto Generate Scene Graphs】
  16. linux英文转换成中文
  17. 大话设计模式:第27章 解释器模式
  18. JAVA 并发编程学习总结
  19. uni-app 介绍,什么是uni-app,它是干嘛的
  20. Auto-Exposure Fusion for Single-Image Shadow Removal——论文阅读

热门文章

  1. 180°舵机角度控制(mg996 + stm32F1)
  2. autojs非按键精灵怎么做游戏脚本,来,给你游戏识图点击实例
  3. 光脚丫思考Vue3与实战:第01章 初步认识Vue3
  4. 怎么判断两个对象相等
  5. 百度搜索引擎压力测试报告
  6. Win7的不关闭防火墙下的FTP设置
  7. 1.1小程序内置tabbar和自定义tabbar区别
  8. 大数据企业战略规划高级培训课程
  9. Minecraft Skin
  10. 勾股数元组( 如果3个正整数(a,b,c)满足a2 + b2 = c2的关系)