`references:`

  1. http://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86
2. http://en.wikipedia.org/wiki/CAP_theorem
3. http://www.royans.net/arch/brewers-cap-theorem-on-distributed-systems/
4. http://tianhailong.com/cap%e7%90%86%e8%ae%ba.html **Brewers CAP Theorem on distributed systems** Large distributed systems run into a problem which smaller systems don’t usually have to worry about. >It states, that though its desirable to have Consistency, High-Availability and Partition-tolerance in every system, unfortunately no system can achieve all three at the same time. ![ex1](http://www.royans.net/arch/wp-content/uploads/2010/02/image2.png)
![ex2](http://www.royans.net/arch/wp-content/uploads/2010/02/image3.png)
![ex3](http://www.royans.net/arch/wp-content/uploads/2010/02/image4.png) - `Consistency` : 所有节点在同一时间具有相同的数据 Example1: 只有单独一个节点,自然满足一致性
Example2: 假设要存放的数据的keys为A-Z,将key为A-M的数据存放在节点1,将key为N-Z的数据存放在节点2,这样系统也能保证一致性
Example3: Master-Master replicas, 每一个节点存放的是相同的副本。当要插入一条数据时,必须两个节点都完成该插入操作,这个插入才算完成。在这种存在副本的系统里,为了保证100%的一致性,节点之间的通信就十分重要,整个系统的性能也会随着副本的增加而降低。
- `Availability` : 保证每个请求不管成功还是失败都有响应 Example1: not hightly **Available**,如果节点宕机,100%的数据将会unavailable
Example2: not hightly **Available**,如果有一个节点宕机, 50%的数据将unavailable
Example3: 单独一个节点就能保证100%的**availability**,增加备份节点数,将直接增加系统的**availability**
- `Partition tolerance` : 系统中任意信息的丢失或失败不会影响系统的继续运作 我们选择Example3中的架构来得到**Consistency**和**Availability**,假设Example3中的两个节点存在两个不同的数据中心,并且假设两个数据中心之间的网络连接中断,也即两个数据中心无法同步它们之间的状态。在这种情况下,如果系统允许读写操作,那么在这两个数据中心之间的数据就无法保持**Consistency**,如果系统不允许读写操作,那么虽然系统保持了**Consistency**,但却失去了**Availability** 举个例子:对于银行系统来说,数据的一致性显示十分重要。比如某个客户在广州取钱,那么在北京必须在限定时间内正确的反映该客户的余额数。那么如果广州的数据节点和北京的数据节点出现网络不顺畅时,系统必须禁止写入操作来保证Consistency,这就失去了Availability **Usage of CAP Theorem in Today's Distributed Storage Systems** 因为CAP理论中的三点只能同时满足两点,而在现实世界中,由于机器故障是一直存在着的,所以必须满足Partition tolerance,那么就只有在剩下的Consistency和Availability根据不同应用的需求做权衡了。当然选择其中的一个,并不意味着彻底放弃另一个。 1. 如果某个应用更重视Availability,比如说购物车。那么它应该先优化Availability,然后再解决Consistency问题(eventually consistent)
2. 如果某个应用更重视Consistency,比如说银行取款机。那么它应该优先考虑Consistency,而放弃Availability © `Senlie Zheng` 转载请注明出处

分布式系统怎样体现了CAP的更多相关文章

  1. 事物的隔离级别与并发完美体现了cap理论(确保数据完整、安全、一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

    事物的隔离级别与并发完美体现了cap理论(确保数据完整.安全.一致性,在此基础上实现高性能访问(鱼和熊掌不可兼得)

  2. 分布式系统架构常识:CAP理论。

    什么是CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后麻省理工学院的Seth Gilbert和NancyLynch从理论上证明 ...

  3. 分布式系统理论基础2 :CAP

    本文转自:https://www.cnblogs.com/bangerlee/p/5328888.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...

  4. 分布式 基本理论 CAP 之 各分布式系统的cap支持情况

    分布式系统.理论.协议 非常非常多, 它们多cap 的支持是怎么样的呢? 需要注意的是,分布式系统 为了应付各种 复杂 应用场景,支持各种各样的功能,可能有的提供了选项或某种机制, 某个时刻,支持CP ...

  5. 分布式系统原理之cap理论

    1.1 CAP理论的含义 Cap理论表示在分布式系统中一致性(C).可用性(A)和分区容错性(P)最多只能同时满足两个.  一致性:客户端更新数据成功后,在任意时刻,在系统任意对外提供服务的节点,读取 ...

  6. 分布式系统:CAP理论

    无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的.本文就来介绍一下到底什么是CAP理论,如何证明CAP理论,以及CAP的权衡问题. CA ...

  7. 看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二

    引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance) ...

  8. CAP理论学习

    CAP理论是对分布式系统的3个特性所下的一个定性的结论,可用于指导分布式系统的设计. CAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性.可用性.分区容忍性三要素中的两个要素. 在英语中 ...

  9. 《大型网站系统与Java中间件实践》读书笔记——CAP理论

    分布式事务希望在多机环境下可以像单机系统那样做到强一致,这需要付出比较大的代价.而在有些场景下,接收状态并不用时刻保持一致,只要最终一致就行. CAP理论是Eric Brewer在2000年7月份的P ...

随机推荐

  1. 项目经验之:MVVM初学者图形化笔记整理。。。

    这个模式,一下子把我的思路给打开..让我眼前一亮..居然可以这样将界面分离得如此彻底........... 大家一起学习... 说说我的感受吧,一个小实例讲述了 MVVM实现原理: 一个简单的例,将两 ...

  2. 在 SUSE 11 sp2 上安装 freeradius

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. Codeforces Round #326 (Div. 2) D. Duff in Beach dp

    D. Duff in Beach Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/probl ...

  4. C#小常识集锦(一)--《更锋利的CSharp代码》读书笔记

    ❀.采用类似匈牙利命名法为控件命令,对于其他变量申明则不需要了 e.g. Button btnAdd; e.g. TextBox txtUsername; e.g. ListBox lstFileNa ...

  5. thinkphp中的HTTP类实现下载

    public function test(){ import('ORG.Net.Http'); $filename="Uploads/v1.2.doc"; //exit($file ...

  6. iOS开发——UI_swift篇&TableView自定义聊天界面

    TableView自定义聊天界面   1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 ...

  7. 新浪云(SAE)使用没有内置的django版本

    SAE自带的django目前到1.5版本,如果要使用更高的版本,则需要把django包同代码一起上传. 以1.7.3为例 先从SAE svn签出代码,默认1是根目录 1.  1目录下创建文件夹 sit ...

  8. cocos2dx libiconv 转码

    iconv下载(Android)已编译完的iconv包(用这个即可) ios自带libiconv,只需#include <iconv.h>即可  步骤 1.libiconv解压文件放置 直 ...

  9. Explain的type, where 和 order by 组合是索引的选择

    Explain的type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ...

  10. Laravel 5.1中 Redis 的安装配置及基本使用教程

    关于Redis的介绍我们在之前Laravel 缓存配置一节中已有提及,Redis是一个开源的.基于内存的数据结构存储器,可以被用作数据库.缓存和消息代理.相较Memcached而言,支持更加丰富的数据 ...