acm-header
登录

ACM通信

实践

最终一致


最终,插图

信贷:Marek Uliasz

回到顶部

近年来,人们对最终的一致性充满了期待。6见鬼,我对此非常兴奋!最终一致性是一些数据的一个方面,它表示在对该项目的工作稳定下来之前,其基本值是未知的。事实证明,在许多情况下,有一些数据项的工作从未得到解决。除了最终一致之外,许多数据项最终也保持一致!

当某物的值在多个地方被复制时,就会发生最终的一致性,并且存在一个用于这些副本收敛的协议。对一个或多个副本的更改可以独立完成,并且它们将传播和收敛。

最终一致性:

当我们都知道同样的东西,我们就会得到同样的结果。

在本文中,我不想讨论如何实现最终的一致性,而是更多地讨论它在使用时的样子。许多有趣的论文都是关于最终一致性的。我最喜欢的一本是彼得·贝利斯和阿里·高德西写的《今天最终的一致性:限制、扩展和超越》。1

如前所述,最终一致性通常用于描述在解耦系统上复制的数据项的行为。当分别对断开连接的副本进行更新时,它们在重新连接并共享状态时的行为如何?

然而,最终的一致性通常指单个复制对象的行为。它通常不涉及事务以及它们最终一致的对象的含义。

回到顶部

数据在卑鄙、残酷的世界中漂浮

关系数据库中的数据与保存在关系数据库之外的数据的行为不同。当非关系数据解锁时,它将被捕获为消息、文件、键值或分组为一个块的其他内容。这些块(或对象、值或实体)具有标识和版本。2

当一个对象有多个副本时,每个都有相同的身份,以某种方式凝聚成一个共同的价值即使不同的副本是独立更新的。这本质上意味着对象的版本不是线性分配的。讨论更改的严格顺序不再有意义。您必须准备好以一种方式捕获对象的版本,这种方式表示独立的更改集合在一起。矢量时钟是一种很好的版本控制机制。

认识到整个最终一致性讨论必须在包含对象、标识和版本的世界中工作是很重要的。这并不是一个经典的数据库。

回到顶部

等待……交易意味着什么?

“最后的作者获胜”是最终一致性的一种形式。考虑这样一个系统,它在更新副本时从本地系统捕获挂钟时间。当每个人都听到了所有的更新时,用最新的挂钟时间写的那份被保存在各处。这对于事务性更新是一个挑战。有时,事务中的更改具有最新的时间并被保留。有时,事务性更改会被稍后的更新所消除。这使得原子性成为一个挑战。

变更也可以被捕获为交换操作。5这在银行业务中是很明显的,当你的账户申请借方或贷方,这些操作可以重新排序或兑换。

当你和你的配偶同时在你的联名支票账户上开支票时,希望他们都能兑现。只要银行里有足够的钱,谁的支票先兑现并不重要。交易可以通过向另一个账户开出的支票将钱存入另一个账户。支票通常会结清,进行有效的交易。有时,空头支票会形成另一笔交易,以补偿空头支票的第一次交易。

在处理所有这些问题时,你所能期望的最好结果就是概率上的成功和最终的补偿。3.虽然我们在银行业努力实现完美的交易工作,但我们最终会在事情出错时得到补偿。与人类努力的其他领域不同,在大多数情况下,我们可以弥补财务上的错误。

回到顶部

最终是什么时候?是现在吗?

拥有复制品的一个问题是,你真的永远不知道你的邪恶双胞胎中的一个什么时候会突然出现。有时,算法会将副本编码为不受欢迎的人在一段时间后。有时候,你忽视了这一点,僵尸副本会在最意想不到的时候出现。

我妻子和我有一个支票账户,它常年处于借方和贷方的状态。当我们都使用它的时候,没有人真正知道有多少钱在飞来飞去。

我们的个人支票账户是最终一致。

唯一的办法就是停止使用这个账户一段时间。

还有一个烦人的问题,就是支票开给的人没有在合理的时间内存入。也许是放在钱包里,一年后才存入银行。如果支票好几个月都没有存入,你是给它下一个停止命令,还是只是等待并假设它没有到达?你支票账户的余额是恼人的最终!

回到顶部

将不确定性纳入“我们目前所知道的”

我们的银行每月寄给我们对账单。它们代表截止日期前在我们的账户上通过一个高度一致的位置结算的借方和贷方。这个高度一致的位置就是银行的中央计算机系统。在每月截止日期前到达票据交换所的借方和贷方被收集到帐户的对账单中。

上市公司的季度报告采用了类似但不同的方法。在季度最后一天的午夜,新业务和新支出开始分配到下一个季度。公司开始收集和整理已经结束的季度的所有收入和支出。然后,所有的支出和收入记录都被整理成一个大的组合,形成一份公开的季度损益报告。这通常发生在季度结束后的40天左右。

