对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. hdu 5013 优化疑问+dp

    http://acm.hdu.edu.cn/showproblem.php?pid=5013 m个游客,n座城市(m, n <= 16), 每个人从1走到n, 每次有一定概率停在原地,然后以后就 ...

  2. 关于 cxGrid 的过滤问题

    http://bbs.csdn.net/topics/390536919 关于 cxGrid 的过滤问题 [问题点数:20分,结帖人zhengyc653]             不显示删除回复   ...

  3. Android-ANR异常

    A N R : Application Not Responding : 应用没有响应异常 引发ANR的原因是,组件的主线程去执行了耗时操作多少秒,就会引发ARN异常: 引发ANR异常的案例: pac ...

  4. Spring 使用javaconfig配置

    除了使用xml,spring提供javaconfig配置,下面是简单的例子: 1.声明接口 /** * */ package com.junge.demo.spring.service; /** * ...

  5. 提示 make: 没有什么可以做的为 `all'

    提示 make: 没有什么可以做的为 `all'. make clean 一次,编译过程又有了.

  6. python 使用json格式转换

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...

  7. powerviot open error in sharepoint 2013

    Testing Service c2WTS +- Service c2WTS found +- Service c2WTS is running +- Path of service: C:\Prog ...

  8. 关于ubuntu软件卸载的问题

    ...... 起因很菜....就是手贱把/usr/lib/下的R的目录给rm -rf掉了, 然后在R的软件包里用./configure也生不成, R RHOME还在, 然而因为lib下的R删掉了所以R ...

  9. springBoot2 基础语法

    请求响应 request对象 request 对象其实是HttpServletRequest 类型, 通过它可以获取请求相关的一切信息, 包含请求信息 . 以及请求参数 ,甚至可以当成往里面存储数据[ ...

  10. [vuejs] vue2.0-layer-mobile移动端弹层

    vue2.0-layer-mobile移动端弹层 本次组件升级支持slot内容分发功能,实现高定制内容风格的弹层 安装方法 npm install vue2-layer-mobile -S 初始化 i ...