转载
作者: 阎斌 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息
网址: http://UltimateArchitecture.net
CAP理论
10年前,Eric Brewer教授提出了非常著名的CAP理论,后人也论证了CAP理论的正确性。CAP理论指出:一个分布式系统不可能同时满足一致性(Consistency),可用性(Availibility)和分区容忍性(Partition Tolerance)这三个需求。最多只能同时满足其中的两个。
一致性(Consistency):
对于分布式的存储系统,一个数据往往会存在多份。简单的说,一致性会让客户对数据的修改操作(增/删/改)要么在所有的数据副本(在英文文献中常称为Replica)全部成功,要么全部失败。即,修改操作对于一份数据的所有副本而言,是原子(Atomic)的操作。
如果一个存储系统可以保证一致性,那么则客户读写的数据完全可以保证是最新的。不会发生两个不同的客户端在不同的存储节点中读取到不同副本的情况。
可用性(Availability):
可用性很简单,顾名思义,就是指在客户端想要访问数据的时候,可以得到响应。但是注意,系统可用(Available)并不代表存储系统所有节点提供的数据是一致的。比如客户端想要读取文章评论,存储系统可以返回客户端数据,但是评论缺少最新的一条。这种情况,我们仍然说系统是可用的。
往往我们会对不同的应用设定一个最长响应时间,超过这个响应时间的服务我们仍然称之为不可用的。
分区容忍性(Partition Tolerance):
如果你的存储系统只运行在一个节点上,要么系统整个崩溃,要么全部运行良好。一旦针对同一服务的存储系统分布到了多个节点后,整个存储系统就存在分区的可能性。比如,两个存储节点之间联通的网络断开(无论长时间或者短暂的),就形成了分区。
对当前的互联网公司(例如Google)来说,为了提高服务质量,同一份数据放置在不同城市乃至不同国家是非常正常的。因此节点之间形成分区也很正常。
Gilbert 和Lynch将分区容忍性定义如下:
No set of failures less than total network failure is allowed to cause the system to respond incorrectly
除全部网络节点全部故障以外,所有子节点集合的故障都不允许导致整个系统不正确响应。
我在另外一篇文章(BASE: An Acid Alternative)中找到了一个对分区容忍性更为恰当好理解的解释:
Operations will complete, even if individual components are unavailable.
(即使部分的组件不可用,施加的操作也可以完成)
CAP说明:在设计一个分布式存储系统时,你不得不在三个特性中选择放弃一个。
如果选择Partition Tolerance和Consistency,那么即使坏了节点,操作必须又一致,又能顺利完成。所以就必须100%保证所有节点之间有很好的连通性。这是很难做到的。最好的办法就是将所有数据放到同一个节点中。但是显然这种设计是不满足Availability的。
如果要满足Availability和Consistency,那么,为了保证可用,数据必须要有Replica。这样,系统显然无法容忍Partition。当同一数据的两个副本(Replica)分配到了两个无法通信的Partition上时,显然会返回错误的数据。
最后看一下满足Availability和Partition Tolerance的情况。满足可用,就说明数据必须要在不同节点中有replica。然而还必须保证在产生Partition的时候仍然操作可以完成。那么,必然操作无法保证一致性。
基于ACID的关系型数据库选择的是C和P。因此能够提供很高的一致性,但是却在系统繁忙的时候不可用(Service Unavailable)。但是对于大多数互联网应用来讲,强一致性对他们来说并不一定非要满足,可用性往往是更加重要的。比如,某博客网站在北京和上海的存储服务器突然不联通,北京用户和上海用户无法看到对方的评论显然要比北京用户和上海用户访问网站都返回HTTP 500错误要好的多。
当然,对于银行这种业务来讲,一致性是不能放弃的。这不在我们的讨论范围之内。
下面这篇文章对CAP理论作了详细解释和论证:
http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
或者看这个中文翻译版:
http://pt.alibaba-inc.com/wp/dev_related_728/brewers-cap-theorem.html
分享到:
相关推荐
### 分布式系统CAP理论模型 #### 一、引言 在分布式系统设计与实现的过程中,CAP理论模型作为一项核心理论被广泛讨论和应用。CAP理论由Eric A. Brewer教授于2000年首次提出,并在PODC会议上进行了详细介绍。这一...
CAP理论,也称为Brewer的猜想,是由加州大学伯克利分校教授Eric Brewer在2000年的PODC会议上提出的,它描述了分布式计算系统中三个基本保证:一致性(Consistency)、可用性(Availability)和分区容错性(Partition...
### Linux 下分布式系统及 CAP 理论深入分析 ...未来,随着分布式系统的发展和技术的进步,可能会出现新的方法和技术来进一步优化CAP理论中的权衡,但当前CAP理论仍然是理解和设计分布式系统的基础。
CAP 理论与分布式系统设计 CAP 理论是分布式系统设计中一个非常重要的概念,Michael Stonebraker 也曾断言分区必然会发生,并且系统内发生节点失败的机会随着系统规模的增加而增加。本文将详细介绍 CAP 理论的概念...
分布式系统的CAP理论是计算机科学中分布式计算领域的一个重要原则,由加州大学伯克利分校的计算机科学家Eric Brewer在2000年提出。该理论指出,在一个分布式计算系统中,Consistency(一致性)、Availability(可用...
CAP理论是分布式计算领域的一个基础概念,由计算机科学家Eric Brewer提出。它指出,在设计分布式系统时,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本...
CAP 理论与分布式数据库 CAP 理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得,必须有所取舍。传统数据库保证了强一致性和高可用性,但这...
在传统的CAP理论中,一个分布式系统无法同时保证一致性、可用性和分区容忍性,但Spanner通过巧妙的设计策略,尤其是在引入“真时”(TrueTime)的概念,成功地在全局范围内实现了强一致性和高可用性。 2. Spanner是CA...
CAP理论是分布式系统设计中的核心概念,它指出在分布式环境中,任何系统都无法同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个特性。当网络分区发生时,系统必须...
CAP理论是分布式系统设计中的核心概念,全称为Consistency、Availability和Partition Tolerance。这个理论指出,在分布式系统中,无法同时保证数据一致性(C)、高可用性(A)和分区容错性(P)。在面临网络分区的...
根据CAP理论,一致性(C),可用性(A),分区容错性(P),三者不可兼得,必须有所取舍。而传统数据库保证了强一致性(ACID模型)和高可用性,所以要想实现一个分布式数据库集群非常困难,这也解释了为什么数据库的扩展能力...
Easy-Retry是一款基于服务治理的重试组件,其基于CAP理论设计,具有操作简单、实时监控、后台配置、支持多样化退避策略、支持多种告警方法等特点。支持本地重试和远程重试两种模式,提供管理后台,使得重试任务可视...
CAP理论是分布式系统设计中的重要概念,由Eric Brewer教授提出,它揭示了在分布式环境中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个基本需求之间的权衡关系。...
CAP理论:一个分布式系统不可能同时满足一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance),最多只能同时满足两个(CA / CP / AP)。 一致性(Consistence):在某个写操作完成后...
CAP理论是分布式系统设计中的一个基础概念,由Eric Brewer在1999年提出,并在2002年由Seth Gilbert和Nancy Lynch通过数学模型进行了证明。CAP理论指出,在分布式系统中,不能同时保证一致性(Consistency)、可用性...
CAP理论是由Eric Brewer在1998年提出的,指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)不能同时得到保证。 - **一致性**:确保所有节点在同一时间看到...
图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!