为什么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在,就能保证注册服务可用。只不过查看的信息可能不是最新版本,不保证一致性。
————————————————
原文链接:https://blog.csdn.net/NYfor2017/article/details/105285252
相关推荐
Brewer教授认为,在任何分布式系统中,这三个特性不可能同时得到完全的保证,最多只能同时满足其中的两个。 #### 二、CAP理论背景 Eric A. Brewer教授不仅是加州大学伯克利分校的教授,也是Inktomi公司的创始人兼...
该理论指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个特性最多只能同时满足两个,不可能同时实现三个。 1. **一致性**(Consistency):保证每次读取...
该理论指出,在一个分布式计算系统中,Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容错性)这三个特性不可兼得,最多只能同时满足其中两项。这一点对于分布式系统的设计和开发具有...
CAP 理论是由 Eric Brewer 于 2000 年提出的,它指出在分布式系统中, Impossible同时满足以下三个条件:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。这三个条件是分布式...
该定理指出,在一个分布式系统中,不可能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个属性。具体来说: - **一致性(C)**:指每次读操作都能返回最新的写入...
**1.2 为什么CAP三者不可兼得** 在一个理想的分布式系统中,我们希望同时实现强一致性、可用性和分区容忍性。然而,根据CAP理论,这三个属性之间存在冲突,因此在实际部署中,通常只能满足其中两个属性。具体分析...
2. CAP定理:在分布式系统中,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。设计分布式系统时,需要根据业务需求权衡这三者。 3. BASE理论:在大规模分布式...
7. CAP 理论:CAP 理论指出,在分布式系统中,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。通常,系统需要在 CA 或 AP 之间做出选择,因为网络分区是分布式...
CAP理论指出,一个分布式系统无法同时满足一致性、可用性和分区容错性,必须在三者之间做出权衡。 5. 负载均衡:通过策略将工作负载分散到多台服务器上,以优化资源利用率,提高系统响应时间和吞吐量。负载均衡可以...
CAP理论是分布式系统设计中的核心概念,它指出在分布式环境中,任何系统都无法同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个特性。当网络分区发生时,系统必须...
此外,还要熟悉CAP定理(一致性、可用性、分区容错性三者不可兼得)和BASE理论(基本可用、软状态、最终一致性)。 2. 分布式一致性:研究如何在分布式环境中保证数据的一致性,如Raft、Paxos等共识算法。这些算法...
CAP 理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得,必须有所取舍。传统数据库保证了强一致性和高可用性,但这也使得数据库的扩展能力...
而传统数据库保证了强一致性(ACID模型)和高可用性,所以要想实现一个分布式数据库集群非常困难,这也解释了为什么数据库的扩展能力十分有限。而近年来不断发展壮大的NoSQL运动,就是通过牺牲强一致性,采用BASE模型...
- CAP理论指出,一个分布式系统不能同时满足一致性、可用性和分区容忍性这三个基本需求,必须在其中做出权衡。 - 一致性模型:强一致性、弱一致性、最终一致性等,不同的模型适用于不同场景。 4. 分布式数据存储...
CAP定理是分布式系统设计的基础,指出在分布式系统中无法同时满足一致性(C)、可用性(A)和分区容错性(P)。根据业务需求,开发者通常需要在这三者之间做出权衡。例如,很多微服务架构更倾向于AP,允许短暂的数据...
CAP理论是分布式系统设计中的一项基本原则,它指出在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项特性最多只能同时满足两项,不可能三者兼得。...
CAP理论,也称为Brewer的猜想,是由加州大学伯克利分校教授Eric Brewer在2000年的PODC会议上提出的,它描述了分布式计算系统中三个基本保证:一致性(Consistency)、可用性(Availability)和分区容错性(Partition...
CAP理论指出,分布式系统无法同时满足一致性、可用性和分区容错性这三个特性,而Paxos等一致性算法则是解决这一问题的常用方法。 在具体实践中,书里可能会涵盖一些主流的分布式服务框架,如Spring Cloud和Dubbo。...
2. 并发处理:分布式系统能同时处理多个请求,提高处理效率。 3. 容错性:系统具备在部分节点故障时仍能继续运行的能力。 4. 可扩展性:随着需求的增长,可以轻松添加更多资源,不影响系统整体性能。 三、分布式...