“在分布式背景下,怎么实现双一致性(事务一致性、分布式一致性),并进步分布式事务型集群的解决效率?”腾讯TDSQL数据库长期致力于根底钻研翻新,并继续取得关键技术冲破。

在第11届DTCC(中国数据库技术大会)大会上,腾讯TDSQL数据库专家工程师李海翔分享了数据库畛域的核心技术——分布式事务处理技术的外围——多级一致性技术。该技术在遵循了ACID个性的同时,使得事务处理技术合乎CAP原理,并在实践层面相较“严格可串行化”技术做了扩大,进一步提出了多种强一致性的残缺技术。同时该技术在工程实际层面落地了较高的性能,是同类产品Spaneer性能的4+倍,是CorchroachDB的2+倍,高并发场景下是Greenplum性能的3+倍。

这意味着,TDSQL实现了数据库行业首个高性能的强一致性工程零碎,对推动分布式数据库核心技术以及产业利用有着重要意义。

0. 问题的背景
科学研究,始于问题。在分布式事务处理畛域,有很多重要的问题,远不止是2PC技术所能囊括的。例如,腾讯TDSQL目前在解决的一个简单且是一个复合的问题如下:

事务型数据库必须要解决的问题,是数据的一致性问题。该问题是事务ACID个性的C的问题,如果不满足C,会有多种数据异样,如脏读、不可反复读、幻读、读偏序、写偏序等数据异样。

而分布式系统,遵循CAP实践,其中的C,也是“一致性”,是操作之间读取数据的一致性。如果CAP的C不被满足,则会呈现Steal read、Immortal write、Causal reverse等一致性异样问题(如图2所示)。

而分布式事务型数据库,则同时面临以上两类问题,如图1所示。在分布式事务型数据库中,该两类问题各自解决都有难度(例如很多数据库像Oracle都不提供可串行化不能确保数据异样不产生、NoSQL零碎为了保障CAP中的A和P而丢掉了C),更不用说协同被解决了。

分布式系统下存在的问题

TDSQL作为一个分布式事务型数据库,就面临着如上的两个问题叠加(分布式一致性+事务一致性)这样一个复合且简单的技术问题,其难点在于保障正确性的背景下如何做到高效率,这间接影响着分布式事务数据库的事务处理的吞吐量(Transaction throughput)。

1. 学术界的钻研与问题的复杂度
在学术界,前述问题的一种解决形式,被称为“严格可串行化”,该技术能够解决掉事务的一致性和CAP的一致性引发的问题。如图3所示(文献《Highly available transactions: Virtues and limitations》),其中的树根,就是事务一致性和分布式一致性的结合点,严格可串行化。而树的左子树(事务一致性)和右子树(分布式一致性),是两个独立的零碎,他们之间没有关联关系。

学术界对于“事务一致性和分布式一致性的结合点”的钻研(1)

从图3也能够看出,左子树的事务一致性隔离级别有很多种,右子树的分布式一致性有很多种,因而,须要系统地钻研各种级别的事务的一致性和分布式系统的一致性,能力更好的剖析问题、解决问题(而不是只思考树根的惟一结合点)

分布式一致性关系图

只管交融分布式一致性的问题有很大的复杂度,然而这样的拦路虎是阻止不了咱们对问题深入研究的激情和步调的。TDSQL在前行摸索中,如图5所示,看到了方向和曙光(红色方框处)。图5中蓝色方框,是事务中的与隔离性相干的一致性等级、和分布式一致性,在横轴的“Isolation(transactional)”列,对应的是事务的隔离级别,而他们相交处,是红色方框所框住的,却是“一片空白”。这片空白处,正是研究所未及处,也正是这片无人区,让TDSQL的钻研有了空间和舞台。

学术界对于“事务一致性和分布式一致性的结合点”的钻研(2)

另外,业界常常提及“强一致性”,但概念凌乱不清晰。文献《Consistency in Non-Transactional Distributed Storage Systems》指出如下内容,廓清了强一致性的含意:

In a hybrid consistent system, strong operations are guaranteed to be seen in some sequential orderby all processes(as in sequential consistency), while weak operations aredesigned to be fast, and they eventually become visible by all processes (muchlike in eventual consistency). Weak operations are only guaranteed to beordered according to their interleaving with strong operations: if twooperations belong to the same session and one of them is strong, then theirrelative order of invocation is respected and visible by all processes.

