文章目录

    • 前言
  • 分布式系统的特点
    • 分布式系统技术是用来解决什么问题的呢?
  • 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。

  1. 在没有分区的情况下,如果ClientA向Server1发送修改X=1的指令,在进行事务机制将Server1的X修改为1后,Client1从Server1获取到的X也会是1。因为Client读取到的值一定是最新值,所以这里符合一致性,但显然不具备分区容错性,也就是说,如果服务器宕机了,那么读写就一定会失败。
  2. 在有分区的情况下,如果ClientA向Server1和Server2发送修改X=1的指令,然而这指令并没有成功发送给Server2,那么Client1和Client从服务器中读取到的X值就不一样了。虽然这里满足了分区容错性,但并不满足一致性,而且如果为了保证一致性,那么在发送指令给服务器时,如果有一个命令没有成功发送,所有服务器都不能接收这个请求,这无疑降低了可用性

    所以这里,可以对CAP的定义有更加明确的声明:
  • 一致性(Consistence)

    一致性被称为原子对象,任何的读写都应该看起来像是“原子”的,或串行的。

    写入数据库后读取数据,一定能读到前面写的内容,所有的读写请求都像是全局排序依次进行

  • 可用性(Availability)

    对任何非失败节点都应该在有限的时间内给出请求的回应(请求的可中止性)。

  • 分区容错性(Partition Tolerance)

    允许节点之间丢失任意多的消息,当网络分区发生时,节点之间的消息可能会完全丢失。

CAP理论的应用

  1. 在架构设计中,不要把时间浪费在如何设计能满足这三者的完美分布式系统上,应当合理取舍。只能三者取其二
  2. 不同业务对于一致性的要求是不一样的。像是微博点赞,用户对不一致是不敏感的,能容忍相对长的一段时间数据不一致,只要做好交互,并不影响体验;而电商商品价格的显示是具有强一致性的,如果不能保证修改商品价格后的数据一致性,对交易是有很大影响的。
  3. 在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理论中的三个指标不能同时满足呢?相关推荐

  1. 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  2. 分布式理论:CAP是三选二吗?

    分布式系统的 CAP 理论:首先把分布式系统中的三个特性进行了如下归纳: ● 一致性(C): 在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ● 可用 ...

  3. 【分布式】1、CAP原则(CAP定理)、BASE理论

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  4. 深入理解分布式、微服务中CAP定律和BASE理论

    一.背景 随着互联网的快速蔓延,各种传统项目(单体应用的架构)已经不能够满足当前各种复杂的需求场景,都逐渐向分布式服务.微服务做转换,而如今分布式.微服务架构已经普遍存在互联网公司的项目中,像大型电商 ...

  5. 分布式理论(一) - CAP定理

    前言 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性)这三个基本需求,最 ...

  6. 分布式理论(一)CAP 理论

    分布式理论(一) CAP理论 一.CAP理论前言 CAP原则又称为CAP理论,主要思想是在任何一个分布式系统中都无法同时满足CAP. C(Consistency):表示一致性,所有的节点同一时间看到的 ...

  7. 深入理解分布式技术 - 理论基石 CAP

    文章目录 概要 CAP Waht's CAP Prove CAP CAP 理论的应用 CP 和 AP 架构的取舍 概要 现如今,数据规模越来越大,应用系统需要处理海量数据的同时还需要确保高并发下系统性 ...

  8. 学习分布式不得不会的CAP理论

    2018年07月16日 11:52:59 Hollis在CSDN 阅读数:161更多 个人分类: 架构 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP ...

  9. 常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)

    一.CAP理论与BASE理论: 1.什么是 CAP 理论: C:Consistency 一致性:指强一致性,分布式系统中的所有节点在同一时刻具有同样的值.都是最新的数据副本,一致性保证了不管向哪台服务 ...

最新文章

  1. centeros7网络服务无法启动_Linux网络服务02——DHCP原理与配置
  2. onsubmit阻止表单提交
  3. html 乱码_html小坑:网页变成乱码
  4. Redis流量控制策略
  5. linux vim 添加注释_vim基础教程
  6. [LibTorch] 参数注册 模块注册
  7. ASP.NET Core管道深度剖析
  8. eclipse-中如何显示工程树形结构
  9. 【ML小结3】线性回归与逻辑回归、softmax回归
  10. MySQL独立表空间、共享表空间
  11. java实现在线预览--poi实现word、excel、ppt转html
  12. ie加载项存在残留是什么_残余IE加载项无法修复
  13. 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。
  14. 朋友圈点赞、发红包 测试用例的设计点
  15. 征文评优中|小鱼再进化!OceanBase 4.1免费体验
  16. 开发一个分销小程序需要多少钱?
  17. java 统计子字符串个数_Leecode统计子串个数(java)
  18. css完整总结:第二篇(尺寸,外补白,内补白,边框,背景,颜色,字体,文本,文本装饰)
  19. python读word文档计算字数,Python统计字数并将结果输入到TXT文件中
  20. 做个自己站内搜索引擎

热门文章

  1. live555 源码分析:简介
  2. python获取cookies
  3. MySQL(五)MySQL事务
  4. spring源码构建以及模块划分和依赖
  5. 推荐一款日志切割神器,好用到爆!!
  6. 数据库高可用(HA)技术有哪些?
  7. 聊一聊Java中的文件锁
  8. RabbitMQ如何实现延迟队列?
  9. 力扣--替换后的最长重复字符
  10. WebRTC直播课堂实践:实时互动是核心