文档章节

对cap定理的理解

juny
 juny
发布于 2014/05/27 00:45
字数 645
阅读 213
收藏 3

CAP定理是设计分布式系统的基础。

CAP定理指出分布式系统不能同时满足以下三个点:

1.一致性(Consistent)

2.可用性(Availability)

3.分区容忍性(Partition Tolerance)

这三点对于设计分布式的web services是非常重要的。

这里先说一下这三点的含义,要理解它们的含义,首先需要知道CAP定理提出时是针对分布式的web services系统,这样一个系统是由N多节点构成,为了便于说明,我们假定系统只有两个节点{N1,N2}。

一致性是说在节点上的操作是原子性的,对一个节点上的数据的修改,在所有节点上同步,这期间不能有其他操作。比如一个在N1上的write操作,必须是原子性的,也即在N1写完并同时同步到N2上,这整个过程是原子性的,在这个写的过程中不能有读的操作,否则可能读到不一致的结果(例如N1修改完数据但N2还未同步)。

可用性是指节点一旦接受到请求(比如web request),必须给予 回应。回应的内容可以是成功取到的数据或者失败消息。比如N1接到一个请求,必须返回一个请求结果或者失败结果,如果不给予任何回应,就违背了可用性。

分区容忍性是指允许节点间丢失任何消息。节点间的通信会发送消息,这些消息在网络中可能会丢失,这是客观存在的。比如N1和N2在一个局域网里相互发送消息,不管使用什么协议(tcp,udp等),两者之间都可能丢失消息包,理论上最坏情况会丢掉所有的包。

所以CAP定理是说,分布式系统在有消息丢失的网络节点间不可能同时保证操作的原子性以及对请求必定给予回应这一特性。例如满足原子性不能满足可用性的情况:在N1上写数据,N2需要同步数据,假设N1和N2之间的消息全部丢失(最坏的情况),此时N2上的数据不一致,要保证这个写操作的原子性,需要等到N2上的数据同步完成,此时其他操作都不能进行,节点接受的请求不能给予回应,系统满足不了可用性。



© 著作权归作者所有

juny
粉丝 2
博文 8
码字总数 2453
作品 0
昌平
私信 提问
NoSQL 数据库不应该放弃 Consistency

本文发于infoq,https://www.infoq.cn/article/rhzs0KI2G*Y2r9PMdeNv 。转回自己的博客。 谈到 NoSQL,一定会提及一致性(Consistency),按照 CAP 定理,有些 NoSQL 数据库放弃了一致性,但...

cadem
06/11
0
0
「系统架构」CAP 定理的含义

分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的。 分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起...

Java填坑之路
2018/07/28
0
0
漫谈事务与分布式事务(4)- 最终一致性

在上一篇文章里忽略了一点。 CAP 定理有一个缺陷,这个缺陷可以帮助我们“部分”摆脱 分布式困境。 总的来说,CAP 定理本身是完备的,但它并没有描述一个分布式系统何时产生分区,以及分区会...

长源
2014/04/08
0
0
理解数据库的事务,ACID,CAP和一致性

什么是事务 事务是指由一系列数据库操作组成的一个完整的逻辑过程,这个过程中的所有操作要么都成功,要么都不成功。比如:常见的例子就是银行转账的例子,一次转账操作会包含多个数据库操作...

geekpy
2018/01/08
0
0
MongoDB

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。 这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd...

5431039
2016/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部