对CAP原理的理解
对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原理的理解的更多相关文章
- NOSQL数据模型和CAP原理
NOSQL数据模型和CAP原理 http://blog.sina.com.cn/s/blog_7800d9210100t33v.html 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoS ...
- [转]CAP原理与最终一致性 强一致性 透析
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...
- CAP原理的证明
CAP概述 C: Consistency 一致性 A: Availability 可用性 P:Partition Tolerance分区容错性 CAP理论的核心是:一个分布式系统不可能同时很好的满足一 ...
- 在分布式数据库中CAP原理CAP+BASE
本篇博文的内容均来源于网络,本人只是整理,仅供学习! 一.关系型数据库 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (At ...
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- CAP原理与最终一致性 强一致性 弱一致性
CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容忍性(Partition tolerance) CAP原理指的是,这三个要素最多只能同时实现两点 ...
- redis学习之——在分布式数据库中CAP原理CAP+BASE
分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建立在网络之上的软件系统.正是因为软件的特性,所以分 ...
- CAP原理详解
转载 https://blog.csdn.net/u013332124/article/details/82874178 文章目录 一.CAP原理介绍 对CAP原理的一些常见的理解误区 二.CAP原理 ...
- Atitit 泛型原理与理解attilax总结
Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...
随机推荐
- POJ3169--Layout(SPFA+差分系统)
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- java基础-day20
第09天 IO流 今日内容介绍 u File类 u 字符流与字节流 第1章 File类 1.1 File概述 打开API,搜索File类.阅读其描述:File文件和目录路径名的抽象表 ...
- noip第21课作业
1. 遍历二叉树 [问题描述] 以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树: 输出其中序序列和后序序列,其中总结点个数不超过100. 输 ...
- Docker windows下安装并搭建Nodejs的webapp
一.关于Docker 什么是Docker?Docker 采用go语言编写,是一个开源的应用容器引擎.让开发者可以快速打包他们的应用以及依赖包到一个封装的可移植的容器Image中,然后发布到任何流行的机 ...
- UT源码105032014098
(2)NextDate函数问题 NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性 NextDate函数包含三个变量month.day和year,函数的输出为输入日期后一天的日期. ...
- whereis+whatis+man
使用Linux过程中无论是使用shell命令.程序开发或者用户文档都需要使用到强大的男人man命令. 使用方法也十分简单,以查看ls命令的使用方法为例: man ls man的搜索路径通常包括以下两个 ...
- 从头文件中学习sfr和sbit
1.reg52.h 头文件,它定义了单片机的一些端口物理地址. #ifndef __REG52_H__ #define __REG52_H__ /* BYTE Registers */ sfr P0 ...
- LogisticRegression in MLLib
例子 iris数据训练Logistic模型.特征petal width和petal height,分类目标有三类. import org.apache.spark.mllib.classificati ...
- USACO December 铂金Maxflow
USACO 2015 December Contest, Platinum Problem 1. Max Flow Farmer John has installed a new system of ...
- datatable插件使用小记
经验,是前行路上,磕磕碰碰,不断探索,最终留下的结晶:亦是下一次,快速高效,寻求到结果的快捷方式. datatable插件具体可参考: 官网:http://datatables.club/ 参数说明: ...