“在分布式背景下,可以实现双一致性(事务一致性、分布式一致性),并提高分布式事务型集群的处理效率吗?” 答案是可以。 下面数据君将为大家深度揭秘这个数据库领域的核心技术——分布式事务处理技术的核心——多级一致性技术。 该技术在遵循了ACID特性的同时,使得事务处理技术符合CAP原理,并在理论层面相较“严格可串行化”技术做了扩展,进一步提出了多种强一致性的完整技术。同时该技术在工程实践层面落地了较高的性能,是同类产品Spaneer性能的4+倍,是CorchroachDB的2+倍,高并发场景下是Greenplum性能的3+倍。 这意味着,TDSQL实现了数据库领域真正高性能的强一致性工程系统,对推动分布式数据库核心技术以及产业应用有着重要意义。 一 问题的背景 科学研究,始于问题。在分布式事务处理领域,有很多重要的问题,远不止是2PC技术所能囊括的。例如,腾讯云TDSQL目前在解决的一个复杂且是一个复合的问题如下: 事务型数据库必须要解决的问题,是数据的一致性问题。该问题是事务ACID特性的C的问题,如果不满足C,会有多种数据异常,如脏读、不可重复读、幻读、读偏序、写偏序等数据异常。 而分布式系统,遵循CAP理论,其中的C,也是“一致性”,是操作之间读取数据的一致性。如果CAP的C不被满足,则会出现Steal read、Immortal write、Causal reverse等一致性异常问题(如图2所示)。 而分布式事务型数据库,则同时面临以上两类问题,如图1所示。在分布式事务型数据库中,该两类问题各自解决都有难度(例如很多数据库像Oracle都不提供可串行化不能确保数据异常不发生、NoSQL系统为了保证CAP中的A和P而丢掉了C),更不用说协同被解决了。图1 多级一致性研究背景和问题 图2 分布式系统下存在的问题 TDSQL作为一个分布式事务型数据库,就面临着如上的两个问题叠加(分布式一致性+事务一致性)这样一个复合且复杂的技术问题,其难点在于保证正确性的背景下如何做到高效率,这直接影响着分布式事务数据库的事务处理的吞吐量(Transaction throughput)。 二 学术界的研究与问题的复杂度 在学术界,前述问题的一种解决方式,被称为“严格可串行化”,该技术可以解决掉事务的一致性和CAP的一致性引发的问题。如图3所示(文献《Highly available transactions: Virtues and limitations》),其中的树根,就是事务一致性和分布式一致性的结合点,严格可串行化。而树的左子树(事务一致性)和右子树(分布式一致性),是两个独立的系统,他们之间没有关联关系。 图3 学术界对于“事务一致性和分布式一致性的结合点”的研究(1) 从图3也可以看出,左子树的事务一致性隔离级别有很多种,右子树的分布式一致性有很多种,因此,需要系统地研究各种级别的事务的一致性和分布式系统的一致性,才能更好的分析问题、解决问题(而不是只考虑树根的唯一结合点)。而如图4告知我们,分布式一致性有很多,图4总结有60种左右,这为研究该项问题,带来了复杂度。 图4 分布式一致性关系图 尽管融合分布式一致性的问题有很大的复杂度,但是这样的拦路虎是阻止不了我们对问题深入研究的热情和步伐的。TDSQL在前行探索中,如图5所示,看到了方向和曙光(红色方框处)。图5中蓝色方框,是事务中的与隔离性相关的一致性等级、和分布式一致性,在横轴的“Isolation(transactional)”列,对应的是事务的隔离级别,而他们相交处,是红色方框所框住的,却是“一片空白”。这片空白处,正是研究所未及处,也正是这片无人区,让TDSQL的研究有了空间和舞台。 图5 学术界对于“事务一致性和分布式一致性的结合点”的研究(2) 另外,业界经常提及“强一致性”,但概念混乱不清晰。文献《Consistency in Non-Transactional Distributed Storage Systems》指出如下内容,澄清了强一致性的含义: In a hybrid consistent system, strong operations are guaranteed to be seen in some sequential order by all processes (as in sequential consistency), while weak operations are designed to be fast, and they eventually become visible by all processes (much like in eventual consistency). Weak operations are only guaranteed to be ordered according to their interleaving with strong operations: if two operations belong to the same session and one of them is strong, then their relative order of invocation is respected and visible by all processes. 所以,是否被“所有进程”可见,是判断强一致性的标准,而在分布式一致性中,只有线性一致性和顺序一致性满足强一致性的含义。而结合事务一致性,需要再满足可串行化才能称为分布式事务的强一致性。 综上所述,TDSQL所研究的问题,正是ACID的C、CAP的C,以及强一致之间的内在联系,他们有两个维度的表现:一是考虑这些因素时如何保证正确性,二是在有这些因素存在影响下如何保证所实现的系统有好的性能。如果没有好的性能,提供再强的一致性也难以实用,因此强一致性背景下实现高性能成为挑战。 三 产业界的实现与存在的问题 在产业界,目前只有Google的Spanner系统,实现了“严格可串行化”,Spanner称之为“外部一致性”(《Spanner:Googles globally distributed database》)。该项技术在2012年发表,使得数据库界的研究和实践从NoSQL时代买入NewSQL时代,具有划时代的意义。其实现的技术本质,是把分布式中的线性一致性和事务一致性的可串行化相结合,从而实现了“严格可串行化”。 图6 工业界对于“事务一致性和分布式一致性的结合点”的实践 但是,Spanner的实现,存在一个问题:正确性能够保证,但性能低下(如图6所示的事务吞吐量的计算公式)。因此,该系统具有象征意义。而实践中,对于需要在金融级的事务处理场景中,其性能不符合要求。 四 腾讯云TDSQL的多级一致性技术 TDSQL深入研究了分布式一致性问题,解决了一些技术难题。例如图7,线性一致性有多个子类,那么线性一致性和事务一致性结合时,是否应该有多个级别的“严格可串行化”?再如,为什么顺序一致性可以和可串行化结合而能确保强一致性?这些问题,都需要在理论层面加以证明,然后才能迁移到工程系统中指导工程实现。 图7 线性一致性的定义 在深入研究了ACID的C和CAP的C以及强一致性之后,TDSQL团队通过一致性建模技术,从概念、模型、基于模型的操作、事务模型框架、数据结构和高效算法设计等多个角度,基于TDSQL和Greenplum实现了“多级一致性”技术(基于Greenplum目的是为了便于和业界的产品实现对比发现问题),该技术在正确性方面,给出了满足强一致性的线性可串行化、顺序可串行化级别的定义和证明等,使得前述的事务一致性方面的数据异常如写偏序、分布式一致性方面的分布式异常如Steal read等问题被消除。而在性能方面,有着优异的表现。 该技术在Google云上对比测试了Spanner的性能,对比测试了业界知名的NewSQL系统CorchroachDB、对比测试了原生的Greenplum,均获得了较好的结果,如图8所示(TDSQL的多级一致性:SER-L,线性可串行化;SER-S,顺序可串行化),从多个角度验证对比了TDSQL多级一致性的性能,在图8中给出部分实验数据。图8的实验分为4个层面进行了对比: 1.对比Spanner的性能:图8左上角的子图,同样性价比的同等资源情况下,TDSQL的多级一致性是Spanner性能的4+倍。 2.对比CorchroachDB的性能图8左下角的子图,同样硬件测试环境下,TDSQL的多级一致性是CorchroachDB性能的2+倍。 3.对比原生的Greenplum的性能:图8右子图,硬件测试环境下,TDSQL的多级一致性是原生的Greenplum性能的3+倍。 4.存在一定程度的网络延时的情况下,TDSQL多级一致性的性能表现:图8右子图,还测试在分布式环境下,当网络存在1.5ms和5ms的延时情况下,高并发场景下的TDSQL多级一致性技术,依然好于无延时情况的Greenplum的RC隔离级别的性能,这表明具有更高一致性的隔离级别可以做到更好的性能(CorchroachDB早期版本实现了快照隔离和可串行化,但在新版本中,只保留了更严格的可串行化级别,大家可想想为什么呢?)。 图8 TDSQL多级一致性技术性能验证 五 TDSQL多级一致性工作的意义 TDSQL多级一致性的研究与实践工作,有几个价值: 1.实现多种强一致性的工程系统:在目前已知的系统内,实现强一致性的只有Spanner和TDSQL;实现多种级别的强一致性系统,只有TDSQL。这对于深入实践强一致性系统,有着榜样的作用,我们可从中知道,工程实践中,该方向的理论是可行的。 2.真正高性能的强一致性工程系统:确保正确性的系统,未必能够有效运用到实际的环境中,因为高性能是衡量一个系统的核心指标。而多种强一致性下的TDSQL,有着可以满足实际应用的性能。在无任何数据异常和一致性异常出现的情况下,用户不必再担心数据或操作出现意想不到的问题,但却可以享受极佳的性能体验,这表明,工程实践中,该技术落地是可行的。 我们期待,序幕拉开,真正的强一致性系统将如雨后春笋…… 六 未来工作 一个好消息是,未来该项技术大概率会开源。 TDSQL的事务处理技术,已经有一部分开源了,大家可以在github上找到3TS这个开源项目,该项目专注于事务处理技术,会深入涉及与事务处理技术相关的各个层面,进行有价值、有深度的研究和实践。目前该项目下已经开源了13种并发访问控制算法,并提供了详细的文档资料。 TDSQL和中国人民大学数据工程与知识工程教育部重点实验室期望,能用自己的实际行动,让我们携手完成的项目,为学术界和工程界做出有意义的贡献,推动数据库技术向前发展。路漫漫其修远兮,我们在努力前行中,欢迎加入TDSQL,一起在先进技术的海洋中畅游。 图9 TDSQL未来的技术发展方向