共计 4322 个字符,预计需要花费 11 分钟才能阅读完成。
“在分布式背景下,怎么实现双一致性(事务一致性、分布式一致性),并进步分布式事务型集群的解决效率?”腾讯 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,一起在先进技术的陆地中畅游。