作者:NinGoo 原文链接:http://www.ningoo.net/html/2010/cap_theorem_and_eventually_consistent.html
CAP原理(CAP Theorem)
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick)。在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子。CAP原理中,有三个要素:
一致性(Consistency)
可用性(Availability)
分区容忍性(Partition tolerance)
CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。因此在进行分布式架构设计时,必须做出取舍。对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
当然,牺牲一致性,并不是完全不管数据的一致性,否则数据是混乱的,那么系统可用性再高分布式再好也没有了价值。牺牲一致性,只是不再要求关系型数据库中的强一致性,而是只要系统能达到最终一致性即可,考虑到客户体验,这个最终一致的时间窗口,要尽可能的对用户透明,也就是需要保障“用户感知到的一致性”。通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性的,“用户感知到的一致性”的时间窗口则取决于数据复制到一致状态的时间。
最终一致性(eventually consistent)
对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:
因果一致性。如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。
“读己之所写(read-your-writes)”一致性。当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。
会话(Session)一致性。这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。
单调(Monotonic)读一致性。如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
单调写一致性。系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。
上述最终一致性的不同方式可以进行组合,例如单调读一致性和读己之所写一致性就可以组合实现。并且从实践的角度来看,这两者的组合,读取自己更新的数据,和一旦读取到最新的版本不会再读取旧版本,对于此架构上的程序开发来说,会少很多额外的烦恼。
从服务端角度,如何尽快将更新后的数据分布到整个系统,降低达到最终一致性的时间窗口,是提高系统的可用度和用户体验非常重要的方面。对于分布式数据系统:
N — 数据复制的份数
W — 更新数据时需要保证写完成的节点数
R — 读取数据的时候需要读取的节点数
如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。
如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。
对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。
如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。
如果N=R,W=1,只需要一个节点写入成功即可,写性能和可用性都比较高。但是读取其他节点的进程可能不能获取更新后的数据,因此是弱一致性。这种情况下,如果W<(N+1)/2,并且写入的节点不重叠的话,则会存在写冲突CAP原理与最终一致性
分享到:
相关推荐
标题和描述均提到了“CAP原理”,而部分内容则深入探讨了这一原理的起源、发展及其在互联网技术领域的重要性。CAP原理,全称为Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),...
**CAP原理** CAP原理是分布式系统设计中的基础理论,它指出任何分布式系统都无法同时满足以下三个特性: 1. **一致性(Consistency)**:保证所有节点在同一时间具有相同的数据,即所有的数据复制都是同步的。 2. ...
2-2+分布式系统中的CAP原理1
CAP定理指在设计分布式系统时,一致性(Consistent)、可用性(Availability)、Partition Tolerance(分区容忍性)三个属性不可能同时满足,该定理也叫做布鲁尔定理。CAP定理明确了分布式系统所能实现系统的局限性...
CAP定理的历史沿革从1997年Fox和Brewer提出BASE概念开始,1999年他们又提出了CAP原理,直到2000年在PODC会议上正式提出CAP定理。2002年,Seth Gilbert和Nancy Lynch正式证明了CAP定理的可行性。CAP定理的流行得益...
在现代分布式系统设计中,CAP原理是一个核心概念,它指出在一个分布式系统中,以下三个属性不可能同时完全满足: C(Consistency):一致性,指数据在多个副本之间能够保持一致的特性(严格的一致性)。 A...
NoSQL 数据库是一种分布式数据库,高性能是其特点,因此,数据是如何被分布、复制/ 碎片以及合成就成为关键,这其中涉及你的应用对数据一致性的要求,见 CAP 原理,不同一致性处理方式决定不同类型: 1. 基于 ...
- 在分布式系统设计中,可以将CAP原理应用于不同的层面,例如局部设计策略。 #### 三、数据一致性问题:ACID与BASE **ACID原则:** - **一致性**(Consistency):事务前后,数据必须保持一致。 - **原子性**...
**数据库原理:深入理解CAP** 在数据库领域,CAP理论是一个至关重要的概念,它为我们理解和设计分布式系统提供了基础框架。CAP全称为Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区...
CAP原理和BASE理论 CAP原则(CAP定理)、BASE理论 一、CAP原则 一致性与可用性的决择编辑 取舍策略 BASE理论 基本可用 最终一致性 小结: 与NoSQL的关系编辑 CAP的是什么关系 为什么会是这样 选择权衡 延伸 分布式系统...
Java 面试题 Java 是一门广泛应用的编程语言,它的面试题涵盖了 Java 基础、Java 集合、多线程、Java 异常、Spring、Spring MVC、Spring Boot、Spring Cloud、Netty、Dubbo、Activemq...* CAP 原理的挑战和 limitation
CAP与一致性级别介绍PPT,是我在课堂报告时制作,介绍了CAP原理与实际的场景。
CAP 原理是分布式系统设计中的一个重要概念,指的是在分布式系统中,不可能同时满足以下三点: * 一致性(Consistency):所有节点上的数据是一致的 * 可用性(Availability):每个节点都可以独立提供服务 * 分区...
总的来说,CAP是一个强大的加密解密分析工具,能够帮助用户深入理解各种加密算法的工作原理,同时提供实际操作的平台。无论是为了学习密码学,还是进行安全分析,CAP都是一个不可或缺的工具。通过与示例文件的互动和...
CAP4(Cryptographic Analysis Program)是一款专门用于进行加密分析的软件工具,它可能被设计用于检测、评估和破解各种加密算法的安全性。下面将详细探讨密码学的基础概念、CAP4可能的功能以及与之相关的文件内容。...
相反,有状态系统必须处理数据一致性、可用性和分区容错性(CAP原理)的问题,这需要更复杂的解决方案,如Paxos、Raft和2PC等一致性算法,以及Gossip协议来实现分布式通信。 CAP原理指出,在分布式系统中,不可能...
在分布式课件中,可能会深入探讨CAP原理(Consistency、Availability、Partition Tolerance),这是设计分布式系统时必须权衡的三个关键属性。理解CAP原理可以帮助我们更好地理解在面临网络延迟、节点失效等问题时,...
Micro-Cap v10.04是一款强大的电路设计与混合信号模拟仿真工具,它为电子工程师提供了一个集成化的环境,用于创建电路原理图并进行精确的性能分析。这款软件的核心优势在于其集成了电路编辑和模拟功能,使得用户能够...
CAP原理,即一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance),在分布式系统设计中起着关键作用。在大多数情况下,为了系统的高可用性,通常会牺牲强一致性,转而追求最终一致性...
面试中,分布式系统的常见问题包括但不限于:CAP原理、分布式一致性、分布式锁、负载均衡、分布式任务调度以及容错机制等。CAP原理指出,一个分布式系统无法同时满足一致性、可用性和分区容忍性这三个基本需求,设计...