论文地址: Aguilera&Terry一致性的多面性,《数据工程公报》IEEETC,2016年

    更新:Mark Vukolic发表了一篇评论,向我介绍了他去年与Paolo Viotti一起发布的一篇ACM调查报告,该报告研究了分布式非事务性存储系统的50种不同的一致性模型,并将它们放入一个全面的框架中。对于那些对这个主题感兴趣的人来说,这是另一个很好的资源——请查看A:7页的图1!

    本周,我们将继续从Murat Demirbas的分布式系统研讨会阅读列表中找出上午的论文空白…

    如果你很难记住所有不同的一致性模型和它们的细微差别,那么你并不孤单!混合使用一些隔离级别,以及数据库系统和分布式系统社区之间的术语差异,这肯定会造成混淆。我相信很多人已经到了在头脑中精心建造城堡的地步,绘制出异常图,在一切似乎都吻合的时候有了清晰的瞬间……然后两周后,细节又变得模糊(在这个空间里,细节真的很重要)。你需要好的笔记回去!

    以下是我们在早报前几期中看到的一些帮助我的资源:

    (我们甚至不要开始达成共识!)

    我还写了一篇关于实践中一致性状态的简短的立场声明,作为我2015年“逃离火海”迷你系列的第一部分(另见第2部分和第3部分)。对于一致性模型,我最喜欢的一种思考方式是从“什么会出错”的角度出发?(即可能发生的异常情况)。

    在《一致性的许多方面》一书中,阿奎莱拉和特里分享了他们以各种形式思考一致性的模型,并提供了一个很好的领土地图。为了获得额外的好处,他们还尝试在分布式系统和数据库系统以及计算机体系结构中解析术语。(“我们发现在这些学科中一致性的使用有很大的不同”)。
    在共享和复制数据的计算机系统中,一致性是一个重要的考虑因素……数据共享和复制提出了一个基本问题:如果一个客户端同时或在短时间内修改某些数据项,而另一个客户端可能在不同的副本上读取或修改相同的项,会发生什么情况?
    阿奎莱拉和特里带来的新视角是从两种不同的一致性角度来看待这个问题:状态一致性和作业一致性。状态一致性是最容易理解的——它只是一组属性(或不变量),我们希望在系统的(可能是分布式的)状态中保持这些属性。我们说当所有这些属性都成立时,系统是一致的。(另一种说法是,状态一致性约束系统可以处于的状态集)。
    作业一致性是一组属性,我们希望为客户端作业的结果保留这些属性,包括对作业序列的约束。我在读这篇论文的早期就有一个问题,那就是为什么状态一致性不包含作业一致性,也就是说,状态不决定作业的结果。澄清见第3.3节:

    作业一致性是一个端到端的属性,因为它处理客户机可以直接观察到的结果。这与状态一致性相反,状态一致性处理客户端通过执行作业间接观察到的系统状态。换句话说,作业一致性比状态一致性处于更高的抽象级别。因此,系统可能存在严重的状态不一致,但要在外部隐藏这些不一致,以提供一种强形式的作业一致性。

    对我来说,aha时刻是三个复制服务器的一个例子,其中写入到任何大多数(两个)服务器。现在,三个副本的状态是不一致的(直到第三个副本赶上),但是读取作业仍然可以通过从任意两个副本读取来返回强一致的结果,如果值不一致,则接受具有更高时钟值的副本。

    让我们看看这三个规程如何在状态与作业模型的上下文中解释一致性。你可以自己判断这是否有助于澄清事情!

    在分布式系统中,一致性指的是状态一致性或作业一致性…

    相互一致性(如主备份)和最终一致性是状态一致性的形式。线性化能力和各种读写一致性模型是作业一致性的表现形式。
    在数据库系统中,一致性是指状态一致性。例如,考虑一下ACID的缩写,它描述了事务的保证。“C”代表一致性,在本例中,这意味着数据库始终处于开发人员认为有效的状态。
    越来越清楚了吗?!这是一个奇迹,任何人都可以做的头或尾这些文件在分布式内存数据存储与NVMM!;)
    在计算机体系结构中,一致性是指作业的一致性。一个类似的概念叫做一致性也是作业一致性的一种形式。一致性和连贯性有微妙的区别。一致性涉及整个内存系统;它约束所有内存位置的读写行为(称为加载和存储);例如顺序一致性属性。一致性涉及到缓存子系统;它可以看作是负责给定内存位置的各种缓存作业的一致性。

    状态一致性的几个例子

    • 数据库系统中的唯一性和引用完整性约束
    • 相互一致性—当没有未完成的更新时,副本具有相同状态的概念
    • 最终一致性

    作业一致性的几个例子
    那么数据库系统就没有作业一致性了?哦,是的!ACID中的“A”和“I”表示原子性和隔离性,这是作业一致性的形式。
    尽管数据库系统社区将事务隔离与一致性和原子性分开,但在分布式系统社区中,事务隔离被视为一致性的一种形式,而在计算机体系结构社区中,类似于隔离的概念被称为原子性。

    • 线性化能力
    • 顺序一致性——与客户发布作业顺序相关的操作的总顺序
    • 可串行化
    • 强会话可序列化性—它尊重会话中事务的顺序
    • 遵守事务实时排序的顺序保持或严格可串行化
    • 读你自身的写入
    • 有限腐坏
    • 作业最终一致性——EC根据读取作业返回的值定义
    • 计算机体系结构中的缓存一致性