最终一致 - 重新审视

||评论 (

我写了一个这个帖子的第一版关于一年前的一致性模型,但我从不满足于它以匆忙写的,这个话题足以获得更彻底的治疗。ACM队列asked me to revise it for use in their magazine and I took the opportunity to improve the article. This is that new version.

最终 - 全球范围内的可靠分布式系统需求在一致性和可用性之间进行权衡。

在亚马逊的云计算基础上是基础架构服务,如亚马逊的S3(简单存储服务),SimpleDB和EC2(EC2(弹性计算云),为构建Internet级计算平台和各种应用提供资源。对这些基础架构服务的要求非常严格;他们需要在安全性,可扩展性,可用性,性能和成本效益方面进行高标记,并且需要满足这些要求,同时为全球数百万客户服务,不断。

根据涵盖这些服务是在全球范围内运营的大规模分布式系统。该规模创造了额外的挑战,因为当系统处理数万亿和万亿的请求时,现在可以保证通常具有低概率的事件,并且需要在系统的设计和架构中进行前端。鉴于这些系统的全球范围,我们使用复制技术普遍存在,以保证一致的性能和高可用性。虽然复制使我们更接近我们的目标,但它无法以完全透明的方式实现它们;在许多条件下,这些服务的客户将面临在服务中使用复制技术的后果。

这种情况本身在提供的数据类型中的一种方式之一,特别是当底层分布式系统提供用于数据复制的最终一致性模型时。在亚马逊设计这些大型系统时,我们使用一套与大规模数据复制相关的指导原则和抽象,并专注于高可用性和数据一致性之间的权衡。在本文中,我介绍了一些相关背景,我们向提供了在全球范围内运营的可靠分布式系统的方法。一个此文本的早期版本在2007年12月发布在AllThingsDistributedWeblog上,在读者的帮助下有了很大的改进。

Historical Perspective

在一个理想的世界中,只有一个一致性模型:当更新时,所有观察者都会看到更新。第一次浮出水面难以实现的是70年代后期的数据库系统。本主题上最好的“时期”是“有关分布式数据库的注意事项”Bruce Lindsay等人5.它为数据库复制奠定了基本原则,并讨论了处理达到一致性的许多技术。许多这些技术都尝试实现分布透明度 - 也就是说,对系统的用户看起来只有一个系统而不是许多协作系统。在此期间,许多系统采用了更好的方法,使得完整的系统更好地消除这种透明度。2

在90年代中期,随着较大的互联网系统的兴起,已重新审视这些实践。当时,人们开始考虑的想法,即可用性可能是这些系统最重要的财产,但他们正在努力与其交易的东西挣扎。埃里克酿酒者,加州大学,伯克利大学和当时的Inktomi的系统教授将不同的折衷所带来了不同的权衡keynote address to the PODC(分布式计算原则)2000年会议。1他介绍了CAP定理,这些定理在任何给出的时间都可以实现三个共享数据系统 - 数据一致性,系统可用性和对网络分区的公差的定理。可以在2002纸上找到更正式的确认Seth Gilbert和Nancy Lynch4.

不容忍网络分区的系统可以实现数据一致性和可用性,并且通常通过使用事务协议来实现。要使这项工作,客户端和存储系统必须是相同环境的一部分;在某些方案下,它们在整个方面失败,因此,客户无法观察分区。重要观察是,在更大的分布式级系统中,网络分区是给定的;因此,不能同时实现一致性和可用性。这意味着有两种选择可以下降:放松的一致性将允许系统在分区条件下保持高度可用,而制定一致性是指在某些条件下,系统将无法使用。

这两个选项都要求客户端开发人员了解系统提供的内容。必威体育精装版app官网如果系统强调一致性,开发人员必须处理系统可能无法使用的事实,例如写入。必威体育精装版app官网如果由于系统不可用,则此写入失败,则开发人员将必须处理与要写入的数据处理的操作。必威体育精装版app官网如果系统强调可用性,它可能总是接受写入,但在某些情况下,读取不会反映最近完成的写入结果。然后,开必威体育精装版app官网发人员必须决定客户端是否需要一直访问绝对最新更新。有一系列应用可以处理略微陈旧的数据,并且在此模型下供应良好。

原则上定义的交易系统的一致性属性属性(原子学,一致性,隔离,耐用性)是一种不同的一致性保证。在酸中,一致性涉及保证,当事务完成时,数据库处于一致状态;例如,在将资金从一个帐户转移到另一个帐户中,两个帐户中持有的总金额不应改变。在基于酸的系统中,这种一致性往往是开发人员写作交易的责任,但可以由数据库管理完整性约束辅助。必威体育精装版app官网

一致性 - 客户端和服务器

有两种方式看一致。一个来自开发人员/客户的角度来看必威体育精装版app官网:他们如何观察数据更新。第二种方式来自服务器端:如何通过系统流动的更新以及系统可以对更新提供什么。

客户端一致性

客户端有以下组件:

  • 存储系统。目前,我们将把它视为一个黑匣子,但是一个人应该假设它在封面下它是大规模和高度分布的东西,并且它是为了保证耐用性和可用性。
  • 过程A.这是一个向存储系统写入数据和从存储系统读取数据的过程。
  • 过程B和C.这两个进程独立于进程A,并对存储系统进行写入和读取。这些进程究竟是同一进程中的进程还是线程并不重要;重要的是它们是独立的,需要通过通信来共享信息。
    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. In the following examples illustrating the different types of consistency, process A has made an update to a data object:
  • 强的一致性。更新完成后,任何后续访问(按A,B或C)将返回更新值。
  • 弱一致性。系统不保证后续访问将返回更新值。在返回该值之前需要满足许多条件。更新和当保证任何观察者始终看到更新值的时刻之间的时期被称为不一致的窗口
  • 最终一致性。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. The most popular system that implements eventual consistency is DNS (Domain Name System). Updates to a name are distributed according to a configured pattern and in combination with time-controlled caches; eventually, all clients will see the update.

最终一致性模型有许多重要的变化需要考虑:

  • 因果关系。如果进程A已传递到处理B已更新数据项,则由进程B的后续访问将返回更新值,并保证写入以取代较早的写入。过程C与处理A没有因果关系的访问受到正常的最终一致性规则的影响。
  • 阅读你的文章。这是一个重要的模型,进程a,在更新数据项之后,始终访问更新的值,并且永远不会看到较旧的值。这是因果一致性模型的特殊情况。
  • 会话一致性。这是上一个模型的实用版本,其中一个进程在会话的上下文中访问存储系统。只要会话存在,系统就会保证读写的一致性。如果会话因某些故障方案而终止,则需要创建一个新的会话,并且保证不会重叠会话。
  • 单调的读一致性。If a process has seen a particular value for the object, any subsequent accesses will never return any previous values.
  • 单调一致性。在这种情况下,系统保证通过同一进程序列化写操作。不保证这种一致性的系统是出了名的难以编程。

可以组合许多这些属性。例如,可以获得单调读取与会话级一致性相结合。从实际的角度来看,这两个属性(单调读取和读写的写入)在最终的一致性系统中是最理想的,但并非总是需要。这两个属性使开发人员更简单地构建应用程序,同时允许存储系统放宽一致性并提供高可用性必威体育精装版app官网。

您可以从这些变体中看到,可能是相当多的不同场景。它取决于人们是否可以处理后果的特定应用程序。

Eventual consistency is not some esoteric property of extreme distributed systems. Many modern RDBMSs (relational database management systems) that provide primary-backup reliability implement their replication techniques in both synchronous and asynchronous modes. In synchronous mode the replica update is part of the transaction. In asynchronous mode the updates arrive at the backup in a delayed manner, often through log shipping. In the latter mode if the primary fails before the logs are shipped, reading from the promoted backup will produce old, inconsistent values. Also to support better scalable read performance, RDBMSs have started to provide the ability to read from the backup, which is a classical case of providing eventual consistency guarantees in which the inconsistency windows depend on the periodicity of the log shipping.

服务器端一致性

在服务器端,我们需要更深入地了解更新是如何流经系统的,以了解是什么驱动了使用系统的开发人员可以体验的不同模式。在开始之前,让我们先确定一些定义:必威体育精装版app官网

n =存储数据副本的节点数

W =在更新完成之前,需要确认收到更新的副本数量

R=通过读取操作访问数据对象时接触的副本数

如果w + r> n,则写组和读取集总是重叠,一个可以保证强的一致性。在主要备份RDBMS方案中,实现同步复制,n = 2,w = 2,r = 1。无论客户端读取的副本,它都会始终获得一致的答案。在具有备份的异步复制中,启用备份,n = 2,w = 1,r = 1。在这种情况下,R + W = n,不能保证一致性。

这些配置的问题是基本仲裁协议,即当系统由于故障而无法写入W节点时,写操作必须失败,标记系统的不可用。使用n = 3和w = 3且只有两个可用节点,系统将必须失败写入。

在需要提供高性能和高可用性的分布式存储系统中,副本的数量通常多于两个。只关注容错的系统通常使用N=3(W=2和R=2配置)。需要提供非常高的读取负载的系统通常会复制超出容错要求的数据;N可以是数十个甚至数百个节点,R配置为1,这样一次读取就会返回一个结果。与一致性相关的系统被设置为W=N进行更新,这可能会降低写入成功的概率。对于这些关注容错但不关注一致性的系统,一种常见的配置是以W=1运行,以获得最小的更新持久性,然后依赖一种延迟(流行)技术来更新其他副本。

如何配置n,w和r取决于常见的情况是什么以及需要优化哪条性能路径。在r = 1和n = w中,我们优化读取案例,并且在w = 1和r = n中,我们优化了非常快速的写入。当然,在后一种情况下,在发生故障时不能保证耐用性,如果W <(n + 1)/ 2,当写集不重叠时,有可能冲突的写入。

出现弱/最终一致性当W + R < = N,我aning that there is a possibility that the read and write set will not overlap. If this is a deliberate configuration and not based on a failure case, then it hardly makes sense to set R to anything but 1. This happens in two very common cases: the first is the massive replication for read scaling mentioned earlier; the second is where data access is more complicated. In a simple key-value model it is easy to compare versions to determine the latest value written to the system, but in systems that return sets of objects it is more difficult to determine what the correct latest set should be. In most of these systems where the write set is smaller than the replica set, a mechanism is in place that applies the updates in a lazy manner to the remaining nodes in the replica's set. The period until all replicas have been updated is the inconsistency window discussed before. If W+R <= N, then the system is vulnerable to reading from nodes that have not yet received the updates.

无论是否读写,会话和单调一致性都可以实现vi​​ply,一般都在客户端对执行分布式协议的服务器的“粘性”。如果每次都是同一个服务器,那么保证读写和单调读取相对容易。这使得管理负载均衡和容错略难稍厚,但这是一个简单的解决方案。使用粘性的会话使得这一显式并提供了客户可以推理的曝光率。

有时客户端实现读写和单调读取。通过编写版本添加版本,客户端将丢弃读取值,版本是在上一期版本之前的版本。

当系统中的某些节点无法到达其他节点时,会发生分区,但两组都可以通过客户端组访问。如果使用经典的多数仲裁方法,那么具有副本集的W节点的分区可以继续更新,而其他分区变得不可用。读取集是相同的。鉴于这两个设置重叠,根据定义,少数集合变得不可用。分区不会经常发生,但它们确实发生在数据中心之间,以及在数据中心之间。

在某些应用程序中,任何分区都不可接受的不可用,重要的是,可以达到该分区的客户端取得进展。在这种情况下,双方都分配了一组新的存储节点以接收数据,并且在分区治愈时执行合并操作。例如,在Amazon中,购物车使用这种写入系统;在分区的情况下,即使原始购物车在其他分区上生活也可以继续将物品放在购物车中。推车应用程序协助存储系统一旦分区愈合,就可以将推车合并。

亚马逊发电机

在显式控制应用程序架构下带来所有这些属性的系统亚马逊发电机,这是一个密钥值存储系统,内部用于构成亚马逊电子商务平台的许多服务以及亚马逊的Web服务。Dynamo的设计目标之一是允许创建Dynamo存储系统实例的应用程序服务所有者在一致性、持久性、可用性和性能之间进行权衡,而Dynamo存储系统通常跨越多个数据中心。3.

摘要

大规模可靠的分布式系统中的数据不一致是有两个原因的:在高度并发条件下提高读写性能;和处理分区案例,其中多数模型将呈现部分系统的不可用,即使节点已启动并运行。

Whether or not inconsistencies are acceptable depends on the client application. In all cases the developer needs to be aware that consistency guarantees are provided by the storage systems and need to be taken into account when developing applications. There are a number of practical improvements to the eventual consistency model, such as session-level consistency and monotonic reads, which provide better tools for the developer. Many times the application is capable of handling the eventual consistency guarantees of the storage system without any problem. A specific popular case is a Web site in which we can have the notion of user-perceived consistency. In this scenario the inconsistency window needs to be smaller than the time expected for the customer to return for the next page load. This allows for updates to propagate through the system before the next read is expected.

本文的目标是提高对全球规模需要运营的工程系统复杂性的认识,并且需要仔细调整,以确保他们可以提供其应用所需的耐用性,可用性和性能。系统设计者的一个工具是一致性窗口的长度,在此期间,系统的客户端可能暴露于大规模系统工程的现实。

工具书类
  1. Brewer,E. A. 2000。致强大的分布式系统(摘要)。在第19届年度ACM研讨会关于分布式计算原则的诉讼程序(7月16日至19日,波特兰,俄勒冈州):7
  2. 与布鲁斯林氏戏的谈话。2004. ACM队列2(8):22-33。
  3. DeCandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A., Sivasubramanian, S., Vosshall, P., Vogels, W. 2007.发电机:亚马逊的高度可用的钥匙店。在21st ACM的诉讼程序中操作系统原则研讨会(史蒂文森,华盛顿,10月)。
  4. 吉尔伯特,S.,Lynch,N. 2002。Brewer的猜想和一致,可用,容忍的Web服务的可行性。ACM SIGACT新闻33(2)。
  5. Lindsay,B. G.,Selinger,P. G.,等人。1980年。关于分布式数据库的说明。在分布式数据库,第一版。W. Drawaffan和F. Poole,247-284。剑桥:剑桥大学出版社。还可以作为IBM研究报告RJ2517,加利福尼亚州圣何塞(1979年7月)。

评论