关于sql:从TDSQL看分布式数据库的技术之美

35次阅读

共计 8171 个字符,预计需要花费 21 分钟才能阅读完成。

​导语 | 每一个时间段总是一个新时代,新技术层出不穷使得数据库技术焕发新生。Spanner、CockroachDB、TDSQL 等分布式数据库正是这个时代的弄潮儿。本文由腾讯云数据库专家工程师 李海翔在 Techo TVP 开发者峰会「数据的冰与火之歌——从在线数据库技术,到海量数据分析技术」的《分布式数据库的演进》演讲分享整顿而成,带大家品尝分布式数据库架构、前沿技术和 TDSQL 技术实际,感触分布式数据库的技术之美。

点击可观看精彩演讲视频

一、分布式数据库架构

我明天所分享的内容次要集中在数据库技术层面,和腾讯近十年的分布式数据库技术倒退非亲非故,次要有三方面:第一是分布式数据库的历史倒退和演进;第二是分布式数据库里较外围的技术内容,包含相干的内容知识点;第三是腾讯 TDSQL 在前沿方面所做的工作。TDSQL 是一个基于 HTAP 的分布式数据库系统,尤其强调强统一。2017-2018 年咱们提出过“全时态数据库”的概念,过后提出实现了一个叫做 HTAC 的混合事务剖析处集群架构,HTAC 和 HTAP 十分靠近,在工程方面咱们称为 HTAC,用一个实践的名词来概括就是 HTAP(混合事务剖析解决零碎),所以在那时咱们就曾经推出本人的原创性产品,而这个产品这两年的演变始终专一于强一致性,在去年咱们推出了兼具实践与实际的产品,分明解释了“强统一”这个概念。该技术对应的产品,外部通过一段时间打磨后,载有该项技术的 TDSQL 将在 TDSQL 私有云等产品中很快推出。

1. 分布式系统经典架构概述

先来看第一局部,分布式数据库的倒退演进。这幅图在阐明什么?外面在谈一些基础架构:Shared Nothing、Shared Memory、Shared Disk、Shared Everything。这些是什么?最早从哪里来?硬件层面是做软件的根底,硬件层面的倒退决定着软件技术的倒退,硬件层面把一些根本的框架搭好后,数据库的软件或者说应用层、零碎层的软件都会在下面叠加,就像搭积木一样,一块一块地往上垒。对于数据库外部其实也是这样的,分模块、分档次,之后这些货色都能够搭建在一起。然而数据库有着紧耦合性较强的特点,搭在一起后就很难拆开,然而当初做分布式数据库的一个趋势是要尝试把这些货色拆分,再像搭积木一样往上垒,哪个中央须要什么样的组件,就去建设这样的组件,模块与模块之间要解耦,解耦之后更易搭建,把这个零碎搭得在未来更具扩展性。分布式数据库系统的底层根底是和硬件严密相干的。

2. 分布式系统架构经典支流技术

我从技术的角度展现一下数据库的代表技术。在这幅图中,第一个人是数据库界图灵奖的第二位得主——关系模型的创始人科德博士,他在 1970 年的时候以一篇论文奠定了关系型数据库的根底。1974 年时有两个典型的技术诞生,一个是 SQL 语言,另外一个是事务处理技术。50 多年前,数据库界第三位图灵奖得主 James Gray 开始钻研事务处理,并对失去了一系列的开创性的成绩,所以事务处理奠基于 70 年代,直至今日。同年,IBM 同样诞生了一个开创性的技术,就是咱们所熟知的 SQL,SQL 这个概念是从 IBM 在做数据库的钻研起就开始提出的结构化查询语言。

再往后,是 ER 模型,ER 模型是实体关系模型,可能帮忙咱们做数据库利用的建模。然而,在数据库技术的倒退过程当中呈现了很多模型,包含后面说的 1970 年之前的关系模型、层次模型,再往前的网状模型,这些模型和 ER 模型产生的初衷是一样的,都是要从数据、数据档次的角度与实体世界进行映射,以让数据世界具备表白、计算实体世界的能力。只不过 ER 模型在倒退过程中只被人们用于了关系建模(教科书撷取了精髓展现,读者的了解水平不再能全面粗浅),但它背地蕴含的内容其实和关系模型、层次模型是雷同的,如果咱们回顾历史还原其初衷,则能从历史当中看到的一些根本的货色。

