分布式系统CAP理论
在单机的数据库系统之中,我们很容易实现一套满足ACID 特性的 事务处理系统, 事务的一致性不存在问题。 但是在分布式系统之中,由于数据分布在不同的主机结点上,如何对着些数据进行分布式的事务处理就具有非常大的挑战,CAP 理论的出现,让我们对于分布式事务的一致性有了另外一种看法。
什么是CAP 理论?
在计算机科学理论,CAP 理论 (也称Brewer 定理) 又有称为 CAP原则,CAP定理,是由计算机科学家Eric Brewer 在 2000 年 提出的 ,其理论观点是, 在分布式计算机系统中,不可能存在同时提供 以下全部三个保证。
- Consistency(一致性): 所有节点同一时间看到的是相同的数据。在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- Availability(可用性):不管是否成功,确保每一个请求都能接收到响应。在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- Partition tolerance(分区容错性):系统任意分区后,在网络故障时,仍能操作。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP原则是NOSQL数据库和分布式系统的基石。
为什么说CAP 只能三选二?
举个栗子:
下图 显示了在一个网络中,N1,N2 是两个节点,他们共享数据块V 其中一个 值V0, 运行在N1 的A 程序可以认为是安全的,无Bug,可预测的和可靠的,运行在N2 的是B 程序,在这个例子中,A 将写入V的新值。而B从V 中读取值。

系统预期执行下面的操作:
- 写入一个V 的新值 V1 。
- 然后消息(M) 从N1 更新V 的副本到N2.
- 从B 处读取返回的V1

如果网络是分区的,当N1到N2 的消息不能传递的时候,就会出现虽然N2 能访问到V 的值(可用性),但是实际上与N1 的V 值已经不一致了。 如下图:

