`

谈正确理解 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 系统。

 

(End)

-------------------------------------------------

网上的另一篇文章:

http://blog.csdn.net/zhaoyp1985/article/details/7880547 CAP理论  (提到A CAP Solution)

分享到:
评论

相关推荐

    加密解密分析工具CAP

    在信息安全领域,加密技术是保护数据隐私和网络安全的关键手段,而CAP工具则为研究和理解这些算法提供了一个直观的平台。 首先,让我们详细探讨一下加密的基本概念。加密是一种将明文数据转化为看似随机的密文的...

    cap原理

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

    cap4加密分析软件

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

    CAP定理的详细讲述

    这一理论对于理解现代分布式系统的设计和操作至关重要,特别是对于那些高度依赖网络和数据共享的互联网公司而言。 #### 一致性(Consistency) 在分布式系统中,一致性意味着所有节点在同一时刻看到相同的数据视图...

    03-cap.rar

    《Linux与UNIX系统编程手册》是一本深入探讨操作系统层面编程技术的经典著作,涵盖了与系统交互的各个方面,包括文件I/O、进程控制、网络通信、信号处理等核心主题。该资源的压缩包"03-cap.rar"包含了一份此书源码的...

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

    CAP 定理由埃里克·布鲁尔(Eric Brewer)于 2000 年提出,它指出在网络分区的情况下,任何共享数据的分布式系统最多只能同时实现一致性(C)、可用性(A)和分区容忍性(P)这三个属性中的两个。这一理论为分布式...

    Spanner, TrueTime & the CAP Theorem

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

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

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

    计算机网络高级软件编程技术 源代码

    理解分布式系统的基本概念,如CAP理论、一致性模型,以及如何实现分布式服务的协调和管理,都是高级网络编程的一部分。 7. **RESTful API设计**:在Web服务中,RESTful API已经成为主流。学习如何设计和实现符合...

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

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

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

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

    CAP-develop (1).zip

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

    分布式系统CAP

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

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

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

    微服务下事务一致性介绍

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

    计算机网络实验7 - WEB 页面请求全历程协议及数据包解析(综合性实验)

    在本实验中,学生将深入理解计算机网络中的Web页面请求全过程,包括协议交互和数据包解析。实验的主要目的是让学生能够捕获和分析网络数据包,理解HTTP和DNS协议的工作原理,以及TCP连接的建立和终止过程。 首先,...

    SSD8 PQ1 网络分布式实践练习一答案

    了解CAP理论(一致性、可用性和分区容错性)和BASE理论(基本可用、软状态、最终一致),这些都是构建分布式系统的基础原则。 2. **网络基础知识**:包括TCP/IP协议栈、HTTP协议、DNS域名解析等,这些都是网络通信...

    SSD8 Multiple Choice 网络分布式选择题全部答案

    SSD8(可能是某个课程或考试的代码)的多个选择题是网络分布式系统领域的一个学习重点,这个主题涵盖了网络通信、分布式计算、数据存储和系统架构等多个...记住,理论知识与实践相结合才能真正掌握分布式网络的精髓。

    SSD8 Ex3 网络分布式练习三答案

    9. **CAP理论**:在分布式系统中,一致性、可用性和分区容忍性不可兼得,需要根据实际需求进行权衡。 10. **服务发现**:自动发现和管理分布式系统中的服务,如DNS、Consul或Zookeeper等工具。 练习三可能会要求...

Global site tag (gtag.js) - Google Analytics