存储系统继续为现代互联网服务(如网络搜索、
分布式
尽管分布式
事实证明,选择联系哪些副本子集进行存储操作,会对分布式存储系统的行为产生深远的影响。对于强一致性,客户端可以读取和写入大多数副本。由于大多数副本存在重叠,这确保了每次读取都能“看到”最新的写入。相比之下,最终一致性系统可能会读取和写入
尽管许多应用程序受益于强一致性,
本文着眼于量化最终一致性存储系统中一致性(或缺乏一致性)的方法。这些方法对于在不同的系统配置和工作负载之间进行有意义的比较是必要的。首先,本文更精确地定义了最终一致性,并将其与其他弱一致性概念联系起来。然后,深入探讨指标,重点关注陈旧性,并调查了预测和测量陈旧性的不同技术。最后,评估了这些技术的相对优点,并确定了任何剩余的未决问题。
最终一致性可以定义为底层存储系统的属性,也可以定义为客户端应用程序观察到的行为。例如,Doug Terry 等人在 Bayou 存储系统的上下文中给出了最终一致性的以下定义:“所有副本最终都会收到所有写入(假设有足够的网络连接和合理的协调计划),并且任何两个收到相同写入集的副本都具有相同的数据库。”26 这个非正式的定义既涉及写入到副本的传播(即最终),又涉及收敛到一个
这个定义虽然简单而优雅,但并没有精确地说出客户端观察到了什么。相反,它涵盖了一系列行为,既包括强一致性的关系数据库,也包括可能无限期返回陈旧或
Werner Vogels 以具体的方式描述了客户端观察到的一致性:“存储系统保证,如果没有对对象进行新的更新,最终所有访问都将返回最后更新的值。”28 Vogels 的定义以直观的方式捕捉了副本收敛到最后更新值的过程,但仅在更新暂停而客户端读取
由于弱一致性难以推理,应用程序开发人员通常会寻求更强的属性,例如一致前缀、单调读取、“读己之写”或因果一致性。25 事实上,一些系统支持此类
最终一致性的抽象定义对并发访问以及
描述这些行为的一种新兴方法是将它们与称为线性化18的严格一致性形式联系起来。通俗地说,此属性声明存储系统的行为就好像它一次执行一个操作,按某种串行顺序,尽管实际上并行执行某些操作。稍后将解释,此串行顺序受到进一步约束,以禁止陈旧读取。因此,线性化是最终一致性系统可以据此判断的合适的黄金标准。换句话说,观察到的行为可以用偏离此标准的偏差来描述,在这种情况下,偏差可以被视为一致性违规。例如,当读取返回陈旧值时,即使系统仅承诺最终一致性,也可以将 Amazon 的 Dynamo 视为违反了线性化。
虽然线性化在集中式
• 基于版本的陈旧性通过计算对象的版本来定义年龄(例如,读取返回第 k 个最新版本)。
• 基于时间的陈旧性以
挂钟
为了理解最终一致性,我们转向宽松一致性
属性—k-原子性
考虑图 1a 中的操作跟踪,其中显示了应用于对象 X 的三个操作。首先,写入操作 W(X,1) 将 1 分配给对象 X,然后此值通过第二个写入操作 W(X,2) 更新为 2。第三个操作 R(X) 是对 X 的读取,并在两个写入操作结束后开始。在这种情况下,线性化规定 W(X,1) 应显示在 W(X,2) 之前生效,因为 W(X,1) 在 W(X,2) 开始之前结束。因此,当应用 R(X) 时,2 是 X 的最后更新值,但 R(X) 返回 1,因此跟踪不是线性化的。当操作在时间上重叠时,更复杂的情况在线性化的正式定义18中得到解决,本文对此不再赘述。
k-原子性
k-原子性
白盒
后续
在“野外”测量最终一致性与精确定义它一样困难。并发操作使得难以识别操作生效的顺序,因此难以将读取分类为陈旧或不陈旧。更糟糕的是,在发生网络分区时,即使在某个时间点之后没有对对象进行新的更新,划分两侧的客户端也可能观察到不同的最后更新值。这种异常是可能的,因为在始终可用的系统中,每个分区都将继续接受写入。
尽管存在这些挑战,但仍设计了许多技术来测量最终一致性,特别是数据陈旧性。本文着眼于两种根本不同的方法:主动测量,其中以人为方式练习存储系统,以确定从新值写入存储系统到客户端可见该值的时间滞后;以及被动分析,其中记录任意工作负载的操作跟踪,并进行数学分析以获得陈旧性测量值。
主动测量
值—或
在技术层面上,主动测量的主要挑战是确定在不同客户端
YCSB++(Yahoo!
主动测量可用于发现最终一致性系统中更新传播时间的范围。例如,在涉及 Amazon 的 SimpleDB4 的实验中,Wada 等人报告称,超过 90% 的运行中收敛发生在最多一秒内,但在少数(不到 1%)情况下花费了超过四秒。另一方面,主动测量并未表明真实工作负载中读取返回陈旧值的比例,因为此数量取决于数据对象的访问方式。例如,陈旧读取的比例预计会随着应用于给定对象的操作速率而变化—当操作不频繁应用且它们之间的间隔超过收敛时间时,接近于零;当读取更紧密地跟随写入时,则更大。主动测量不会区分这两种情况,因为它基于旨在测量收敛时间的受控工作负载。
在前面关于宽松一致性属性的部分中,讨论重点关注以精确和有意义的方式定义陈旧性的方法,并提供了如何从这些定义中导出一致性指标的提示。它从
被动分析中最直接的技术挑战是跟踪的收集,该跟踪记录每个操作的类型、开始和结束时间,以及其参数和响应(例如,读取对象 X,在时间 t1 开始并在 t2 结束,返回值为 5)。此跟踪可以在客户端获得,如图 2 所示。
由于跟踪是通过合并来自多个客户端或存储节点在有限时间段内的数据而获得的,因此它容易出现两种类型的异常:悬空读取,它返回缺少相应写入的值(即,分配读取返回值的写入);以及反向操作,其中读取在跟踪中出现在其相应的写入之前。如果这些异常发生,则必须删除它们;否则,
悬空读取指示缺少信息,例如,当跟踪中对对象的第一次访问是读取,而相应的写入发生在跟踪开始之前。在这种情况下,悬空读取很容易识别,可以从跟踪中删除,而不会产生不良影响。反向操作同样容易检测,但更难补救。原子钟和 GPS10 等时钟同步技术可以完全消除反向操作。即使普通的 NTP(网络时间协议),如果时钟同步足够紧密,也足够了。或者,也可以直接从反向操作估计时钟偏差,并相应地调整跟踪。
给定一个没有悬空读取和反向操作的跟踪,下一个挑战是计算陈旧性指标。高效的算法在此上下文中至关重要,因为跟踪可能非常长,这意味着所需的空间和计算量都很高。事实上,Gibbons 和 Korach 表明,测试跟踪是否是线性化的,是难以处理的。13 测试跟踪是否是
幸运的是,当给定对象上的每个写入都分配一个唯一值时,难处理性结果就会中断。这种情况很容易强制执行(例如,通过在每个写入的值中嵌入唯一令牌,例如节点 ID 和时间戳),这为在实践中从跟踪中计算陈旧性指标打开了大门。对于
一般来说,被动分析不限于陈旧性指标,如循环分析5,30技术所示,该技术通过分析表示执行跟踪的冲突图来检测线性化违规。此类图中不存在循环表明跟踪是线性化的,因此此类循环的数量和长度可以定义为不一致性的指标。5,30 这些指标与陈旧性的关系尚不清楚。
预测、主动测量和被动分析都是研究最终一致性的有用方法。尽管每种方法都有其特定的优点和缺点,但很难直接比较它们,因为它们满足不同的目标。被动分析是
本文讨论的技术在最终一致性的概念模型方面也有所不同。主动测量和 PBS 基于简化模型,类似于 Vogels 的定义28,其中写入发生在读取之前。相比之下,被动分析考虑通用模型,其中写入可能在时间上与读取和其他写入重叠。正如 Golab 等人在另一篇文章中解释的那样,16 当客户端遵循“R + W > N”规则28时,存储系统在这两个模型中的行为可能不同,这确保了读取和写入操作访问副本的重叠子集。长期以来,后一个条件一直被认为是“强一致性”6,28的充分条件,事实上,它在简化模型中保证了线性化,但在通用模型中允许线性化违规。
尽管分析操作的详细跟踪成本有些高昂,但被动分析在理解最终一致性方面起着重要作用。虽然对一致性的任何视角最终都会受到存储系统中副本数据状态的影响,这可以被认为是“真实情况”,但被动分析与客户端应用程序观察到的实际一致性最密切相关。具体而言,它仅在
对于现代在线服务提供商而言,延迟的少量减少已知会对用户体验以及随之而来的收入产生可衡量的影响。17 随着弱一致性作为降低延迟的手段继续受到欢迎,清晰地推理这一点的能力
Terry 等人描述了一个系统,该系统允许客户端应用程序选择不同等级的弱一致性,例如“最多
虽然对最终一致性的理解预计会随着涉及测量的更多实证研究而提高,但基本的技术问题仍然有待解决。特别是,一致性验证问题仍然是一个开放且重要的挑战。存储系统设计人员需要验证技术来测试他们的实现是否正确地履行了
与验证算法相关的未决问题之一是确定决定
最终一致性越来越被视为可以在各个维度上量化的行为谱,而不是存储系统要么满足要么不满足的二元属性。表征和验证这些行为的进步将使服务提供商能够提供日益丰富的差异化性能服务级别,最终改善最终用户的体验。
我们感谢 Jay J. Wylie、Indranil Gupta 和 Doug Terry 的有益反馈。
1. Abadi, D. 2012. 现代分布式数据库系统设计中的一致性权衡:CAP 只是故事的一部分。IEEE Computer 45(2)
2. Aiyer, A., Alvisi, L., Bazzi, R. A. 2005. 关于
3. Amazon Web Services. DynamoDB;http://aws.amazon.com/dynamodb/。
4. Amazon Web Services. SimpleDB;http://aws.amazon.com/simpledb/。
5. Anderson, E., Li, X., Shah, M. A., Tucek, J., Wylie, J. J. 2010. 您的键值存储实际上提供什么一致性?在第 6 届 Usenix 系统可靠性热点主题研讨会论文集中。
6. Bailis, P., Venkataraman, S., Franklin, M. J., Hellerstein, J. M., Stoica, I. 2012. 实用部分仲裁的概率有界陈旧性。在VLDB(超大型数据库)捐赠基金会论文集 5(8)中
7. Bermbach, D., Zhao, L., Sakr, S. 2013. 面向
8. Bermbach, D., Tai, S. 2011. 最终一致性:最终是多久?Amazon S3 一致性行为的评估。在第 6 届面向服务计算中间件研讨会论文集中。
9. Brewer, E. A. 2000. 迈向健壮的分布式系统 (特邀报告)。在第19届 会议论文集
10. Corbett, J. C. 等. 2012. Spanner:Google 的全球分布式数据库。在第10届 Usenix 操作系统设计与实现会议论文集
11. Davidson, A., Rubinstein, A., Todi, A., Bailis, P., Venkataraman, S. 2012. 实际环境中的自适应混合仲裁;
12. Decandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A., Sivasubramanian, S., Vosshall, P., Vogels, W. 2007. Dynamo:Amazon 的高可用性
13. Gibbons, P. B., Korach, E. 1997. 测试共享内存。SIAM(工业与应用数学学会)计算杂志 26(4)
14. Golab, W., Hurwitz, J., Li, X. 2013. 关于
15. Golab, W., Li, X., Shah, M. A. 2011. 分析一致性属性以获得乐趣和收益。在第30届 年度
16. Golab, W., Rahman, M. R., AuYoung, A., Keeton, K., Gupta, I. 2013。
17. Hamilton, J. 2009. 延迟的成本; http://perspectives.mvdirona.com/2009/10/31/TheCostOfLatency.aspx。
18. Herlihy, M., Wing, J. M. 1990. 线性化:并发对象的正确性条件。 编程语言和系统事务 (TOPLAS) 12(3)
19. Hunt, P., Konar, M., Junqueira, F. P., Reed, B. 2010. ZooKeeper
20. Lakshman, A., Malik, P. 2010. Cassandra:一种去中心化的结构化存储系统。 SIGOPS 操作系统评论 44(2)
21. Lamport, L. 1986. 关于进程间通信。第一部分:基本形式主义;第二部分:算法。分布式计算 1(2)
22. Lloyd, W., Freedman, M. J., Kaminsky, M., Andersen, D. G. 2011. 不要满足于最终一致性:可扩展的因果一致性,用于
23. Patil, S., Polte, M., Ren, K., Tantisiriroj, W., Xiao, L., López, J., Gibson, G., Fuchs, A., Rinaldi, B. 2011. YCSB++:可扩展表存储中高级功能的基准测试和性能调试。在第2届 云计算研讨会论文集
24. Rahman, M. R., Golab, W., AuYoung, A., Keeton, K., Wylie, J. J. 2012. 迈向一致性基准测试的原则性框架。在第8届 Usenix 系统可靠性热点问题研讨会论文集。
25. Terry, D. 2013. 通过棒球解释复制数据一致性。 通讯。
26. Terry, D. B., Petersen, K., Spreitzer, M. J., Theimer, M. M. 1998. 以下情况的案例
27. Terry, D. B., Prabhakaran, V., Kotla, R., Balakrishnan, M., Aguilera, M. K.,
28. Vogels, W. 2008. 最终一致性; https://queue.org.cn/detail.cfm?id=1466448。 队列 6(6)
29. Wada, H., Fekete, A., Zhao, L., Lee, K., Liu, A. 2011. 商业云存储中的数据一致性属性和权衡:消费者的视角。在第5届创新数据系统研究双年会议论文集
30. Zellag, K., Kemme, B. 2012. 您的云应用程序有多一致?在第3届 云计算研讨会论文集。
Wojciech Golab 是滑铁卢大学电气与计算机工程系的助理教授。他目前的研究重点是分布式计算中的算法问题,应用于存储、事务处理和
Muntasir Raihan Rahman 是伊利诺伊大学香槟分校分布式协议研究组的计算机科学博士生。
Alvin Auyoung 是
Kimberly Keeton 是
Xiaozhou (Steve) Li 是 Google 的一名软件工程师。过去,他曾在
喜欢还是讨厌?请告诉我们 [email protected]
© 2014
最初发表于 Queue vol. 12, no. 1—
在 数字图书馆 中评论这篇文章
Qian Li, Peter Kraft - 事务和无服务器是天作之合
数据库支持的应用程序是无服务器计算令人兴奋的新领域。通过紧密集成应用程序执行和数据管理,事务性无服务器平台能够实现许多在现有无服务器平台或基于服务器的部署中不可能实现的新功能。
Pat Helland - 任何其他名称的身份
新兴的系统和协议既收紧又放松了我们对身份的概念,这很好!它们使完成工作变得更容易。REST、IoT、大数据和机器学习都围绕着故意保持灵活且有时模棱两可的身份概念。身份的概念是我们分布式系统的基本机制的基础,包括可互换性、幂等性和不变性。
Raymond Blum, Betsy Beyer - 实现数字永久性
当今的信息时代正在为世界所依赖的数据创造新的用途和新的管理方式。世界正在从熟悉的物理人工制品转向更接近其本质信息的新的表示方式。我们需要流程来确保知识的完整性和可访问性,以保证历史将被了解和真实。
Graham Cormode - 数据草图
您是否曾感到被无休止的信息流淹没?似乎源源不断的新电子邮件和短信需要持续关注,还有电话要接听、文章要阅读、门要敲。将这些碎片拼凑在一起以跟踪重要内容可能是一个真正的挑战。为了应对这一挑战,流数据处理模型越来越受欢迎。其目的不再是捕获、存储和索引每一分钟的事件,而是快速处理每个观察结果,以便创建当前状态的摘要。