CAP 常见模型:
既然 CAP 理论已经证明一致性,可用性和分区容错性三者不可能通知达成。 那么在实际应用中,我们可在其他某一方面来放松条件,从而达到妥协,下面是一些常用的模型。
- 牺牲分区 (CA 模型)
牺牲分区容错性意味着把所有机器搬到一台机器内部,或者放到一个“要死一起上死”的机架上面(机架也可能出现部分失效),这明显就违背了我们希望的可伸缩性。
常见例子:
- 单站点数据库
- 集群数据库
- LDAP
- xFS 文件系统
实现方式:
两阶段提交, 缓存验证协议。
2. 牺牲可用性(CP 模型)
牺牲可用性意味着一旦系统出现分区这样的错误, 系统就直接停止服务。
常见例子:
- 分布式数据库
- 分布式锁定
- 绝大部分协议
实现方式:
悲观锁, 少数分区不可用。
3 . 牺牲一致性(AP 模型)
常见例子:
- Coda
- Web缓存
- DNS
实现方式:
到期/租赁, 解决冲突, 乐观。
CAP 的意义:
在系统架构时,应该是根据具体的业务场景来权衡CAP, 比如 对于大多数互联网应用来说(如门户网站),因为 机器数量庞大,部署结点分散,网络故障是常态的,所以可用性是必须的所以只有舍弃一致性来保证服务的AP 而对于银行等需要确保一致性的场景,通常会权衡CA, 和CP 模型。
CAP 的最新发展:
Eric Brewer 在2012 年发表文章指出了CAP里面三选二的做法存在一定的误差性,主要体现在:
- 由于分区很少发生,那么在系统中不存在分区的情况下,没有什么理由牺牲C或A 。
- C与A 之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉特定的数据或用户而有所不同。
- 这三种性质都可以在一定程度上衡量,并不是非黑即白的有或无。可用性显然是在0% 到100% 之间连续变化的,一致性分很多级别,连分区也可以细分不同的含义,如系统内的不同部分对于是否存在分区可以有不一样的认知。
理解CAP 理论最简单的方式 是想象两个节点分处于分区两侧,允许至少一个节点更新状态会导致数据不一致,即丧失了C 性质,如果为了保证数据的一致性,将分区一侧的节点设置为不可用, 那就丧失了A 性质,除非两个节点可以相互通讯,才能既保证A 又保证C ,但这又会丧失P 性质,一般来说 跨区域的系统,设计师无法舍弃P 性质,那么就只能在数据一致性和可用性上做一个艰难选择, 不确切的说,NoSQL 运动的主题其实是创造各种可用性优先,数据一致性其次的方案,而传统数据库坚守ACID 特性,做的是相反的事情。
BASE :
BASE 来自于互联网的电子商务领域的实践,它是基于CAP 理论逐步演化而来的,核心思想是即便不能达到强一致性,但可以根据应用特点采用适当的方式来达到最终一致性的效果。BASE 是对CAP 中C和A 的延伸。 其含义如下 :
- Basically Available 基本可用
- Soft state 软状态/柔性事务,即状态可以有一段时间的不同步。
- Eventual consistency 最终一致性。
分布式系统CAP理论的更多相关文章
- 分布式系统CAP理论与CA选择
总结: CAP指的是数据一致性.服务可用性.分区容错性:(这里的一致性指的是强一致性,又叫原子性或线性一致性:可用性指的是所有读写操作都要能终止,没有时延上的要求) 分布式系统中P是必选项:在P必选的 ...
- 分布式系统CAP理论以及注册中心选择
CAP定理:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可同时获得. 一致性(C-数据 ...
- 分布式零基础之--分布式CAP理论
研究到分布式系统CAP理论,记录下来下回详细分析它: CAP是指三个单词的简称 C: 一致性(Consistence) 所有节点访问的都是同一份最新的数据副本. A: 可用性(Availability ...
- 转载:分布式系统的CAP理论
原文转载Hollis原创文章:http://www.hollischuang.com/archives/666 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提 ...
- 分布式系统之CAP理论杂记[转]
分布式系统之CAP理论杂记 http://www.cnblogs.com/highriver/archive/2011/09/15/2176833.html 分布式系统的CAP理论: 理论首先把分布式 ...
- 分布式系统之CAP理论
任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的 ...
- 分布式系统之CAP理论杂记
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.● 可用性(A):在集群中一部分节点故障后,集群整体是否 ...
- 分布式系统的CAP理论
一.CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项. 二.CAP ...
- 重温分布式系统的CAP理论
1. CAP理论的历史 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的 ...
随机推荐
- GIS中的坐标系【Esri官方文档部分翻译】
GCS 地理坐标系(GCS)使用椭圆体表面来定义地球上的位置.地理坐标系有三个部分: 基准面,是地球的椭圆体(椭球体)模型 本初子午线 角度单位 常见基准包括WGS84(用于GPS)和NAD83(用于 ...
- MTK Camera相关的Makefile Option详解
列举了所有Camera相关的MakefileOption,并对其功能含义和OptionValues做了详细的解释.[KEYWORD]Others[SOLUTION]YUVCAM_INTERPOLATI ...
- Luogu P5290 [十二省联考2019]春节十二响
这题是最近看到的今年省选题中最良心的一道了吧 看题+想题+写题都可以在0.5h内解决,送分含义明显啊 首先理解了题意后我们很快就能发现两个点如果要被分在一段那么必须在它们的祖先处合并 首先我们考虑下二 ...
- 经典排序算法 — C#版本(中)
归并排序比较适合大规模得数据排序,借鉴了分治思想. 归并排序原理 自古以来,分久必合合久必分. 我们可以这样理解归并排序,分-分到不能分为止,然后合并. 使用递归将问题一点一点分解,最后进行合并. 分 ...
- lua-nginx-module模块里ngx_lua的所有指令以及可用ngx所有方法
http://www.04007.cn/article/430.html
- AppDir【创建缓存目录】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...
- docker-swarm建立本地集成开发环境
在k8s出现之后,docker-swarm使用的人越来越少,但在本地集成开发环境的搭建上,使用它还是比较轻量级的,它比docker-compose最大的好处就是容器之间的共享和服务的治理,你不需要li ...
- jquery快速入门(四)
jQuery 遍历 向上遍历 DOM 树 parent() parent() 方法返回被选元素的直接父元素.该方法只会向上一级对 DOM 树进行遍历. parents() parents() 方法返回 ...
- 痞子衡嵌入式:如果i.MX RT是一匹悍马,征服它时别忘了用马镫MCUBootUtility
-- 跨界之风吹满地,先锋当属NXP; 微控制器谁独骚?当仁不让看RT! 恩智浦半导体2017年10月正式发布了业内首款跨界处理器-i.MX RT系列,这是MCU界的汗血宝马,更是一匹桀骜不驯的悍马. ...
- 【JVM系列】一步步解析java执行内幕
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...