开发者社区> waylau> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

浅谈 CAP 理论

简介:
+关注继续查看

本文介绍了介绍了分布式系统著名的 CAP 理论。什么是 CAP 理论?为什么说 CAP 只能三选二?了解 CAP 对于系统架构又有什么指导意义?本文将一一作答。

什么是 CAP 理论

在计算机科学理论,CAP 定理(也称为 Brewer 定理),是由计算机科学家 Eric Brewer 提出的,即在分布式计算机系统不可能同时提供以下全部三个保证:

  • 一致性(Consistency):所有节点同一时间看到是相同的数据;
  • 可用性(Availability):不管是否成功,确保每一个请求都能接收到响应;
  • 分区容错性(Partition tolerance):系统任意分区后,在网络故障时,仍能操作

为什么说 CAP 只能三选二

下面分别举例说明了为什么说 CAP 只能三选二。

上面的图显示了在一个网络中,N1 和 N2 两个节点。他们都共享数据块 V,其中有一个值 V0 。运行在 N1 的 A 程序可以认为是安全的、无 bug、可预测的和可靠的。运行在 N2 是 B 程序。这个例子中,A 将写入 V 新​值,而 B 从 V 读取值

系统预期执行下面的操作

  1. 首先写一个 V 的新​值 V1
  2. 然后消息(M)从 N1 更新 V 的拷贝到 N2
  3. 现在,从 B 读取将返回 V1

如果网络是分区的,当 N1 到 N2 的消息不能传递时,执行上面的第三步,会出现虽然 N2 能访问到 V 的值(可用性),但其实与 N1 的 V 的值已经不一致了(一致性)。

CAP 常见模型

牺牲分区(CA 模型)

举例:

  • 单站点数据库
  • 集群数据库
  • LDAP
  • xFS 文件系统

实现方式:

  • 两阶段提交
  • 缓存验证协议

牺牲可用性(CP 模型)

举例:

  • 分布式数据库
  • 分布式锁定
  • 绝大部分协议

实现方式:

  • 悲观锁
  • 少数分区不可用

牺牲一致性(AP 模型)

举例:

  • Coda
  • Web 缓存
  • DNS

实现方式:

  • 到期/租赁
  • 解决冲突
  • 乐观

CAP 的意义

在系统架构时,应该根据具体的业务场景,来权衡 CAP。比如,对于大多数互联网应用来说(如门户网站),因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须需要保证的,所以只有舍弃一致性来保证服务的 AP。而对于银行等,需要确保一致性的场景,通常会权衡 CA 和 CP 模型,CA 模型网络故障时完全不可用,CP 模型具备部分可用性。

参考引用

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
浅谈C++类
浅谈C++类
9 0
SAP MM MB21创建预留单据时候M标记能否自动勾选?
SAP MM MB21创建预留单据时候M标记能否自动勾选?
50 0
SAP MM MB21创建预留单据时候M标记能否自动勾选?
SAP MM MB21创建预留单据时候M标记能否自动勾选?
51 0
CAP 理论 —最通俗易懂的解释
CAP 理论是分布式系统的一个基础理论,它描述了任何一个分布式系统最多只能满足以下三个特性中的两个: 1:一致性(Consistency) 2:可用性(Availability) 3:分区容错性(Partition tolerance) CAP 理论听起来十分抽象,本文尝试以生活中的例子并用通俗易懂的语言来解释 CAP 理论的含义。
1641 0
浅谈Hadoop
大数据的概念炒了好多年了,很显然这项技术经受住了时间的考验,不是有些人想的那样华而不实,多年来总是伴随着Hadoop的身影越发壮大。 这些年来数据的增长量真是发生了天翻地覆的变化,原来大家过年的时候都会很认真的拍一张全家福,恨不得把胶卷能够正反两用,多存点照片,现在好了,手机各类终端齐上阵,微博,微信,图片,小视频,所有的数据真是应有尽有。
1060 0
浅谈Hadoop
大数据的概念炒了好多年了,很显然这项技术经受住了时间的考验,不是有些人想的那样华而不实,多年来总是伴随着Hadoop的身影越发壮大。 这些年来数据的增长量真是发生了天翻地覆的变化,原来大家过年的时候都会很认真的拍一张全家福,恨不得把胶卷能够正反两用,多存点照片,现在好了,手机各类终端齐上阵,微博,微信,图片,小视频,所有的数据真是应有尽有。
1046 0
PHP 3:从Login界面谈PHP标记
原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例。OK,我们就从第一个页面Login页面入手吧。还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: 1 看见这些代码你有什么看法?OK,我下面一一做出解释:1)PHP如何从HTML分离   看看第1行和第9行,那么是  当 PHP 解析一个文件时,会寻找开始和结束标记,这里,开始标记是,如果你使用过ASP.NET,肯定还记得,它们的作用有点类似。
734 0
浅谈C++多态性
转载地址:http://blog.csdn.net/hackbuteer1/article/details/7475622 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。   C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为
1246 0
+关注
waylau
大道至简! https://waylau.com/
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载