`

CAP理论

 
阅读更多
1.CAP概述
CAP理论是由EricBrewer教授提出的,在设计和部署分布式应用的时候,存在三个核心的系统需求,这个三个需求之间存在一定的特殊关系。三个需求如下:
C: Consistency 一致性
A: Availability 可用性
P:Partition Tolerance分区容错性
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
2.CAP定义
(1)C: Consistency 一致性
一致性又称为原子性或者事务性。表示一个事务的操作是不可分割的,要不然这个事务完成,要不然这个事务不完成,不会出现这个事务完成了一半这样的情况。这种事务的原子性使得数据具有一致性。
我们通常情况下在数据库中存在的脏数据就属于数据没有具有一致性的表现。而在分布式系统中,经常出现的一个数据不具有一致性的情况是读写数据时缺乏一致性。比如两个节点数据冗余,第一个节点有一个写操作,数据更新以后没有有效的使得第二个节点更新数据,在读取第二个节点的时候就会出现不一致的问题出现。
传统的ACID数据库是很少存在一致性问题的,因为数据的单点原因,数据的存取又具有良好的事务性,不会出现读写的不一致。
(2)A: Availability 可用性
         好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。可用性通常情况下可用性和分布式数据冗余,负载均衡等有着很大的关联。
(3)P:Partition Tolerance分区容错性
         分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,这样就具有好的分区容错性。
3.CAP理论的意义
         随着互联网应用的飞速发展,数据量与日俱增,传统的ACID数据库已经不能满足如此大的海量数据存储了。这个时候需要设计出好的分布式数据存储方式。而这些分布式数据存储方式受到CAP理论的约束,不可能达到高一致性,高可用性,高分区容错性的完美设计。所以我们在设计的时候要懂得取舍,重点关注对应用需求来说比较重要的,而放弃不重要的,在CAP这三者之间进行取舍,设计出贴合应用的存储方案。
         目前众多的分布式数据系统通过降低一致性来换取可用性。下面是一个简单的例子:
两个节点数据冗余,第一个节点先有一个写操作,第二个节点后有一个读操作。下面的图中a是整个过程,要具有一致性的话需要等待a1进行write,然后同步到a2,然后a2再进行write,只有整个事务完成以后,a2才能够进行read。但是这样的话使得整个系统的可用性下降,a2一直阻塞在那里等待a1同步到a2。这个时候如果对一致性要求不高的话,a2可以不等待a1数据对于a2的写同步,直接读取,这样虽然此时的读写不具有一致性,但是在后面可以通过异步的方式使得a1和a2的数据最终一致,达到最终一致性。

4.BASE理论
BASE理论是CAP理论结合实际的产物。 BASE(Basically Available, Soft-state,Eventuallyconsistent)英文中有碱的意思,这个正好和ACID的酸的意义相对,很有意思。BASE恰好和ACID是相对的,BASE要求牺牲高一致性,获得可用性或可靠性。
5.CAP之间的取舍
满足一致性,可用性的系统,通常在可扩展性上不太强大:
·        Traditional RDBMSs like Postgres,MySQL, etc (relational)
·        Vertica (column-oriented)
·        Aster Data (relational)
·        Greenplum (relational)
满足一致性,分区容忍必的系统,通常性能不是特别高:
·        BigTable (column-oriented/tabular)
·        Hypertable (column-oriented/tabular)
·        HBase (column-oriented/tabular)
·        MongoDB (document-oriented)
·        Terrastore (document-oriented)
·        Redis (key-value)
·        Scalaris (key-value)
·        MemcacheDB (key-value)
·        Berkeley DB (key-value)
满足可用性,分区容忍性的系统,通常可能对一致性要求低一些:
·        Dynamo (key-value)
·        Voldemort (key-value)
·        Tokyo Cabinet (key-value)
·        KAI (key-value)
·        Cassandra (column-oriented/tabular)
·        CouchDB (document-oriented)
·        SimpleDB (document-oriented)
·        Riak (document-oriented)

6.CAP的反对声音
Guy Pardon写了一篇文章“A CAP Solution (Proving Brewer Wrong)”来反对CAP理论。他提出了一个同时满足CAP的解决方案来反对Brewer的三者只能取其二的说法。
他设计的系统如下:
(1)程序如果能够读取数据库的话读取数据库,如果不能的话可以使用缓存代替。
(2)所有的读取操作使用版本号或者其他可以使用乐观锁的机制。
(3)客户端的所有更新操作全部放在队列中顺序处理。更新操作中要包括该更新的读取操作时的版本信息。
(4)当分区数量足够少的时候,可以处理队列中的更新操作。比较简单的方式是建立一个跨越所有分布式副本的事务,对每个副本进行更新操作(其他方式比如quorum等等也可以)。如果该更新的读取操作时的版本信息不是当前数据库中数据的版本信息,则将失败返回给客户端,否则返回成功。
(5)数据库操作结果(确认或者取消)通过异步的方式发送到客户端,可以通过邮件,消息队列或者其他异步方式。
该系统符合CAP如下:
符合C(高一致性):读取的数据都是基于快照的,而且错误的更新操作不会执行。
符合A(高可用性):读取和更新都会返回数据。
符合P(高分区容错性):允许网络或者节点出错。
该设计是符合BASE理论的。
分享到:
评论

相关推荐

    分布式系统CAP理论模型

    ### 分布式系统CAP理论模型 #### 一、引言 在分布式系统设计与实现的过程中,CAP理论模型作为一项核心理论被广泛讨论和应用。CAP理论由Eric A. Brewer教授于2000年首次提出,并在PODC会议上进行了详细介绍。这一...

    数据库CAP理论证明论文 Brewers Conjecture

    CAP理论,也称为Brewer的猜想,是由加州大学伯克利分校教授Eric Brewer在2000年的PODC会议上提出的,它描述了分布式计算系统中三个基本保证:一致性(Consistency)、可用性(Availability)和分区容错性(Partition...

    Linux下分布式系统以及CAP理论分析

    ### Linux 下分布式系统及 CAP 理论深入分析 ...未来,随着分布式系统的发展和技术的进步,可能会出现新的方法和技术来进一步优化CAP理论中的权衡,但当前CAP理论仍然是理解和设计分布式系统的基础。

    [原创]CAP理论与分布式系统设计1

    CAP 理论与分布式系统设计 CAP 理论是分布式系统设计中一个非常重要的概念,Michael Stonebraker 也曾断言分区必然会发生,并且系统内发生节点失败的机会随着系统规模的增加而增加。本文将详细介绍 CAP 理论的概念...

    分布式系统的CAP理论.pdf

    分布式系统的CAP理论是计算机科学中分布式计算领域的一个重要原则,由加州大学伯克利分校的计算机科学家Eric Brewer在2000年提出。该理论指出,在一个分布式计算系统中,Consistency(一致性)、Availability(可用...

    CAP理论及场景.docx

    CAP理论是分布式计算领域的一个基础概念,由计算机科学家Eric Brewer提出。它指出,在设计分布式系统时,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本...

    CAP理论与分布式数据库[归纳].pdf

    CAP 理论与分布式数据库 CAP 理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得,必须有所取舍。传统数据库保证了强一致性和高可用性,但这...

    [翻译]Spanner, 真时和CAP理论1

    在传统的CAP理论中,一个分布式系统无法同时保证一致性、可用性和分区容忍性,但Spanner通过巧妙的设计策略,尤其是在引入“真时”(TrueTime)的概念,成功地在全局范围内实现了强一致性和高可用性。 2. Spanner是CA...

    CAP理论与分布式系统设计.docx

    CAP理论是分布式系统设计中的核心概念,它指出在分布式环境中,任何系统都无法同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个特性。当网络分区发生时,系统必须...

    CAP理论与分布式数据库.doc

    CAP理论是分布式系统设计中的核心概念,全称为Consistency、Availability和Partition Tolerance。这个理论指出,在分布式系统中,无法同时保证数据一致性(C)、高可用性(A)和分区容错性(P)。在面临网络分区的...

    CAP理论与分布式数据库

    根据CAP理论,一致性(C),可用性(A),分区容错性(P),三者不可兼得,必须有所取舍。而传统数据库保证了强一致性(ACID模型)和高可用性,所以要想实现一个分布式数据库集群非常困难,这也解释了为什么数据库的扩展能力...

    基于服务治理的重试组件,其基于CAP理论设计,具有操作简单、实时监控、后台配置、支持多样化退避策略、支持多种告警方法等特点

    Easy-Retry是一款基于服务治理的重试组件,其基于CAP理论设计,具有操作简单、实时监控、后台配置、支持多样化退避策略、支持多种告警方法等特点。支持本地重试和远程重试两种模式,提供管理后台,使得重试任务可视...

    CAP理论1

    CAP理论是分布式系统设计中的重要概念,由Eric Brewer教授提出,它揭示了在分布式环境中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个基本需求之间的权衡关系。...

    CAP理论+BASE理论

    CAP理论:一个分布式系统不可能同时满足一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance),最多只能同时满足两个(CA / CP / AP)。 一致性(Consistence):在某个写操作完成后...

    CAP_理论与实践.pptx

    CAP理论是分布式系统设计中的一个基础概念,由Eric Brewer在1999年提出,并在2002年由Seth Gilbert和Nancy Lynch通过数学模型进行了证明。CAP理论指出,在分布式系统中,不能同时保证一致性(Consistency)、可用性...

    Hadoop的HA简介&CAP理论的关系

    CAP理论是由Eric Brewer在1998年提出的,指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)不能同时得到保证。 - **一致性**:确保所有节点在同一时间看到...

    面试准备 - 分布式系统 CAP 理论.docx

    图文并茂吃透面试题,看完这个,吊打面试官,拿高薪offer!

Global site tag (gtag.js) - Google Analytics