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

【分布式数据一致性一】CAP和一致性模型

 
阅读更多

CAP原理中,有三个要素:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容忍性(Partition tolerance)

CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。

 

  • 一致性,这个和数据库ACID的一致性类似,但这里关注的所有数据节点上的数据一致性和正确性,而数据库的ACID关注的是在在一个事务内,对数据的一些约束。
  • 可用性,关注的在某个结点的数据是否可用,可以认为某一个节点的系统是否可用,通信故障除外。CAP中的Available并不是指普通意义上的数据可用性,即数据通过备份达到高可用,而是指的是数据访问的性能,即能够快速返回系统所需的数据,这里强调的是数据读写的性能。
  • Partition Tolerance:分区容忍性,是否可以对数据进行分区。这是考虑到性能和可伸缩性。分区容忍性更通俗的理解是当存储系统的一个或几个节点挂了,存储系统是否还能继续提供数据读写操作。

 

 

当然,牺牲一致性,并不是完全不管数据的一致性,否则数据是混乱的,那么系统可用性再高分布式再好也没有了价值。牺牲一致性,只是不再要求关系型数据库中的强一致性,而是只要系统能达到最终一致性即可,考虑到客户体验,这个最终一致的时间窗口,要尽可能的对用户透明,也就是需要保障“用户感知到的一致性”。通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性的,“用户感知到的一致性”的时间窗口则取决于数据复制到一致状态的时间。

