`
085567
  • 浏览: 217375 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谈正确理解 CAP 理论

 
阅读更多

转自:http://www.douban.com/group/topic/11765014/

 

 

CAP 理论在搞分布式的程序员中已经是路人皆知了。但是 CAP 理论就好比是相对论,虽然所有的人都知道,但是却没有多少人真正理解。 

要真正理解 CAP 理论必须要读懂它的形式化描述。 形式化描述中最重要的莫过于对 Consistency, Availability, Partition-tolerance 的准确定义。

Consistency (一致性) 实际上等同于系统领域的 before-or-after atomicity 这个术语,或者等同于 linearizable (可串行化) 这个术语。具体来说,系统中对一个数据的读和写虽然包含多个子步骤并且会持续一段时间才能执行完,但是在调用者看来,读操作和写操作都必须是单个的即时完成的操作,不存在重叠。对一个写操作,如果系统返回了成功,那么之后到达的读请求都必须读到这个新的数据;如果系统返回失败,那么所有的读,无论是之后发起的,还是和写同时发起的,都不能读到这个数据。

要说清楚 Availability 和 Partition-tolerance 必须要定义好系统的故障模型。在形式化证明中,系统包含多个节点,每个节点可以接收读和写的请求,返回成功或失败,对读还要返回一个数据。和调用者之间的连接是不会中断的,系统的节点也不会失效,唯一的故障就是报文的丢失。 Partition-tolerance 指系统中会任意的丢失报文(这和“最终会有一个报文会到达”是相对的)。 Availability 是指所有的读和写都必须要能终止。

注: “Availability 是指所有的读和写都必须要能终止” 这句话听上去很奇怪,为什么不是“Availability 是指所有的写和读都必须成功”? 要回答这个问题,我们可以仔细思考下“什么是成功”。“成功”必须要相对于某个参照而言,这里的参照就是 Consistency。

CAP 理论说在一个系统中对某个数据不存在一个算法同时满足 Consistency, Availability, Partition-tolerance 。 注意,这里边最重要和最容易被人忽视的是限定词“对某个数据不存在一个算法”。这就是说在一个系统中,可以对某些数据做到 CP, 对另一些数据做到 AP,就算是对同一个数据,调用者可以指定不同的算法,某些算法可以做到 CP,某些算法可以做到 AP。

要做到 CP, 系统可以把这个数据只放在一个节点上,其他节点收到请求后向这个节点读或写数据,并返回结果。很显然,串行化是保证的。但是如果报文可以任意丢失的话,接受请求的节点就可能永远不返回结果。

要做到 CA, 一个现实的例子就是单点的数据库。你可能会疑惑“数据库也不是 100% 可用的呀?” 要回答这个疑惑,注意上面说的故障模型和 availability 的定义就可以了。

要做到 AP, 系统只要每次对写都返回成功,对读都返回固定的某个值就可以了。

如果我们到这里就觉得已近掌握好 CAP 理论了,那么就相当于刚把橘子剥开,就把它扔了。

CAP 理论更重要的一个结果是, 在 Partial Synchronous System (半同步系统) 中,一个弱化的 CAP 是能达到的:

* 对所有的数据访问,总返回一个结果
* 如果期间没有报文丢失,那么返回一个满足 consistency 要求的结果。

这里的半同步系统指每个节点存在一个时钟,这些时钟不需要同步,但是按照相同的速率流逝。更通俗的来说,就是一个能够实现超时机制的系统。

举个例子,系统可以把这个数据只放在一个节点上,其他节点收到请求后向这个节点读或写数据,并设置一个定时器,如果超时前得到结果,那么返回这个结果,否则返回失败。

更进一步的,也是最重要的,实现一个满足最终一致性 (Eventually Consistency) 和 AP 的系统是可行的。 现实中的一个例子是 Cassandra 系统。

分享到:
评论

相关推荐

    加密解密分析工具CAP

    加密解密分析工具CAP是一款专为密码学爱好者和专业人士设计的实用软件,它主要用于解析和理解各种常见的加密算法。在信息安全领域,加密技术是保护数据隐私和网络安全的关键手段,而CAP工具则为研究和理解这些算法...

    cap原理

    是由Eric Brewer在2000年的ACM分布式计算原则研讨会上首次提出的一种理论,后来由Seth Gilbert和Nancy Lynch在理论上证实其正确性,从而形成了著名的Brewer(CAP)定理。 ### 1. Consistency(一致性) 一致性是指...

    cap4加密分析软件

    CAP4软件可能包含这些高级算法的模拟,让用户在实际操作中理解非对称加密和对称加密的区别,以及它们在安全性、效率和应用场景上的差异。例如,RSA依赖大素数的因数分解困难性,而AES则是通过置换和混淆操作进行加密...

    03-cap.rar

    6. **权限与文件系统**:了解权限模型(读、写、执行权限)和文件系统结构(如inode、目录、硬链接和软链接)对正确管理文件和资源至关重要。 7. **错误处理**:所有系统调用返回值通常会检查是否成功,失败时错误...

    CAP定理的详细讲述

    CAP定理,全称为一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance),是分布式计算领域中的一个关键概念,由Eric Brewer于2000年首次提出,并在2002年由Seth Gilbert和Nancy Lynch在理论...

    CAP Twelve Years Later: How the“Rules” Have Changed

    十二年后的今天,随着技术的发展和应用场景的变化,我们对 CAP 定理的理解也发生了变化。具体来说: - **对“2 of 3”误解的澄清**:传统的理解认为,在面对网络分区时,系统必须在一致性和可用性之间做出选择。但...

    Spanner, TrueTime & the CAP Theorem

    这样,即使在网络延迟或硬件故障的情况下,系统也能理解时间的不确定性,从而做出正确的决策。 CAP定理是分布式系统设计的基础理论,由Eric Brewer在2000年提出。它指出,在分布式系统中,无法同时满足一致性...

    CAP-develop (1).zip

    1. **CAP理论**:CAP理论是分布式系统设计中的基础概念,它指出在分布式系统中,不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。CAP-develop项目可能是在尝试在...

    掌握 CAP 定理,以及每个的含义和 CAP 定理的应用.docx

    理解CAP定理有助于开发者在设计分布式系统时做出权衡,确保系统的稳定性和可靠性。 1. 一致性(Consistency) 一致性保证了系统在任何时刻,所有节点的数据都是相同的,客户端无论从哪个节点读取,都能得到最新的...

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

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

    cap(10-6).zip_上升沿_计算脉冲沿

    在电子工程和数字信号处理领域,理解和分析脉冲信号的上升沿是非常重要的。"cap(10-6).zip_上升沿_计算脉冲沿"这个压缩包...CAP2软件的使用则提供了实践这些理论的实用工具,对于工程师和学生来说都是宝贵的教育资源。

    分布式系统CAP

    CAP定理由Eric Brewer提出,并于2000年被证明为理论上的正确性。该定理指出,在分布式系统中,无法同时保证以下三个特性: 1. **一致性(Consistency)**:所有节点在同一时刻看到相同的数据。 2. **可用性...

    微服务下事务一致性介绍

    在微服务架构中,事务一致性是一个至关重要的议题。...通过理解CAP和BASE理论,结合不同类型的分布式事务方案,开发者可以更好地应对复杂的事务一致性挑战,确保系统在分布式环境下的正确性和稳定性。

    bcd-to-excess-3.zip_BCD to excess-3_micro-cap

    7. **练习或测试数据**:可能包含一组测试用的BCD编码,用于验证读者理解并正确实现了转换函数。 通过学习这个文件,读者不仅可以理解这两种编码方式,还能掌握在微控制器环境中进行数字编码转换的实际技能。对于...

    容斥原理理论和鸽巢原理

    因此,正确的计数方法是先计算A和B各自的元素个数,然后加上它们的交集的元素个数,再减去两次重复计数的交集部分。用公式表示就是: \[ |A \cup B| = |A| + |B| - |A \cap B| \] 这个原理可以扩展到多个集合的...

    分布式处理

    分布式处理是一种重要的IT技术,...总的来说,分布式处理的核心是平衡系统的需求和约束,理解并应用CAP理论是设计高效、可靠分布式系统的基石。对于开发者来说,理解这些原理并根据实际业务需求进行权衡是非常关键的。

    图灵学院面试致胜宝典电子版已改.zip

    13. **分布式系统**:理解CAP理论和BASE理论,了解Zookeeper在分布式系统中的作用,如配置管理、服务注册与发现。 14. **性能优化**:分析和调优Java应用程序的性能,如JProfiler、VisualVM等工具的使用,以及内存...

    概率统计习题册_浙大版

    - 至少有两个零件是次品:\((A'_1 \cap A'_2 \cap A_3) \cup (A'_1 \cap A_2 \cap A'_3) \cup (A_1 \cap A'_2 \cap A'_3) \cup (A'_1 \cap A'_2 \cap A'_3)\) 4. **命题判断** - ⑴ 不成立,因为\(B \cup B = B\)...

    第八讲-分布式事务原理及应用.pdf

    **CAP理论**:一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)不能同时满足。在分布式系统中,通常需要牺牲一致性来换取可用性或分区容错性。 **BASE理论**:基本可用(Basically ...

Global site tag (gtag.js) - Google Analytics