到了 1980 年,数据库界呈现基于代价的查问优化技术,它可能较好的选出一个近乎最优的执行打算。尔后,数据库又演变出了基于火山模型的执行器,推动数据库的技术进一步倒退。从这副图中能够看出,数据库技术倒退基本上是从没有事务到有事务概念这条主线上推动的,到了 1993 年的时候有了 AP 和 TP 的分叉,这归功于科德博士,他除了提出关系模型,又提出了 OLAP 的概念——在线剖析事务处理,以前的主线就变成了 OLTP 和 OLAP 两条分支。

随着时光的持续推移,2014 年,有意思的事呈现了,一个并不是学术研究机构而是对行业的钻研机构——Gartner,推出一个概念:HTAP,冀望在事务型的零碎上加强剖析的性能。这个概念这几年大火,仿佛在补救事务型数据库的重事务处理弱剖析能力的缺点(概念分家,指导思想发生变化,看来还是有害处的)。人们总是有一个美妙志愿,在一个零碎内搞定所有的事件。这同人类的需要和一直变动的认知存在关系。

但在这之前,2012 年谷歌的 Spanner 零碎诞生了,它标记着人们从不要 SQL 到拥抱 SQL 拥抱数据库的事务处理技术,演变成了 New SQL 零碎。

前述这些技术,是数据库的经典技术,无论单机数据库还是分布式数据库,都基于这些基础性的技术。尽管 TDSQL 是一个分布式数据库,但外面 90% 甚至更多的根底外围性能来自于单机数据库系统,所以技术的演进其实是踏着后面的根底而一直演变的,分布式数据库的技术离不开后面咱们谈到的关系模型、事务处理等根底技术。因而我认为做分布式数据库离不开单机数据库系统,意识分布式数据库要先从单机数据库系统动手,单机数据库系统实际上就有了分布式数据库的五脏六腑,它曾经比拟全面。只是分布式数据库在根底技术之上,因零碎架构的变动,有了一些新挑战。

上面,咱们以 MySQL 的数据库系统架构为例,来分享单机数据库系统蕴含了哪些模块和组件。

左上角的 SQL 是一个入口,它执行完的后果在这个箱子里转了一圈后将后果返回用户,进入到数据库系统里。右边的是 MySQL Server,左边是它的存储引擎,实际上整个数据库能够分为三层:右边的 Server,左边的存储引擎,存储引擎上面和操作系统紧密结合的是和内部文件相干的一部分内容。Server 在接管用户的 SQL 语句并解析,就像编译器,对于 SQL 语句做解析失去一棵语法树,这棵语法树通过查问优化器的转换变成逻辑查问打算,再变成物理查问打算,过程中会做很多优化,就像子查问优化,表达式怎么去重、化简等工作。再往后它就要交给执行器去执行,执行器实际上和存储系统是严密绑定的,存储系统的两大部分,一部分是执行器,各种 SQL 语句的执行,DDL、DML、DQL 等,它的执行过程当中又受到横向的事务处理与它正交的组合,在事务处理零碎的管制之下,各种 SQL 语句高并发地执行,并通过各种模块。

模块从底层往上看,数据库系统最底层的是一个文件,因为它要存在操作系统上,而操作系统上是以文件为单位来组织数据的,所以大家能够看到最底层的是一些物理文件,物理文件有它的格局,格局上就有数据库本人定义的各种数据格式。数据能够分为两局部,一部分是用户数据,一部分是数据库系统本身要保护的日志数据,数据能够读入写出有物理的 IO 产生,其要和存储引擎,也就是执行器加存储系统打交道。数据被读入后进入内存,不同的数据库有其本人特定的数据格式,这须要 access 解析格局,初始面对的是一个一个物理页面,把它们先加载到缓存区里,而后做格局的转化,物理页面被解析成一个一个的记录和列,便于下层对它进行计算。当这些解析实现后,比方有两个客户端连进来,那就有读写同样数据的可能,因而有并发存在,就可能会产生数据异样,事务处理零碎这时候就要产生作用——防止数据异样、保证数据的一致性,通过计算之后再把后果通过 SQL Server 向上返回。作为一个分布式数据库系统而言,它离不开这个执行过程,也离不开这外面所蕴含的根底模块和组件。

