对CAP原理的理解  

  CAP原理按照定义,指的是C(Consistency)一致性,A(Availability)可用性,P(Partition tolerance)分区容错性在一个完整的计算机系统中三种特性不能同时得到完全满足。

  Consistency((强)一致性):指的是在同一时间点,所有的数据状态是否是一致的。对于一致性的理解,个人认为可以从关系型数据库的事务概念出发来进行理解。例如:一次银行账户的转账,双方账户的金额必须同时增加,和减少。不能出现转账账户已经扣钱,而被转账账户未能增加金额的情况。

  Availability((高)可用性):顾名思义,指的是计算机系统特别的好用,总是能满足用户的需求(接受更多请求,响应更快),用形式化的语言描述就是系统拥有非常高的非故障运行时间百分率。这一特性在如今互联网时代,海量用户,大并发请求的场景下对于计算机系统显得尤为重要,毕竟没有用户喜欢一到高峰时期就停止响应的系统。

  Partition tolerance(分区容错性):指的是在整个系统拥有两台或以上数量的计算机单元提供服务,当其中部分分区节点故障时,整个系统依然可以向用户提供可靠的服务。

CAP定理告诉我们CAP这三种特性不能同时完全满足,因此存在以下三种取舍情况: 

  1.选择CA,放弃P

  通常是由一台非常强大的计算机对外提供服务来保证A(高可用性),所有的数据操作都在同一台机器上。在上面提到的银行账户转账例子中,在数据库层面上通过本地事务来轻松满足C((强)一致性)。试想如果此时想要拥有P,即转账双方位于不同分区,那么一旦被转账方出现故障,要么耗费时间等待其重新开始服务(放弃A);或者暂时仅仅处理转账方的业务,等待后续的一致性补偿操作(放弃C)。
  该方案的缺点:由于目前科学技术上的限制,无法横向扩容的系统是无法应付海量请求,大并发的场景的,同时也容易导致单点故障出现,因此这里的A(高可用性)实际上是大打折扣的。

  2.选择CP,放弃A

  意味着系统在提供服务时,一旦出现分区故障,为了确保数据的强一致性,所涉及到的服务全部都会停止响应,因此A(高可用性)也就不复存在啦。暂时还没有想到什么场景下会采取这种方案。
  该方案的缺点:个人认为低可用性本身就是系统的一大缺点。

  3.选择AP,放弃C。这种架构可以说是如今互联网时代最流行的架构。通过分布式和集群进行横向的系统性能拓展,尽可能的舍弃对数据强一致性的需求,同时在遇到不可避免的分布式事务场景时,大牛们也已经提出了各种各样的方案来满足最终的数据一致性((弱)一致性),就不展开说明了。
  该方案的缺点:不适合对数据一致性C((强)一致性)有极高要求的场景,以及不追求A(高可用性)的场景(分区总是会带来额外的麻烦)。
  其实,选择AP而放弃C的设计理念并不仅仅适用于整个系统的整体架构,例如在系统内部,数据库集群(可以理解为一个子系统)主从分离的同步延迟造成从库数据与主库数据出现数据暂时不一致的情况等等。

  除此之外,CAP中的三个元素也并不是完全的互斥,例如选择AP,其实也不是彻底的放弃了C(一致性),而是进行了一定程度的让步,同时C(一致性)也能细分为读一致性,写一致性等。因此不能机粗暴的将CAP理论理解为完全互斥,三选二,而是在这三个维度上面进行不同程度的取舍。个人认为CAP理论其实是告诉人们天下没有免费的午餐,也不存在完美无缺的系统设计,需要反复的斟酌,权衡,才能设计出合理的,符合需求的系统架构。

  以上是我对CAP原理的一些理解,存在不少误区,欢迎交流。

对CAP原理的理解的更多相关文章

  1. NOSQL数据模型和CAP原理

    NOSQL数据模型和CAP原理 http://blog.sina.com.cn/s/blog_7800d9210100t33v.html 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoS ...

  2. [转]CAP原理与最终一致性 强一致性 透析

    在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...

  3. CAP原理的证明

    CAP概述 C: Consistency 一致性 A: Availability 可用性 P:Partition Tolerance分区容错性 CAP理论的核心是:一个分布式系统不可能同时很好的满足一 ...

  4. 在分布式数据库中CAP原理CAP+BASE

    本篇博文的内容均来源于网络,本人只是整理,仅供学习! 一.关系型数据库 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (At ...

  5. CAP原理中的一致性

    CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...

  6. CAP原理与最终一致性 强一致性 弱一致性

    CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,这三个要素最多只能同时实现两点 ...

  7. redis学习之——在分布式数据库中CAP原理CAP+BASE

    分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建立在网络之上的软件系统.正是因为软件的特性,所以分 ...

  8. CAP原理详解

    转载 https://blog.csdn.net/u013332124/article/details/82874178 文章目录 一.CAP原理介绍 对CAP原理的一些常见的理解误区 二.CAP原理 ...

  9. Atitit 泛型原理与理解attilax总结

    Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...

随机推荐

  1. html5 实现qq聊天的气泡效果

    教程:http://m.blog.csdn.net/blog/yhc13429826359/38778337 写的很好.自己实现的时候,由于img float:left,会脱离文档流,导致结构混乱. ...

  2. hive 函数 current_date()

    current_date() 获取当天时间 select current_date() 结果是  实际操作中,这种写法只能获取日期是今天的数据,不适合数据重跑. 更合适的写法是 ,将日期作为外部参数传 ...

  3. kafka groupid

    kafka 分组 简言之,就是相同分组的消费者,会分摊消费kafka中同一个topic中的数据.

  4. 笑话库存加网址http://www.jokeji.cn/list18_11.htm

    19.富二代王晓伟成绩很差,老爸想给他找个家教老爸:“儿子,想找什么样的家教啊?”儿子:“要漂亮的,女的,衣服不能太保守,花样要多!”老爸:“儿子,你TM指的是岛国的苍老师吗?”@呦呦ta爹 20.哥 ...

  5. CUDA cufftPlanMany的用法_31通道32*8像素的FFT

    #include <cufft.h> #include <iostream> #include <cuda_runtime.h> #include <help ...

  6. FastReport调整字体

  7. Elasticsearch 系列1 --- Windows10安装Elasticsearch

    在Windows环境下,ES提供了两种安装方式,一种是通过MSI,特点是简单方便:另一种是绿色安装,解压zip包.本文选择第二种方式. 1. 准备工作 (1) Windows 10 (2) JDK 1 ...

  8. 简单题(K-D Tree)

    简单题不简单-- 我们把单点加操作改成插入一个权值为增加量的点,将问题转化成询问一个矩阵中所有点的和,用 \(K-D\ Tree\) 维护,时间复杂度 \(O(n\sqrt{n})\) \(Code\ ...

  9. Spring Boot log4j多环境日志级别的控制

    之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...

  10. POJ 2453

    #include <iostream> #include <algorithm> #include <cmath> #define MAXN 1000 #defin ...