论文地址:高可用事务:优点和局限性

    这是Boom项目的一部分

    尽管CAP定理的范围很窄,但它在为ACID数据库属性提供高可用性的能力方面常常被误解为一个广泛的结果;这种误解导致了副本一致性、事务隔离和高可用性方面的大量混淆。
    简言之,what Bailis等人。这表明,您不需要为了获得高可用性而从根本上改变应用程序设计。事实上,如果您使用的是具有默认隔离级别(readcommitted)的Oracle 11g或Postgres,那么在高可用性系统中,您可以继续享受完全相同的隔离级别。限制它们的是上一代系统的实现选择。
    虽然弱隔离级别不能为通用事务提供可序列化性,但它们显然足够强,可以为许多应用程序程序员提供可接受的行为,并且比当前高可用系统提供的语义强得多。
    本文中使用的高可用性定义是:“保证在每个非故障服务器之间存在任意网络分区的情况下,它们都能做出响应”。这一点很重要——如果你可以访问任何服务器,你应该能够得到答案。
    尽管许多高可用事务(HAT)语义的实现不是高可用的,但这是实现的工件,而不是语义的固有属性。

    HAT实现可以提供与传统RDBMS默认设置相同的保证,但是在当前的基础架构上,它支持横向扩展,延迟降低了1-3个数量级!
    对基本HA定义的进一步完善是“粘性可用性”的概念(或者类似性,正如我们在CICS和该代的其他系统中所调用的那样)。粘性意味着客户端返回到同一个服务器,以便它始终可以读取其写的内容。(实现这一点的一种方法是通过客户端缓存充当“服务器”本身)。注意这里通过分区引入的微妙之处:
    在部分复制的系统中,如果服务器是数据项集子集的副本,则客户端必须使用数据库的单个逻辑副本(可能由多个物理服务器组成)保持粘性。
    在对隔离模型进行了非常可读的讨论之后,我们得到了以下总结:
    高可用性可实现:

    • 读未提交;读已提交;单调原子视图;项剪切隔离;谓词剪切隔离;写跟随读;单调读;单调写
    • 粘性可用性可实现:读写、因果一致性、流水线随机访问内存
    • 只有在不可用的模型中才能实现:
    • 游标稳定性;快照隔离;可重复读取;一个副本可串行化;近邻保证

    高可用性和低延迟的主要成本在于无法防止丢失的更新、WriteSkew和提供近邻界限。
    Bailis等人。接着实现了一个具有单调原子视图(MAV)隔离的概念证明HAT系统。
    HAT系统可以提供有用的语义,而无需付出很大的性能代价。特别是,我们的MAV算法可以以提高磁盘和网络利用率为代价,实现与最终一致性竞争的吞吐量。或许更重要的是,所有的HAT算法都避免了非HAT实现不可避免的高广域网延迟。
    这是一个非常重要的结果。像往常一样,理解这些细节是件好事。特别是酸里面有一个“D”(表示持久)。论文中间有一段关于耐久性的重要短文:
    如果客户机要求其事务的效果不受服务器故障的影响,则要求客户机在提交之前至少能够与F+1个非故障副本联系。这会影响可用性,根据我们采用的Gilbert和Lynch定义,在高可用性情况下,F>1容错是无法实现的。

    换句话说,在N,R,W模型(N个节点,从R读取,写入W)中,本文研究的是R=W=1的系统。例如,如果您希望避免数据丢失,即使只丢失一个节点,也不需要(同步地)保存事务的持久记录的系统。因此,您可能需要一个W>1(例如)的系统,它仍然可以提供非常好的可用性,但不是本文定义的“HA”。一路折衷…

    在结论中,Bailis等人。触及一个我深爱的话题:我们如何编程这样的系统?(与我们如何建造它们相反)。

    ……我们认为,要提高高可用系统的可编程性,还有大量工作要做。隔离和数据一致性是实现应用程序级一致性的手段,但通常不是最终用户应用程序的最终目标。我们的结果提示,实际应用需要混合使用HAT和非HAT语义(后者使用较少),但是决定使用每种语义和系统架构来实现混合方法仍然是一个悬而未决的问题。