数据库系统是倒退和逐步演进的。实际上晚期做单机数据库的大家都相熟主从架构,MySQL 的主从架构是基于逻辑和物理混合的,但更多是偏差逻辑地做主从架构的数据传输。而后纯正的单机数据库系统推动了一步,成为近似于散布的,物理节点曾经变成多个,然而一主多备,多备只能去做读,还不是纯正的分布式数据库系统,所以数据库系统实际上架构的倒退分成两代,第一代是纯的单机零碎,第二代是分布式系统,介于第一代和第二代之间就有这么一个过渡性的阶段,我把它称之为 1.5 代,然而它还归属于单机数据库系统,所以有了这样一个主从架构。典型的每一个数据库都做了基于物理日志的,像 Oracle、PG 流复制等,但 MySQL 基于逻辑日志这样的格局去做主从构造的。

时光推移到七八年前,亚马逊的 Aurora 零碎诞生,它实质上还是主从架构、一主多备式的,提高的中央在于做成了一个云上的存算拆散的零碎。所以 1.5 时代的产品,典型的代表是相似于晚期的主从 +Aurora 这种架构,这是一个过渡时代。再往后咱们会进入到真正的分布式数据库时代,它典型的标记是什么?是多写,在每一个节点上都平等地看待,能够在每一个节点上写,这外面的技术就又有多种,有的是伪的分布式,其把事务的所有写操作集中在繁多的节点下来做,真的分布式是利用分布式并发拜访控制算法,在每一个节点下来做数据一致性的保障。

3. 小结

数据库根本架构的演进就是经验了这么一个过程,总结一下,反过来从技术角度来看到底是什么因素在推动分布式数据库系统的演进。其实数据库系统有一些外在的、本质性的需要在推动它,咱们以前说数据库系统外面有“三高一易”,高牢靠、高可用、高性能、易用性等等,这些根底因素在推动着分布式技术一直地向前倒退,到起初演化成分布式数据库系统的时候,对于程度扩大的要求提上日程,所以我的第一个总结是针对扩大,不仅是垂直扩大,而且要程度扩大,所以对于扩展性下的多读多写场景,使得分布式数据库的构造变成纯正的每一个节点都是对等的构造。在散布零碎里要考究可用性,包含数据层面的可用如共识协定下的数据多正本机制、也包含整个零碎性能层面的可用。如果以较少的投入取得高的性能,那就能够对外撑持更多的业务,老本就会更低。所以对于数据库外在原生的要求从单机数据库系统到分布式数据库系统始终没有产生过变动。这是我分享的第一局部。

二、分布式事务与一致性

1. 数据异样

第二局部,咱们来看看分布式数据库系统外面的技术层面会蕴含一些什么样的内容。事务型分布式数据库系统外面最外围的,肯定是事务处理技术。数据库的操作通过形象当前就有两种,一种是读操作,一种是写操作,当有了并发存在的时候,至多有两个事务读写同样数据项的时候,就可能产生数据异样。

右边的图在说当读写在两个事务的正交之下,就是 2×2 四种状况,四种状况里只有读和读不会产生数据异样,其余的组合都会产生数据异样,这是数据异样产生的起因。因为有并发读写雷同的数据项,事务处理就是要解决这样的问题。事务处理有 ACID 四个个性,其中的 C 是一致性,I 是隔离性,其实 C 和 I 是雷同的内容,就像硬币的两个面,保障统一、保障隔离,隔离级别弱一点,一致性会差一点,会容许一些数据异样存在,也就是左边这部分示意的,一些特定的数据异常现象会产生。

这幅图总结了局部数据异常现象,但实际上数据异样不只是这么一点点,TDSQL 在做的一项工作是:系统化地钻研数据异样到底有多少种。目前为止人类都不可能解释分明数据异样到底有多少。

SQL 规范定义了四种数据异样、四种隔离级别,James Gray 在里 1995 年的一篇论文定义了八种数据异样、八种隔离级别,在这种状况下,如果忽然又发现第 9 个数据异样,依照 SQL 规范,它应该被放在这两个体系下的哪一个隔离级别之下?这样的问题在目前是不能答复的,而这也是 TDSQL 在做分布式数据库研发过程当中所遇到的、所要解决的问题,只有答复了这样的问题之后,一个零碎能力真正做到强统一,所幸咱们目前对这样的一个根底问题有了明确的答案,并且秉持腾讯开源精力,把这项钻研后果开源到了 3TS 零碎(Tencent Transaction Processing Testbed System)。

