分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?
文章目录
- 前言
- 分布式系统的特点
- 分布式系统技术是用来解决什么问题的呢?
- CAP代表什么含义
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition Tolerance)
- CAP理论的证明
- CAP理论的应用
- CP和AP架构的取舍
- CP架构:放弃可用性,追求一致性和分区容错性
- AP架构:放弃强一致性,追求分区容错性和可用性
- 结语
前言
为什么CAP理论中的三个指标不能同时满足呢?春暖花开、鸟语花香,莫要虚度这明媚的春天,一起学一学分布式CAP理论吧~本文主要会对以下问题进行介绍:
- 分布式系统有什么特点?
- CAP理论的含义是什么?
- 为什么CAP三者不能同时满足?
- CAP理论怎么应用?
(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)
分布式系统的特点
对于分布式系统最简单的理解,就是一组计算机工作,但最终以一台计算机的用户身份显示。简单说,就是由多个不同业务的子系统,共同组成在用户眼中就是一个系统的模式。但这些机器具有共享状态,并不会因其中一个系统节点故障而影响整个系统。
分布式系统技术是用来解决什么问题的呢?
分布式系统技术是用来解决集中式架构的性能瓶颈问题,其核心是可扩展性。举个简单的栗子:
假如有个大学生想做一个XX校园系统,这时他需要对于系统的数据存储配置只有一个数据库,也就是说,服务器与数据库之间的交互是实时且一对一的:
然而这个XX校园系统在版本更新的路上披荆斩棘,从鸡肋Demo系统升级到全省高校都在使用的校园系统,这时如果还将数据放在同一个数据库或者数据表中,会在查询过程中消耗过多的时间,使得响应时间过长,导致用户体验不良,所以进行了分库操作:
假如依照用户的名称来进行分库,服务器需要通过代理服务器选定访问数据库。在这里,就需要两个系统来进行向数据库请求数据的操作。
所以,分布式系统是通过对服务、存储的扩展,来提高系统的处理能力。通过对多台服务器协同工作,来完成单台服务器无法处理的任务,如高并发或大数据量的任务。
因为分布式系统的复杂性,也可能会出现结点之间通信失败,网络分区失败、数据不一致等问题。所以分布式系统也可能出现对单点故障、无状态的需要。
单点故障
一般在系统中某个组件一旦失效,整个系统就无法工作了,为了避免这种情况,往往会将单点故障作为分布式系统的设计目标之一,因为单点故障,意味着单点不影响整体。
无状态
服务的无状态,是为了满足部分机器宕机也不影响全部,可用于随时进行扩展的需求。
那么在设计分布式系统时需要什么理论作为指导思想呢?这时,让我们掌声欢迎CAP理论出场!
CAP代表什么含义
CAP分别是指一致性(Consistency)、可用性(Availablity)、分区容忍性(Partition Tolerance),一般分布式系统只能满足其三项中的两项。
一致性(Consistency)
一致性是指“所有节点同时看到相同的数据”,也就是说在更新操作成功并返回到客户端后,所有节点在同一时间的数据完全一致,所有节点所拥有的数据都是最新版本。
可用性(Availability)
可用性指的是“任何时候,读写都是成功的”,即服务一直可用,而且响应时间在正常范围内。比如系统稳定性到了3个9、4个9,即99.9%、99.99%。
这里的N个9对应的就是对可用性的一种描述,叫做SLA,即服务水平协议。
分区容错性(Partition Tolerance)
分区容错性是指“当部分结点出现消息丢失,或分区故障时,分布式系统仍然能够继续运行”,即系统容忍网络出现分区,且在遇到某个结点或网络分区之间出现不可达的情况下,仍然能够对外提供满足一致性和可用性的服务。
在分布式系统中,P的满足是基本要素,一般是在CP或AP中进行选择,实现更好的C或者提升A的性能。
那么CAP理论中的一致性、可用性和分区容忍性不能同时满足呢?
CAP理论的证明
为什么CAP不能同时满足呢?
下面可以通过反证法来证明。
假如有一个实际场景,CAP三者都可以同时满足。由于允许P的存在,则一定存在服务器(Server)之间的丢包,如此则不能保证C。
- 在没有分区的情况下,如果ClientA向Server1发送修改X=1的指令,在进行事务机制将Server1的X修改为1后,Client1从Server1获取到的X也会是1。因为Client读取到的值一定是最新值,所以这里符合一致性,但显然不具备分区容错性,也就是说,如果服务器宕机了,那么读写就一定会失败。
- 在有分区的情况下,如果ClientA向Server1和Server2发送修改X=1的指令,然而这指令并没有成功发送给Server2,那么Client1和Client从服务器中读取到的X值就不一样了。虽然这里满足了分区容错性,但并不满足一致性,而且如果为了保证一致性,那么在发送指令给服务器时,如果有一个命令没有成功发送,所有服务器都不能接收这个请求,这无疑降低了可用性。
所以这里,可以对CAP的定义有更加明确的声明:
一致性(Consistence)
一致性被称为原子对象,任何的读写都应该看起来像是“原子”的,或串行的。
写入数据库后读取数据,一定能读到前面写的内容,所有的读写请求都像是全局排序依次进行。
可用性(Availability)
对任何非失败节点都应该在有限的时间内给出请求的回应(请求的可中止性)。
分区容错性(Partition Tolerance)
允许节点之间丢失任意多的消息,当网络分区发生时,节点之间的消息可能会完全丢失。
CAP理论的应用
- 在架构设计中,不要把时间浪费在如何设计能满足这三者的完美分布式系统上,应当合理取舍。只能三者取其二。
- 不同业务对于一致性的要求是不一样的。像是微博点赞,用户对不一致是不敏感的,能容忍相对长的一段时间数据不一致,只要做好交互,并不影响体验;而电商商品价格的显示是具有强一致性的,如果不能保证修改商品价格后的数据一致性,对交易是有很大影响的。
- 在CAP理论中并没有将网络延迟需要花费的时间考虑进来,因为只要是事务提交,节点间数据复制是一定要花时间的。
CP和AP架构的取舍
其实在实际工程中,可用性和一致性并不是完全对立的,我们往往关注的是如何在保持相对一致性的前提下,提高系统的可用性。
至于是使用CP或者AP架构,则取决于业务对一致性的要求。
CP架构:放弃可用性,追求一致性和分区容错性
举个栗子,ZooKeeper就是采用了CP一致性。
ZooKeeper是一个分布式的服务框架,主要用来解决分布式集群中应用系统的协调和移置性问题。在ZooKeeper中,对应每一个事务操作请求,ZooKeeper都会为其分配一个全局唯一的事务ID,每个事务ID对应一次更新操作,从这些事务ID中可以间接识别出ZooKeeper处理这些事务操作请求的全局顺序。
AP架构:放弃强一致性,追求分区容错性和可用性
举个栗子,Eureka就采用了AP可用性。
Eureka是Spring Cloud微服务技术栈中的服务发现组件。
Eureka的各个节点都是平等的,几个节点挂掉不影响正常节点的工作。剩余节点依然可以提供注册和查询服务,只要有一台Eureka在,就能保证注册服务可用。只不过查看的信息可能不是最新版本,不保证一致性。
分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?相关推荐
- 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 分布式理论:CAP是三选二吗?
分布式系统的 CAP 理论:首先把分布式系统中的三个特性进行了如下归纳: ● 一致性(C): 在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ● 可用 ...
- 【分布式】1、CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 深入理解分布式、微服务中CAP定律和BASE理论
一.背景 随着互联网的快速蔓延,各种传统项目(单体应用的架构)已经不能够满足当前各种复杂的需求场景,都逐渐向分布式服务.微服务做转换,而如今分布式.微服务架构已经普遍存在互联网公司的项目中,像大型电商 ...
- 分布式理论(一) - CAP定理
前言 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性)这三个基本需求,最 ...
- 分布式理论(一)CAP 理论
分布式理论(一) CAP理论 一.CAP理论前言 CAP原则又称为CAP理论,主要思想是在任何一个分布式系统中都无法同时满足CAP. C(Consistency):表示一致性,所有的节点同一时间看到的 ...
- 深入理解分布式技术 - 理论基石 CAP
文章目录 概要 CAP Waht's CAP Prove CAP CAP 理论的应用 CP 和 AP 架构的取舍 概要 现如今,数据规模越来越大,应用系统需要处理海量数据的同时还需要确保高并发下系统性 ...
- 学习分布式不得不会的CAP理论
2018年07月16日 11:52:59 Hollis在CSDN 阅读数:161更多 个人分类: 架构 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP ...
- 常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)
一.CAP理论与BASE理论: 1.什么是 CAP 理论: C:Consistency 一致性:指强一致性,分布式系统中的所有节点在同一时刻具有同样的值.都是最新的数据副本,一致性保证了不管向哪台服务 ...
最新文章
- centeros7网络服务无法启动_Linux网络服务02——DHCP原理与配置
- onsubmit阻止表单提交
- html 乱码_html小坑:网页变成乱码
- Redis流量控制策略
- linux vim 添加注释_vim基础教程
- [LibTorch] 参数注册 模块注册
- ASP.NET Core管道深度剖析
- eclipse-中如何显示工程树形结构
- 【ML小结3】线性回归与逻辑回归、softmax回归
- MySQL独立表空间、共享表空间
- java实现在线预览--poi实现word、excel、ppt转html
- ie加载项存在残留是什么_残余IE加载项无法修复
- 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。
- 朋友圈点赞、发红包 测试用例的设计点
- 征文评优中|小鱼再进化!OceanBase 4.1免费体验
- 开发一个分销小程序需要多少钱?
- java 统计子字符串个数_Leecode统计子串个数(java)
- css完整总结:第二篇(尺寸,外补白,内补白,边框,背景,颜色,字体,文本,文本装饰)
- python读word文档计算字数,Python统计字数并将结果输入到TXT文件中
- 做个自己站内搜索引擎