前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简明入门讲义——CAP 理论,鱼和熊掌不可兼得

简明入门讲义——CAP 理论,鱼和熊掌不可兼得

作者头像
benny
发布2021-06-17 20:51:30
4340
发布2021-06-17 20:51:30
举报

Shot by @FesonX

CAP 理论缘起

开发人员常常要将对性能与扩展性的思考体现在代码中 出现性能(Performance)问题,即单个用户请求是缓慢的 出现扩展(Scalability)问题,即单个用户请求是满足要求的,但系统在高负载下处理用户请求是缓慢的。

如果这个服务是可扩展的,则随着系统资源的增加,服务性能是成比例提升的

随着可扩展服务系统资源的增加(这里指的是横向扩展(Horizontal Scalability)),系统就会开始变得复杂,出现以往单机不需要考虑的问题。

CAP 概述

于是就有了 CAP 理论:在一个分布式系统中,节点彼此连接共享数据,你有且只能使系统保证一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三个中的两个

一致性:从任一节点读取返回的都是客户端最近一次的写入结果

可用性:访问任一在线(No-Failing)节点均可以在一定时间范围内得到返回结果,而不会产生超时或其他错误

分区容错性:发生网络分区时,系统依然可以运作

实际上的 CAP

分布式计算的谬误

理论上可以满足 CP, AP, AC。然而这是在理想的网络状态下。Sun 公司的 Arnon Rotem Gal Oz 提出分布式计算的谬误(Fallacies of distributed computing),理想的网络是:

1.网络是可靠的2.网络延迟为 03.带宽是无限的4.网络是安全的5.网络拓扑是不变的6.系统只有一个管理员7.传输损耗为 08.网络是同构的 (homogeneous)

如果不满足上述的任一条件,那么必须容忍 P,因此实际的 CAP 理论是:在网络分区下,我们只能选择保证一致性或者可用性的一个

现实中的伪 CAP

而在真实的生产环境呢?可能又不一样了!一致性可能退化成了最终一致性,而可用性也只是部分节点可用。

对于一致性,CAP 理论讲的是任一节点都返回最近一次写入结果。而大部分使用共识算法的软件例如 RabbitMQ 的 Quorum Queue 及 Kafka Topic,只要保证多数节点写入成功,即对外允许读取了。包括被外界看做 CP 系统的 Zookeeper 默认也不会在读操作前发送 Sync 命令来保证 CAP 的一致性。对于一些系统而言,延迟更无法忍受。

对于可用性,在网络分区发生时,任一在线的节点不一定能提供服务。例如 RabbitMQ Quorum Queue 的策略是多数节点分区继续工作,少数节点即使已有客户端连接,也会被断开,停止对外提供服务

Ref

1.Understanding Latency versus Throughput(https://community.cadence.com/cadence_blogs_8/b/sd/posts/understanding-latency-vs-throughput)2.Please stop calling databases CP or AP (https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html)3.CAP theorem - Wikipedia(https://en.wikipedia.org/wiki/CAP_theorem)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的碎碎念 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CAP 理论缘起
  • CAP 概述
  • 实际上的 CAP
    • 分布式计算的谬误
      • 现实中的伪 CAP
      • Ref
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档