`
yiihsia
  • 浏览: 68237 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CAP理论及系统一致性

阅读更多

印象中CAP理论开始流行是从Amazon Dynamo的论文开始的,Amazon的CTO还在他的博客中介绍了最终一致性的概念,从此以后,各种会议和交流中都少不了CAP的影子。然而,对于分布式系统工程设计和开发来说,CAP意味着什么呢?

CAP 理论由 Berkerly 的 Brewer 教授提出,三者的含义如下:

  • 一致性 ( Consistency) :任何一个读操作总是能读取到之前完成的写操作结果;
  • 可用性 ( Availability) :每一个操作总是能够在确定的时间内返回;
  • 分区可容忍性 (Tolerance of network Partition) :在出现网络分区的情况下,仍然能够满足一致性和可用性;

CAP 理论认为,三者不能同时满足,并给出了证明,简单阐述如下:假设系统出现网络分区为 G1 和 G2 两个部分,在一个写操作 W1 后面有一个读操作 R2 , W1 写 G1 , R2 读取 G2 ,由于 G1 和 G2 不能通信,如果读操作 R2 可以终结的话,必定不能读取写操作 W1 的操作结果。

由于CAP三者无法同时满足,Amazon Dynamo论文中引入了用户可配置的NWR策略,在CAP三个特性中作出权衡。比如N=3, W=3, R=1强调一致性;N=3, W=1, R=1强调可用性;N=3, W=2, R=2是一种折衷的策略。另外,还有一些NOSQL系统把CAP理论当成一种借口,认为既然我们不能同时满足一致性和可用性,那NOSQL系统就牺牲一致性。这些说法本身虽然不能说有错,但我们至少需要思考两个问题:

  1. CAP理论在工程的角度意味着什么?
  2. 一致性的具体含义?

笔者认为,最初的CAP理论只是粗略地告诉我们”天下没有免费的午餐”,对于NOSQL系统设计指导意义不大。原始的CAP理论描述有如下缺陷:

  1. 缺少时间因素。比如对于可用性描述,10s中停服务和1个小时停服务完全是两个概念,只停写服务和同时停读写服务的影响也是很不一样的。
  2. 一致性描述问题。每个读操作虽然能够读取到之前写操作结果,但是假设某些写操作发生在机器A,某些写操作发生在机器B,一致性依赖于对机器A和机器B上写操作的合并,操作的顺序是无法保证的。比如Dynamo&Cassandra系统中由于可能出现同一个<key, value>对被多个节点同时修改的情形,即使在NWR策略中配置W + R > N,也需要依赖冲突合并来保证一致性,这从理论上是没有完美做法的。
  3. 网络分区描述过于模糊。工程上容易出现的网络问题一般是机房之间网络不通,某个机房停电,某台机器故障或者某些机器因为机架电源或者交换机的原因发生故障。单个机器故障也可以认为是网络分区,但这和机房网络不通对系统设计带来的挑战差别是很大的。

一般可以认为:工程上网络分区总是存在,比如机器故障或者网络异常,一致性和可用性不能同时满足。且工程上从来不要求绝对的一致性或者可用性,而是寻求一种平衡,可以将一致性和可用性分别重定义为HarvestYield

  • Harvest (对应一致性):percent of required data actually included in the responses (请求结果的真实程度);
  • Yield (可用性):percent of requests answered successfully (成功请求占的百分比);

CAP理论可以演化为在工程上寻找一种方法,在”成功请求占的百分比”和”请求结果的真实程度”之间取得一个权衡,详细描述可以参考Coda的博客。然而,这个描述仍然不够具体,下面我们就有总控节点的系统(如GFS+Bigtable)和P2P系统(如Amazon Dynamo)两类系统的CAP含义分别进行说明。

首先我们必须明确一致性的概念。NOSQL系统经常提到最终一致性模型:假如客户端A写入一个值到存储系统,客户端B最终总是能够读取到A写入的最新值,这里有一个时间窗口,依赖于交互延迟,系统负载以及复制技术中的replica的个数。Amazon CTO宣称Dynamo为最终一致性系统,然而,这里的最终一致性具有很大的欺骗性,因为虽然客户端B能够读到其它客户端写入的所有数据,但是可能出现多个节点更新同一个值的情况,需要依赖冲突合并来解决多机操作顺序问题。后续的文章中,我们都会把Amazon Dynamo这种需要依赖操作合并,可能会丢失数据的模型从最终一致性模型中排除出去。最终一致性模型要求同一份数据同一时刻只能被一台机器修改,也就是说机器宕机时需要停很短时间写服务。

对于带有总控节点的系统,将CAP理论的定义做出适当的调整如下:

  • 一致性:读操作总是能读取到之前完成的写操作结果,且不需要依赖于操作合并
  • 可用性:读写操作总是能够在很短的时间内返回,即使某台机器发生了故障,也能够通过其它副本正常执行,而不需要等到机器重启或者机器上的服务分配给其它机器以后才能成功;
  • 分区可容忍性:能够处理机器宕机,机房停电或者出现机房之间网络故障等异常情况;

带有总控节点的NOSQL系统一般是最终一致性系统,允许机器宕机时停止很短时间,比如10s的部分数据写服务,但是不允许停读服务,且服务恢复时间越短越好。大多数NOSQL系统都是对一份数据保留多个备份,同一时刻只有一个备份为主,提供写服务,其它备份为辅,同步主备份的写操作,所有的备份都可以提供读取服务,且主备份提供保证强一致性的读服务。当主备份所在机器发生故障时,需要等一段时间才能由原来的辅备份接替主备份提供写服务。

类似Amazon的P2P去中心化系统提供需要依赖冲突合并的一致性,比如Cassandra中的“last write wins”冲突合并策略,虽然并不完美但确实能够解决很多问题。这样的系统能够通过用户配置NWR策略来权衡一致性和可用性,可以做到单台机器宕机时读写服务都不停止。

最后,再次提醒大家设计系统时:不要过分迷恋CAP,认清最终一致性,理智对待NWR。

转自淘宝核心技术团队博客:http://rdc.taobao.com/blog/cs/?p=631

分享到:
评论

相关推荐

    分布式系统CAP理论模型

    CAP理论模型为分布式系统的设计师和开发者提供了一个重要的理论框架,帮助他们更好地理解和解决分布式环境中的一致性、可用性和分区容忍性问题。通过深入了解CAP理论的基本概念及其背后的权衡关系,可以有效地指导...

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

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

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

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

    分布式系统的CAP理论.pdf

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

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

    CAP 理论是由 Eric Brewer 于 2000 年提出的,它指出在分布式系统中, Impossible同时满足以下三个条件:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。这三个条件是分布式...

    CAP理论及场景.docx

    它指出,在设计分布式系统时,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本属性,最多只能实现其中的两个。这是因为网络环境的不可预知性和可能存在的...

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

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

    分布式系统一致性(ACID、CAP、BASE、二段提交、三段提交、TCC、幂等性)原理详解1

    总之,分布式系统一致性是现代互联网架构中的核心挑战,理解并合理运用ACID、CAP、BASE理论以及各种事务处理机制,有助于构建更加健壮、可靠的分布式服务。在设计和实现过程中,需要根据业务特点权衡一致性、可用性...

    CAP_理论与实践.pptx

    CAP理论指出,在分布式系统中,不能同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance),最多只能同时满足其中的两项。 一致性意味着所有节点在同一时间看到相同的数据,...

    CAP理论1

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

    微服务下事务一致性介绍

    本文将深入探讨微服务下的事务一致性,包括CAP理论、BASE理论,以及各种分布式事务解决方案。 首先,CAP理论是分布式系统设计的基础。它指出在分布式系统中,Consistency(一致性)、Availability(可用性)和...

    2013年中国数据库大会-11-NoSQL一致性实践:我对CAP的一点认识

    CAP定理,又称布鲁尔定理(Brewer's Theorem),由加州大学伯克利分校的计算机科学家Eric Brewer提出,它指出在分布式计算系统中,Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容错性...

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

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

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

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

    cap原理

    CAP原理,全称为Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),是由Eric Brewer在2000年的ACM分布式计算原则研讨会上首次提出的一种理论,后来由Seth Gilbert和Nancy Lynch在...

    CAP理论与分布式数据库

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

    分布式系统一致性保障方案.docx

    分布式系统一致性保障方案是互联网和金融领域中至关重要的议题,特别是在面临CAP理论和BASE理论的权衡时。CAP定理指出,在分布式系统中,一致性、可用性和分区容忍性这三个属性不能同时达到最优,而BASE理论则主张在...

    分布式数据库的一致性与可用性分析.pdf

    CAP理论指出,一个分布式计算系统不可能同时完全满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三个保证,最多只能同时满足其中两项。因此,在设计和实现分布式数据库时...

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

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

Global site tag (gtag.js) - Google Analytics