然而,季度内的一些交易可能不会及时发送给会计师。其中一个因素可能是软件工程师的雇佣,他们在按时提交费用报告方面是出了名的糟糕。因此,该季度公布的结果大致正确,但并不完美。

在季度报告发布后,更正信息会慢慢传到会计师那里。他们将把这些数据归类为次要数据,并对上一季度的数据进行轻微修正,或者发布一份重述。对于一家上市公司来说,重述与公布的报告有明显差异是令人尴尬的,很少发生这种情况。轻微的修正是常见的。

你不可能真正知道发生了什么事,除非你听到了一切。

等待的时间越长,你听到的越多,你的观点就越准确。最终,你放弃等待新的信息,并宣布你对几个月前发生的事情的看法足够准确。

在银行账户结单中,确定性的定义在月末时由银行的中央计算机系统提供。不确定性从银行的角度来看就被消除了。在企业季度报告中,不确定性的衡量标准是,有多少企业的根本真相被反馈给了会计师。季度报告不是决定性的,只是通常非常接近。

回到顶部

信任、超时和升级

跨越信任边界的工作总是最终的。因为您可能不信任另一个实体,所以您不会执行分布式两阶段提交4锁定你的数据库,等待其他公司。相反,您有一个使用部分信任来完成合作业务的工作流。在整个过程中,有很长一段时间,你只能等啊等……还有更多的一致最终的例子。

这种不确定性的最终性质贯穿工作流的各个步骤。你同意从你的库存中保留200件物品,在收到你的买家的定金后。如果您没有收到任何回复来完成widget的购买,那么您就陷入了困境。虽然你的失望在一定程度上被你的存款冲淡了,但这并不足以支付这些小工具。该死的!你没能把它们卖给另一个客户!

跨信任边界工作,使用超时和升级的合作工作功能。如果你不提前72小时通知酒店取消预订,你将不得不支付第一晚的房费。然而,酒店很可能会被你一周预订的空房间所困。

事实上,这家酒店正在进行一场最终解决的客房销售游行。等到它知道周二会发生什么时,周三入住率的混乱将会得到解决。再次强调,支付给酒店的费用始终是最终的。

回到顶部

结论

应用程序不再是孤岛。它们不仅经常在许多基于云的计算机上分布式和复制运行,而且还在许多手持计算机上运行。这使得在一个地点或一个时间谈论一个真理变得很有挑战性。此外,大多数现代应用程序都与其他应用程序交互。这些相互作用最终会影响理解。随着时间的推移,一个共同的观点出现了,而新的互动增加了不确定性。事实上,许多商业、个人和计算“事实”都是不确定的。随着一些变化的稳定,另一些变化则从一个地方转移到另一个地方。

有那么多定期的、不定期的、未兑现的支票,我对我们个人的联名支票账户的理解有点模糊。当我试图说服自己总有一天我会理解它的时候,我已经说服了自己,那真的是最终的结果。

ACM队列的q戳相关文章
queue.acm.org

不要满足于最终的一致性
怀亚特·劳埃德等。
https://queue.acm.org/detail.cfm?id=2610533

最终一致:不是你所期待的?
Wojciech Golab等人。
https://queue.acm.org/detail.cfm?id=2582994

可伸缩的SQL
迈克尔一
https://queue.acm.org/detail.cfm?id=1971597

回到顶部

参考文献

1.Bailis, P.和Ghodsi, A.今天的最终一致性:限制、扩展和超越。acmqueue 113 (2013);https://queue.acm.org/detail.cfm7id=2462076

2.Helland, p,外部数据和内部数据的对比。在创新数据库研究会议论文集, 2005年。

3.赫兰,P.和坎贝尔,D.流沙上的建筑。在创新数据库研究会议论文集, 2009年。

4.分布式事务的过程树模型的高效提交协议。ACM SIGOPS操作系统回顾2 (1985), 4052;https://dl.acm.org/citation.cfm?id=850772

5.Shapiro, M., Preguiça, N., Baquero, C.和Zawirski, M.无冲突复制数据类型。在十三届会议的议事录th稳定问题国际会议,分布式系统的安全性和安全性,2011,Springer-Verlag,柏林,386400。

6.Vogels, w,最终一致。Commun。ACM 521(2009年1月),4044;https://dl.acm.org/citation.cfm?id=1435432

回到顶部

作者

帕特Helland自1978年以来一直在实现事务系统、数据库、应用程序平台、分布式系统、容错系统和消息传递系统。他目前在Salesforce工作。


版权归所有者/作者所有。授权ACM出版权利。
请求发布的权限permissions@acm.org

数字图书馆是由计算机协会出版的。版权所有©2018 ACM, Inc.


没有发现记录

Baidu
map