http://www.ningoo.net/html/2010/cap_theorem_and_eventually_consistent.html
对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:
-
因果一致性。如果进程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,并且写入的节点不重叠的话,则会存在写冲突
分享到:
相关推荐
在分布式存储系统中,如何确保数据的一致性是一个核心问题,而因果一致性作为其中的一种中间一致性模型,旨在维持数据间逻辑上的因果关系,以支持更加复杂的分布式应用。 随着分布式系统的应用越来越广泛,其安全性...
2. 存储一致性模型,解释了不同类型的存储一致性模型及其对程序行为的影响,比如强一致性、弱一致性和顺序一致性等。3. Cache一致性协议,这是为了在多核环境中维护Cache数据的一致性而设置的规范,其中包括释放一致...
内容概要:本文提出了一种简化的一致性理论框架,通过统一扩散模型和一致性模型(CMs)的不同参数化方法,识别了训练不稳定性的问题根源。在此基础上,文章介绍了扩散过程参数化、网络架构以及训练目标的关键改进...
### 具有可信约束的分布式存储因果一致性模型 #### 引言 随着互联网技术的快速发展,用户对于数据处理的需求日益增长且趋于多元化。为解决这一挑战,分布式云存储以其高性能和可扩展性的特点应运而生。分布式云...
分布式存储因果一致性模型是云存储服务中解决数据一致性问题的关键技术。在云存储环境中,由于数据分布在全球各地的数据中心,确保数据的一致性对于提供可靠的服务至关重要。数据一致性分为强一致性和弱一致性,前者...
本文标题“一种基于知识点结构的分布式协同学习一致性模型分析”,描述了在现代远程教育环境下,研究协同学习的一致性维护、协同感知等关键技术的重要性。文章主要探讨了如何通过特定的一致性模型和算法,特别是操作...
潜在一致性模型(Latent Consistency Model)是一种在计算机视觉和机器学习领域中用于图像生成的技术,特别是对于高分辨率图像合成的应用。该模型的核心思想是利用深度学习网络在潜在空间中的推理,通过少量的迭代...
本文将详细解析"Python_基于少步推理的高分辨率图像合成的潜在一致性模型"这一主题,主要关注如何利用深度学习模型来实现高效且高质量的图像合成。 首先,我们要理解“潜在一致性模型”(Latent Consistency Model...
综合上述,本文提出的基于共享图和部分复制策略的分布式存储因果一致性模型,为分布式系统设计提供了一种新的思路,它在维持系统稳定性和数据一致性的同时,对操作的响应时间、远程更新可见性以及资源消耗进行了优化...
在探讨因果一致性模型时,本文提出了基于HashGraph的Causal GPdh模型。HashGraph是一种采用了虚拟投票原理的分布式账本技术,它利用了数据中心稳定向量的概念,并结合了混合逻辑时钟(Hybrid Logical Clocks,HLC)...
本文介绍了一种一致性模型,该模型基于二元语义评价方法,能够对决策者之间的偏好差异进行量化和处理。二元语义评价方法是一种处理不均衡模糊语义信息的群体决策问题的数学工具,它可以将定性的评价信息转化为一种更...
铁路客票系统中基于Paxos算法的数据一致性模型研究.pdf
- **弱一致性模型**:这类模型允许某些形式的不一致,以提高性能。例如,**释放一致性(Release Consistency)**和**收购一致性(Acquire Consistency)**允许对特定类型的内存访问施加更强的一致性约束,而其他操作...
内存模型验证是软件开发过程中的一个重要环节,尤其是在高性能计算、多核处理器以及并发系统中,内存一致性模型的正确性对于程序行为的预测性和系统性能至关重要。PipeCheck 是一个专门用于微架构内存一致性模型验证...
分布式系统中常用的一致性模型有强一致性、顺序一致性、因果一致性、会话一致性、单调一致性等。每种一致性模型都有其特点和适用场景。例如,强一致性模型适用于需要严格数据一致性的场景,但可能会牺牲一定的系统...
数据一致性模型是分布式存储系统中非常重要的概念,它定义了数据副本之间保持同步的策略和规则。一般而言,存在强一致性和弱一致性等模型: 1. 强一致性模型:在这种模型下,一旦数据被更新,无论何时何地,系统...
针对目前因果一致性模型中存在的元数据传播开销大、操作时延、远程更新可见时延高等问题,提出了基于共享图和部分复制策略的分布式存储因果一致性模型。该模型以共享图拓扑结构为基础,每个数据中心存放完整数据集的...
其中,严格缓存一致性模型要求任何读操作都返回最近一次对数据的写操作的结果。缓存一致性问题需要考虑节点的动态变化、网络状况的波动以及缓存传播机制等因素。同时,缓存机制的引入虽然带来了性能优势,但也引入了...