解决数据异样的一些技术就是并发拜访控制算法,而并发拜访控制算法又有很多,比方基于封闭的、基于工夫戳的、基于乐观机制的等等。TDSQL 开源的零碎是做根底技术钻研的,即腾讯事务处理试验床,咱们的零碎叫做 3TS,取方才我说的那几个词外面的第一个字母 T,所以有三个 T,就是 3TS。

而解决分布式数据库系统外面和事务相干的技术,比拟重要的还有一种数据异样——读半已提交。读半已提交这样的数据异样是基于物理散布的零碎上产生的,在一个节点上某个数据项曾经提交了,转账的另一个节点上的还没提交,这时来第二个事务去读这两个节点,肯定能读到已提交的那个节点上的数据,然而读不到未提交节点上的数据,也就是在未提交节点上所读到的数据是旧的数据,旧的数据和已提交的新数据二者之间不能保证数据一致性,所以会产生称之为读半已提交的数据异样,这就是分布式数据库在事务处理层面即一致性方面要解决的问题。

2. 短少一致性面临的挑战与业界解决方案

但分布式数据库系统面临的不只这些问题。因为数据库从一个集中式零碎扩大变成了每一个都逻辑独立的子系统,但对外它的行为还像一个物理繁多的数据库系统要体现的一样,这就面临着新的挑战。单机数据库系统上做事务处理要保障 ACID,分布式系统外面也要保障 ACID,然而分布式系统外面要有分布式一致性,如:线性统一、程序统一、因果统一,还有读后写、写后读等等,而这两个碰到一起就会产生新的问题,这是分布式系统要解决的。

不只是下面提及的问题,咱们面对的问题更为简单。例如,如下这张图详情了各种分布式一致性的概念,很简单,这外面大概有近 60 种分布式一致性,光把这幅图弄清楚、把每一种一致性弄清楚,曾经不容易了,再和事务的 ACID 联合,难度就会更大。

业界对于分布式事务的一致性,是有钻研的。如下图,我大略解释一下这幅图的内容:左上角事务一致性,左下角分布式一致性,右上角有个隔离级别下的事务一致性问题,这是数据库里要解决的事件,但偏偏就在该图这个红色方框,分布式一致性和事务处理外面联合的这些中央目前为止没有相干的实践和技术来撑持,而这些也正是 TDSQL 在做分布式数据库系统当中致力于解决的问题。比照业界谷歌的 Spanner,Spanner 做到了真的强统一,这是目前我看到的惟一的强统一零碎,唯二是 TDSQL。Spanner 做到了线性统一加 ACID 数据一致性的交融,业界实际上早有这个概念叫做严格可串行化,它能在全局层面保障分布式系统下数据的一致性,这才是真的强统一(请留神,这里强调全局,即从任何一个节点看去读取数据,大家都能读到一样的后果,不可能不同节点取得不同的察看后果)。

然而如果对 Spanner 做一个测试或者实践推导,会发现 Spanner 零碎的事务处理性能十分差。Spanner 能用到什么中央?就是用到非实时性广告零碎数据的解决下面,然而大家据说过 Spanner 用到过金融零碎外面吗?没有,此种背景下,就对 TDSQL 形成新挑战了,因为 TDSQL 要用到金融零碎业务外面,咱们既要保障正确性,又要保障性能。

而做分布式数据库还面临着做高并发执行器须要的技术 MPP。

从一开始咱们就提到了数据库基于硬件零碎搭建,受限于硬件,作为分布式数据库,还面临什么问题?咱们在钻研它和新硬件有什么关系,方才盖老师谈到了 Oracle21c,21c 做了长久化内存和数据库的联合,但它是单机的联合,而 TDSQL 要做和分布式系统的联合。比方晚期和 SSD 这样的硬件联合,当初和长久化内存、和 RDMA 联合,都是咱们在做的事件。

所有这些事件都有一个外在的需要驱动,就是数据量的变动。数据量的变动有几个层面,第一个很重要,但大家可能并没有齐全感触到,就是元数据。对于一个分布式数据库系统来讲,元数据会剧增,也会对数据库提出一些新的挑战,不仅如此,数据库系统外面还有什么?咱们晓得大家都在谈 AI for DB,这时 AI 零碎肯定须要大量的数据,这大量的数据就要有一个存储,有些零碎是把 AI 所需数据存储在数据库之外,而咱们在思考,是否存储在数据库之内?如果能又以什么模式存储?这都是作为分布式技术要钻研、思考的根底问题。

