最终一致

||评论 (

我在2007年12月写了这个帖子上的一致性模型的第一个版本,但我从来没有喜欢它,因为它是写在匆忙和题目是接受治疗更彻底足够重要。ACM队列问我对其进行修订,在他们的杂志上使用,我走上改善制品的机会。

我发布了一个更新这篇文章2008年12月下瓦最终一致 - 再谈。- 请阅读这篇文章,而不是这一个。我在这里留下这一个透明/历史原因和因为意见帮助我提高了文章。对此我感激不尽


最近,已经有很多的讨论,有关的概念最终一致性在数据复制的情况下。在此我:放置想尝试收集一些原则和相关的大规模数据复制抽象和高可用性和数据一致性之间的权衡。我认为这项工作在进步,因为我不希望让每一个定义清脆的第一次。

还有的在看一致性两种方式。一个是从视开发者/客户端点;必威体育精装版app官网他们如何观察数据更新。第二种方法是从服务器端;更新如何流经系统,什么保证系统可以相对于更新给。

历史的

在一个理想的世界里,只有一个一致性模型;当某一更新所有的观察者会看到更新。第一次遇到这种浮出水面难以实现是在七十年代末的数据库系统。最好的“时代乐章”关于这个话题是布鲁斯·林赛,等人,“对分布式数据库注意事项”,研究报告RJ2571(33471),IBM研究中心,1979年7月的数据库复制的基本原则,在这些笔记布局和技术数量进行了讨论处理实现的一致性。许多这些技术试图实现分配的透明度;那对看起来好像只有一个系统,而不是一个号码协作系统的系统的用户。许多这些系统采取的方法,这是更好的失效系统,而不是打破这种透明度。

在九十年代中期,具有较大的网络系统的兴起,这些做法进行了重新审视。当时一个开始兼顾的想法,也许是可用性这些系统的重要特性。其结果是人们都在努力什么应该被交易冲抵。埃里克·布鲁尔大学伯克利分校教授系统和Inktomi公司当时头,在带来了不同的权衡在一起基调的PODC会议在2000年埃里克提出的CAP定理,其中指出,共享数据的系统的三个属性的;数据的一致性,系统可用性和耐受性网络分区中的一个仅可以实现两在任何给定的时间。更正式的确认可以在纸张的发现吉尔伯特和林奇

未耐受网络分区的系统可以实现数据一致性和可用性,并且通常通过使用事务协议这样做。为了使这项工作,客户端和存储系统都是一样的环境的一部分,他们不能作为一个整体在某些情形下,因此客户端无法观察到的分区。一个重要的观察结果是,在较大规模的分布式系统,网络分区是一个给定的,因此一致性和可用性不能同时实现。这意味着,一个人在什么砸两种选择;放松一致性将允许系统保持在可分区的条件和优先级排序一致性是指在一定条件下,系统将不提供下具有高可用性。

这都需要在客户端开发人员知道什么系统提供的。必威体育精装版app官网如果系统强调一致性,开发者必须处理的事实,系统可能无法提供采取例如写。必威体育精装版app官网如果写入失败,因为系统不可用的开发商将不得不面对如何处理要写入的数据做。必威体育精装版app官网如果系统强调可用性,它可能永远接受写,但在一定条件下的读取不会反映最近完成写操作的结果。然后,开必威体育精装版app官网发人员必须做出关于客户端是否需要获取绝对最新更新所有的时间作出决定。有一系列的,可以处理略微陈旧数据的应用程序和他们这种模式下,服务不周到。

原则上如在定义的事务系统的一致性属性ACID属性一种别样的一致性保证的。在ACID一致性涉及保证当事务完成数据库处于一致的状态;例如,从账户转移资金时,一个到另一个在两个账户持有不应该改变的总量。在酸系统这种一致性往往是开发商写事务的责任,但可以通过数据库管理完整性约束的协助。必威体育精装版app官网

客户端一致性

在客户端有四个组成部分:

  • 存储系统。就目前而言,我们将它视为一个黑盒子,但如果你想你应该假设在幕后是什么大,分布和建造,以保证耐用性和可用性。
  • 进程A。即写入和存储系统读取的过程。
  • 处理B&C。两个进程独立处理A的也写入和从存储系统读取。这是无关紧要的,这些是否真的是同一个进程中的进程或线程,重要的是他们是独立的,需要共享信息沟通。

在客户端侧的一致性与如何以及当观察者(在这种情况下处理A,B或C)看到在存储系统中的数据对象进行的更新的事情。在下列实施例方法A作出的更新的数据对象。

  • 强相合。在更新完成任何后续访问(用A,B或C)之后,将返回更新后的值。
  • 弱一致性。该系统不保证后续访问将返回更新后的值。需要满足的值将返回前一个数字的条件。通常这种情况是时间的流逝。当它保证任何观察者总会看到更新后的值更新和时刻之间的时间段被称为不一致性窗口
  • 最终一致性。存储系统保证,如果没有新的更新对象作出最终(不一致窗口关闭之后)所有访问将返回最后更新的值。最流行的系统实现最终一致性是DNS,域名系统。更新的名称是根据配置的模式,并结合时间来控制高速缓冲存储器的分布式,客户端最终都将看到该更新。

有一些在最终一致性模型是重要的考虑因素的变化:

  • 因果一致性。如果过程A已经传送到处理B,它已更新的数据项,通过进程B的后续访问将返回更新后的值和写入是保证取代早期的写操作。通过具有到处理A没有因果关系处理C的访问是受正常最终一致性规则。
  • 读你,写入数据的一致性。这是一个过程后,已更新的数据项始终访问更新后的值,绝不会看到一个旧价值的重要模式。这是因果一致性模型的一个特例。
  • 会话一致性。这是以前的模型,其中一个进程访问存储系统中的会话的上下文的实际版本。只要会话存在,该系统保证读你 - 写入数据的一致性。如果由于某些故障场景中创建一个新的会话需要会话终止,并且保证不重叠的会议。
  • 单调读一致性。如果一个进程已经出现了特定的值对象的任何后续访问不会返回任何先前的值。
  • 单调写一致性。在这种情况下,系统可以保证通过相同的方法来串行化写入。不保证本级一致性的系统是非常难以计划。

许多这些特性可以组合。例如,一个可以让单调的读取与会话级的一致性相结合。从实用的角度来看这两个属性(单调的读取和读你 - 写)是最可取的最终一致性系统,但并非总是需要。

你可以从不同的变化看到有好几个不同的场景成为可能。这取决于具体的应用之一是否能够处理的后果。

最终一致性不是极端的分布式系统的一些深奥的财产。许多现代的RDBMS系统,提供主机备份的可靠性实现他们的复制技术在同步和异步模式。在同步模式下副本升级是交易的一部分,在异步模式的更新到达以延迟的方式备份,常常通过日志传送。在过去的模式中,如果日志被运前的主服务器发生故障,从提升备份读书会产生老,不一致的值。还支持可扩展性更好的读取性能,RDBMS系统都开始提供从备份,这是提供最终一致性保证,那里的窗户不一致取决于日志传送的周期性的一个经典案例阅读。

服务器端的一致性。

我们需要建立一些定义,我们可以开始之前:

  • ñ- 存储的数据的副本的节点的数量
  • w ^- 需要在更新完成之前,确认收到更新的副本数量
  • [R- 当数据对象是通过一个读取操作访问被接触的副本数量

如果W + R>Ñ比写入组和读取组始终重叠和一个能保证强一致性。在初级备份RDBMS场景它实现同步复制N = 2,W = 2和R = 1。无论从哪个副本客户端读取,它总是会得到一致的答案。与从备份中读取异步复制的情况下启用N = 2,W = 1和R = 1。在这种情况下R + W = N且一致性不能得到保证。

这些配置的问题,这是基本的仲裁协议,是因为当失败的系统不能写W节点,写操作有失败,标志着系统的可用性。用N = 3和W = 3并且只提供2个节点的系统将具有失败的写入。

在分布式存储系统需要解决的高性能和高可用性的副本数量是大于2的系统一般高于仅仅着重于容错经常使用N = 3(与W = 2和R = 2点的配置)。该系统需要服务,需要什么样的容错,其中N可以是配置为数十甚至数百个节点和有R高读取负载经常复制他们的数据超过1,使得单个读取将返回一个结果。对于被关注的一致性体系中,它们集合W = N更新,但是这可能降低写入成功的概率。在此配置所关心的容错性,但不是一致的系统,常见的配置是与W = 3运行,以获得更新的基本耐久性,然后依靠一个懒惰的(疫情)技术来更新其他副本。

如何配置N,W及R的取决于什么常见的情况是,哪些优化性能路径的需求。在R = 1和N = W我们优化用于读壳体和在W = 1且R = N,我们将优化为一个非常快的写入。当然,在后者的情况下的,耐久性不故障的情况下保证,并且当w <(N + 1)/ 2有冲突的写入,因为写入集不重叠的可能性。

当W + R <= N,这意味着有在读和写集合没有重叠弱/最终一致性产生。如果此配置是经过深思熟虑的,而不是基于一个失败案例,比它几乎是有道理的集合R到任何东西,但1.有两个非常普遍的情况下,出现这种情况:第一是读缩放大规模复制前面提到的和第二种情况是数据访问较为复杂。在一个简单的键值模型很容易进行版本比较,以确定这是最新的价值,但在系统,其回报的对象集合是更难以确定正确的最新的一组应该是什么。在这些系统中写入集比副本集时,有一个地方的机制,在一个慵懒的方式应用更新的副本集的其余节点。直到所有的副本已被更新的周期是之前讨论过的不一致性窗口。当w + R <= N比系统很容易受到来自尚未接收到的更新节点读取。

无论读你写,会话和单调一致性可以实现一般依赖于客户的“粘性”的服务器执行他们的分布式协议。如果这是在同一台服务器每次比时间是比较容易保证读你,写入和读取单调。这使得稍硬管理负载平衡和容错,但它是一个简单的解决方案。利用会议,这是粘,使这个明确的,并提供曝光水平,客户可以推理。

有时读你,写入和读取单耳通过客户端来实现。通过对写入添加版本,客户端丢弃值的,与它之前的最后一个版本看到的版本读取。

分区发生时,系统中的一些节点无法达到其他节点,但所有的客户端可以达到。如果使用传统的多数定额的办法,比具有W上的副本集的节点可以继续,而其他分区变得不可采取更新的分区。同为读集。鉴于这两组重叠,顾名思义少数集变得不可用。分区不发生频繁,但他们确实发生,数据中心之间以及内部的数据中心。

概要

矛盾是可以容忍的,原因有二:对于高并发条件下提高读写性能以及处理分区情况下,大多数模型将导致系统不可用,即使节点启动和运行的一部分。

无论不一致是可以接受的取决于客户端应用程序。具体的流行情况是一个网站的情况中,我们可以有用户感知的一致性概念;不一致窗口需要比预期的为客户返回下一个页面加载的时间更小。这使得更新通过系统传播,预计在下一次读之前。

在这个帖子我试图收集一些各地的一致性和可用性模型的定义和原则。我希望这个名单是不完整的,甚至是不正确或微妙缺乏。我将继续更新,直到它更实用,完整。

评论

博客评论由Disqus