所以,是否被“所有过程”可见,是判断强一致性的规范,而在分布式一致性中,只有线性一致性和程序一致性满足强一致性的含意。而联合事务一致性,须要再满足可串行化能力称为分布式事务的强一致性。

综上所述,TDSQL所钻研的问题,正是ACID的C、CAP的C,以及强统一之间的内在联系,他们有两个维度的体现:一是思考这些因素时如何保障正确性,二是在有这些因素存在影响下如何保障所实现的零碎有好的性能。如果没有好的性能,提供再强的一致性也难以实用,因而强一致性背景下实现高性能成为挑战。

2. 产业界的实现与存在的问题
在产业界,目前只有Google的Spanner零碎,实现了“严格可串行化”,Spanner称之为“内部一致性”(《Spanner:Googles globally distributed database》)。该项技术在2012年发表,使得数据库界的钻研和实际从NoSQL时代买入NewSQL时代,具备划时代的意义。其实现的技术实质,是把分布式中的线性一致性和事务一致性的可串行化相结合,从而实现了“严格可串行化”。

工业界对于“事务一致性和分布式一致性的结合点”的实际

然而,Spanner的实现,存在一个问题:正确性可能保障,但性能低下(如图6所示的事务吞吐量的计算公式)。因而,该零碎具备象征意义。而实际中,对于须要在金融级的事务处理场景中,其性能不符合要求。

3. 腾讯TDSQL的多级一致性技术
TDSQL深入研究了分布式一致性问题,解决了一些技术难题。例如图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个层面进行了比照:

比照Spanner的性能:图8左上角的子图,同样性价比的等同资源状况下,TDSQL的多级一致性是Spanner性能的4+倍。
比照CorchroachDB的性能图8左下角的子图,同样硬件测试环境下,TDSQL的多级一致性是CorchroachDB性能的2+倍。
比照原生的Greenplum的性能:图8右子图,硬件测试环境下,TDSQL的多级一致性是原生的Greenplum性能的3+倍。
存在肯定水平的网络延时的状况下,TDSQL多级一致性的性能体现:图8右子图,还测试在分布式环境下,当网络存在1.5ms和5ms的延时状况下,高并发场景下的TDSQL多级一致性技术,仍然好于无延时状况的Greenplum的RC隔离级别的性能,这表明具备更高一致性的隔离级别能够做到更好的性能(CorchroachDB晚期版本实现了快照隔离和可串行化,但在新版本中,只保留了更严格的可串行化级别,大家可想想为什么呢?)。

TDSQL多级一致性工作的意义
TDSQL多级一致性的钻研与实际工作,有几个价值:
第一个实现多种强一致性的工程零碎:在目前已知的零碎内,实现强一致性的只有Spanner和TDSQL;实现多种级别的强一致性零碎,只有TDSQL。这对于深刻实际强一致性零碎,有着楷模的作用,咱们可从中晓得,工程实际中,该方向的实践是可行的。
第一个高性能的强一致性工程零碎:确保正确性的零碎,未必可能无效使用到理论的环境中,因为高性能是掂量一个零碎的外围指标。而多种强一致性下的TDSQL,有着能够满足理论利用的性能。在无任何数据异样和一致性异样呈现的状况下,用户不用再放心数据或操作呈现意想不到的问题,但却能够享受极佳的性能体验,这表明,工程实际中,该技术落地是可行的。

将来工作
一个好消息是,将来该项技术大概率会开源。

TDSQL的事务处理技术,曾经有一部分开源了,大家能够在github上找到3TS这个开源我的项目,该我的项目专一于事务处理技术,会深刻波及与事务处理技术相干的各个层面,进行有价值、有深度的钻研和实际。目前该我的项目下曾经开源了13种并发拜访控制算法,并提供了具体的文档资料。

**TDSQL将来的技术倒退方向
**
腾讯TDSQL和中国人民大学数据工程与常识工程教育部重点实验室冀望,能用本人的实际行动,让咱们携手实现的我的项目,为学术界和工程界做出有意义的奉献,推动数据库技术向前倒退。路漫漫其修远兮,咱们在致力前行中,欢送退出TDSQL,一起在先进技术的陆地中畅游。