三、基于 HTAP 的 TDSQL 强一致性技术实际

所以分布式数据库蕴含了比拟多的内容:事务处理数据量的存储层面、计算层面等方面的问题,基于这些需要,咱们开展了根底钻研,做了 TDSQL 的 HTAC 零碎,外面蕴含多种多样内容。这是咱们零碎的根底架构图,它看起来像一个单机零碎,然而外面会有很多小的细节,能够看出其是一个分布式系统。

在这个零碎里会蕴含多种多样的技术,其中外围的就是我方才谈到的和事务处理相干的——怎么保障强统一。

而依据咱们的钻研,发现数据异样有无数个,无穷尽的货色,怎么去认知?这又造成新的挑战。TDSQL 在做的一项工作事就是对数据异样归类,把数据异样分成无限的若干种,对它进行认知,基于这样的认知就能够定义什么叫隔离级别、什么叫一致性,怎么去影响、对待现有所有的并发拜访控制算法,怎么和分布式一致性去联合,这都是 TDSQL 在研的一些根底技术,也是方才谈到的一致性技术外面的根底内容。

接下来分享下咱们做出的工作。左上角是学术界的意识,左下角是业界的现有产品对于强统一的反对水平,右下角是咱们得进去的后果,咱们把左上角那棵树变成了右下角的一张网,意思是把树上很多看似没有关联关系的节点交错在一起分割起来,这外面就波及到强一致性相干的技术内容。

基于方才的技术,咱们研发出了多级一致性技术,即多种级别的可串行化技术,使得在分布式系统下,可串行化又能够分为多种级别。咱们在谷歌云上买了 Spanner 服务,比照了 Spanner,在 GreenPlum 上实现了多级一致性技术,又在 MIT 开源的一个零碎上比照了多种并发拜访控制算法,试验结果表明,TDSQL 的性能都更好(该技术在 2020 年的 DTCC 上做过公开分享)。

最初总结,分布式数据库的挑战、问题在哪里?我以一个目录构造列出了这些内容。该目录构造分为两局部,右面局部是数据处理技术其本身对数据库的外在驱动需要,右面局部是基于数据库所处的外部环境对于数据库的驱动因素。大家能够察看目录所列的这些根本因素,以理解分布式数据库的相干技术点。数据库外在的需要其实有分布式和存储架构相干的,数据分布、存储管理、多正本、存算拆散、多读多写、查问优化、MPP。这个思路其实和我方才所分享的脉络是一脉相承的,又和高可用、和事务处理相干,这些都是分布式数据库的外在需要,驱动着数据库技术持续一直地后退。

从里面的来看,新硬件、智能数据库、云计算,这些是计算对于数据库系统的要求;HTAP,还有下一代所谓的 New SQL,数据库也在一直地演进,此过程中还会产生一些新的技术和内容。所以做分布式数据库,大部分就是基于单机数据库系统,再做一些和分布式相干的事。分布式相干的事件大略是我后面提到的那些支流技术,这张目录构造把没有包含的根本核心内容都蕴含了。

其中,特地阐明一点,是去中心化。做分布式数据库肯定要思考去中心化,也就是各个节点之间是对等的,思考一个并发拜访控制算法的时候,这个算法是不是去中心化的?它们之间的关系是不是对等的?都是要思考的。

最初,如果大家对外围的根底技术感兴趣,能够关注咱们 3TS 的零碎,它的钻研指标次要包含:比方分布式事务处理怎么去做,它和性能扩展性、安全性、一致性等等这些的关系是什么,怎么评估这个分布式数据库系统,数据异样有多少(咱们答复了数据异样有无数个,但能够归类为无限种),并发拜访控制算法怎么改良等技术。

期待和各位朋友深度交换。谢谢大家。


讲师简介

李海翔

腾讯云数据库专家工程师,负责腾讯 TDSQL 研发工作。中国人民大学信息学院工程硕士企业导师,CCF 数据库专委会委员,DTCC(中国数据库技术大会)专家委员会委员。出版有《数据库查问优化器的艺术: 原理解析与 SQL 性能优化》、《数据库事务处理的艺术:事务管理和并发访问控制》、《大数据管理》。申请与受权专利 50+,VLDB 等顶会论文若干篇。参加包含国家 863 重大专项、核高基、工信部、科技部等多我的项目。获北京市科技进步一等奖。

正文完
 0