最终一致性(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,并且写入的节点不重叠的话,则会存在写冲突

参考:

http://www.blogjava.net/hello-yun/archive/2012/04/27/376744.html

http://www.cnblogs.com/aigongsi/archive/2012/10/15/2721366.html

 


  • Storage system...one should assume that under the covers it is something of large scale and highly distributed, and that it is built to guarantee durability and availability..
  • Process A. This is a process that writes to and reads from the storage system.
  • Processes B and C. These two processes are independent of process A and write to and read from the storage system... Client-side consistency has to do with how and when observers (in this case the processes A, B, or C) see updates made to a data object in the storage systems.
  • Strong consistency. After the update completes, any subsequent access (by A, B, or C) will return the updated value.
  • Weak consistency. The system does not guarantee that subsequent accesses will return the updated value. A number of conditions need to be met before the value will be returned. The period between the update and the moment when it is guaranteed that any observer will always see the updated value is dubbed the inconsistency window.
  • Eventual consistency. This is a specific form of weak consistency; the storage system guarantees that if no new updates are made to the object, eventually all accesses will return the last updated value. If no failures occur, the maximum size of the inconsistency window can be determined based on factors such as communication delays, the load on the system, and the number of replicas involved in the replication scheme.

 

细分最终一致性

 

  • Causal consistency. If process A has communicated to process B that it has updated a data item, a subsequent access by process B will return the updated value, and a write is guaranteed to supersede the earlier write. Access by process C that has no causal relationship to process A is subject to the normal eventual consistency rules.
  • Read-your-writes consistency. This is an important model where process A, after it has updated a data item, always accesses the updated value and will never see an older value. This is a special case of the causal consistency model.
  • Session consistency. This is a practical version of the previous model, where a process accesses the storage system in the context of a session. As long as the session exists, the system guarantees read-your-writes consistency... the guarantees do not overlap the sessions.
  • Monotonic read consistency. If a process has seen a particular value for the object, any subsequent accesses will never return any previous values.
  • Monotonic write consistency. In this case the system guarantees to serialize the writes by the same process. Systems that do not guarantee this level of consistency are notoriously hard to program.

 

参考:http://www.infoq.com/news/2009/01/EventuallyConsistent

 

 

《NoSQL Distrilled》5.3.1中关于CAP的解释

  • Availability has a particular meaning in the context of CAP—it means that if you can talk to a node in the cluster, it can read and write data. That’s subtly different from the usual meaning,
  • Partition tolerance means that the cluster can survive communication breakages in the cluster that separate the cluster into multiple partitions unable to communicate with each other((situation known as a split brain,如下图所示)



 

 

 

 

最后,这本书提出Availability的通俗理解

We can then think of availability as the limit of latency that we’re prepared to tolerate; once latency gets too high, we give up and treat the data as unavailable—which neatly fits its definition in the context of CAP.

 

 

 

 

 

  • 大小: 387.6 KB
分享到:
评论

相关推荐

    从PAXOS到ZOOKEEPER分布式一致性原理与实践

    《从PAXOS到ZOOKEEPER:分布式一致性原理与实践》是一本深入探讨分布式系统中...这本《从PAXOS到ZOOKEEPER:分布式一致性原理与实践》是学习和探索这一领域的宝贵资源,值得每一个分布式系统开发者和爱好者深入研究。

    检验码在物联网系统中分布式数据一致性的保证.pptx

    为了进一步提升物联网系统的数据一致性,可以将检验码与分布式一致性协议结合起来使用。 - **Paxos 和 Raft 协议**:这些协议能够确保分布式系统中所有节点的数据状态保持一致,通过与检验码技术结合,可以提高系统...

    分布式系统事务一致性解决方案大对比

    在探讨分布式系统事务一致性解决方案时,我们首先需要理解分布式系统的核心挑战之一就是如何在保证数据一致性的同时,还要维持系统的可用性和分区容错性。根据CAP定律,一个分布式系统不可能同时满足这三个特性。在...

    分布式数据库数据一致性验证.pptx

    ### 分布式数据库数据一致性验证 #### 一、CAP 定理与分布式数据库一致性 ...通过对CAP定理的理解、ACID事务特性的挑战分析以及分布式一致性算法的研究,可以有效地设计出满足各种业务需求的分布式数据库系统。

    保证分布式系统数据一致性的6种方案

    在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性?具体业务场景如下,比如一个业务操作,如果同时调用服务A、B、C,需要满足要么同时成功;要么同时失败。A、B、C可能是多个不同...

    分布式数据库一致性与容错.pptx

    2. **CAP定理与一致性和可用性权衡**:根据CAP定理,在分布式系统中无法同时保证一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。因此,设计分布式系统时需要在这三个属性之间...

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

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

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

    然后,BASE原则是大型分布式系统中常用的一种弱一致性模型,它是Basically Available(基本可用)、Soft state(软状态)和Eventually Consistent(最终一致性)的组合。它允许系统在短时间内容忍不一致,但最终会...

    分布式事务实践 解决数据一致性

    6-9 全局一致性ID和分布式对象_ 第7章 分布式事务实现:消息驱动模式 详细介绍3种分布式事务实现的模式中的消息驱动模式并通过完整实例演示了消息驱动模式下,实现微服务系统的分布式事务的完整过程。 7-1 分布式...

    分布式数据库一致性保证算法.pptx

    **Raft算法**是一种更为直观的分布式一致性算法,旨在简化Paxos算法的理解和实现难度。其主要特点包括: - **选举阶段**:当集群失去领导者时,服务器进入选举阶段,随机生成一个时间段作为竞选超时时间,在超时...

    分布式数据集的实时一致性.pptx

    **Paxos算法**是一种经典的分布式一致性算法,用于解决分布式系统中如何达成一致性的难题。它能够保证即使在网络故障和节点失效的情况下,系统也能达到一致性状态。然而,由于其实现复杂度较高,理解和实现起来较为...

    分布式数据库如何平衡一致性和读写延迟.docx

    一致性模型 (Consistency Model) 是分布式数据库中一个非常重要的概念,它决定了系统中数据的一致性和可用性。在分布式数据库中,数据副本的引入可以说是“万恶之源”,因为它会引入一致性问题。在CAP原理中,强一致...

    分布式系统CAP理论模型

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

    分布式系统数据一致性介绍.docx

    而在分布式系统中,CAP定理指出,一个分布式系统不可能同时满足一致性、可用性和分区容错性,系统设计者需要在三者之间做出权衡。 - **强一致性**:所有读操作都能获取到最新写入的数据,但可能会牺牲可用性,因为...

    分布式分页机制与数据一致性.pptx

    - 一致性模型定义了分布式系统中数据的一致性级别,常见的模型包括强一致性、弱一致性和最终一致性。 - **分布式分页机制的常见问题**: - **热点数据问题**:某些页面的数据访问量远高于其他页面,可能导致这些...

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

    TCC模式在处理分布式一致性时,灵活性更高,但需要业务逻辑的配合和额外的异常处理机制。总的来说,选择何种一致性保障方案取决于系统的特定需求,包括性能、可用性、延时和业务复杂性等因素。在实际应用中,通常...

    Paxos到Zookeeper:分布式一致性原理与实践

    《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式...

Global site tag (gtag.js) - Google Analytics