对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. POJ3258--River Hopscotch(Binary Search similar to POJ2456)

    Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...

  2. 关于QT建立项目中遇到的相关问题的处理办法

    关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...

  3. nutch从搜索引擎到网络爬虫

    人物介绍 姓名:DougCutting 个人名望:开发出开源全文检索引擎工具包Lucene. 个人简介/主要荣誉:除了 Lucene,还开发了著名的网络爬虫工具 Nutch,分布式系统基础架构Hado ...

  4. JVM中的新生代、老年代和永生代

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  5. MVC图片验证

    1.创建一个验证类,里面有生成验证码的两个方法. namespace YTJWGL_Common { public class ValidatorCodeTools { #region 生成校验码图片 ...

  6. dialog里屏蔽ESC和回车

    重载PreTranslateMessage,在return之前加一句判断,只要是按下ESC和回车的消息,就直接置之不理即可,代码如下: if( pMsg->message == WM_KEYDO ...

  7. 【NumberValidators】工商营业执照号码和统一社会信用代码验证

    从本质上讲,工商营业执照号码和统一社会信用代码是两套完全不一样的编码规则,识别结果也仅有行政区划部分为两者共有,但因为这两种编码同时存在的原因,所以如果需要在系统中唯一标志一家企业时,还是可以通过工商 ...

  8. C# 动态创建数据库三(MySQL)

    前面有说明使用EF动态新建数据库与表,数据库使用的是SQL SERVER2008的,在使用MYSQL的时候还是有所不同 一.添加 EntityFramework.dll ,System.Data.En ...

  9. 迁移桌面程序到MS Store(3)——开机自启动

    迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...

  10. Angular build Error:In this configuration Angular requires Zone.js

    Angular cli 运行 build后打开生成的index.html报错:In this configuration Angular requires Zone.js 生成代码如下: ng bui ...