`
kfcman
  • 浏览: 385150 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?

    博客分类:
  • CAP
 
阅读更多

为什么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

分享到:
评论

相关推荐

    CAP理论与分布式数据库

    而传统数据库保证了强一致性(ACID模型)和高可用性,所以要想实现一个分布式数据库集群非常困难,这也解释了为什么数据库的扩展能力十分有限。而近年来不断发展壮大的NoSQL运动,就是通过牺牲强一致性,采用BASE模型...

    分布式处理

    CAP理论:一个分布式存储系统不可能同时满足一致性、可用性和分区容错性这三个需求,最多能够同时满足两个,因此不要把精力浪费在如何设计才能同时满足CAP三者的完美分布式存储系统,而是应该研究如何进行取舍,满足...

    《分布式系统常用技术及案例分析》PDF

    本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,...

    分布式系统常用技术及案例分析.pdf

    本书分为三大部分,即分布式系统基础理论、分布式系统常用技术以及经典的分布式系统案例分析。第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,...

    分布式事务的详细介绍。

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、 Partition tolerance(分区容错性),三者不可得兼。 CAP原则是NOSQL数据库的基石。 分布式系统的CAP理论: ...

    Brewer’CAP原理--CAP定理

    CAP定理指在设计分布式系统时,一致性(Consistent)、可用性(Availability)、Partition Tolerance(分区容忍性)三个属性不可能同时满足,该定理也叫做布鲁尔定理。CAP定理明确了分布式系统所能实现系统的局限性...

    关于分布式系统的思考

    谈及一些分布式系统的理论和思想,包括CAP、BASE、NWR等。并简单分析一些主流数据库分布式方案的利弊,以便我们在开发时更深入全面地进行思考、选择和设计。在讨论常见架构前,先简单了解下...CAP理论指出:CAP三者只

    分布式常见面试题

    一个分布式系统,不可能同时满足这三个要求,最多只能满足其中两项,一般就是在A、C之间寻找平衡。   分布式一致性算法 2p/3p。分布式事务常用的一种分布式算法,算法简单,但是会出现阻塞 paxos算法。遵循少数...

    微服务--分布式事务的实现方法及替代方案

    事务补偿机制:在事务链中的任何一个...阐述了一个分布式系统的三个主要方面,只能同时择其二进行实现.常见的有CP系统,AP系统. 幂等性:简单的说,业务操作支持重试,不会产生不利影响.常见的实现方式:为消息额外增加唯一ID.

    天翼云从业者练习题(含答案).docx

    CAP理论指出,一个分布式系统不可能同时满足___、___和___这三个基本需求,最多能同时满足其中的2个。 一致性 可用性 可扩张性 分区容错性 答案:ABD 【判断题】 虚拟化技术用于实现软件应用与底层硬件相隔离,从而...

    浅谈 CAP 和 Paxos 共识算法

    关于 CAP 理论的背景介绍已经很多,这里不过多介绍,我们谈谈如何理解它的问题。 用通俗易懂的话解释三个名词: 一致性 如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的...

    详细解读分布式锁原理及三种实现方式

    分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者...

    DistributedLocks.zip

    分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者...

    架构解密从分布式到微服务(Leaderus著)

    然后简明扼要地介绍了进行系统架构所必需的网络基础,并详细介绍了分布式系统中的经典理论、设计套路及RPC通信,对内存、SOA架构、分布式存储、分布式计算等进行了深度解析,后详细介绍了全文检索与消息队列中间件,...

    基于Redis分布式锁的实现代码

    分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者...

Global site tag (gtag.js) - Google Analytics