乐趣区

关于数据库:黄东旭可插拔性-×-调度能力-×-云上几乎无限的资源-丨PingCAP-DevCon-2021

这次我分享的主题和 2019 年还是一样的——《The Future of Database》,如果你是 PingCAP 的老朋友,加入过之前几次 DevCon 就会晓得,这是我的一个保留节目。如果要说我哪里有一些不同凡响的气质,我感觉除了发型之外,还有一个是对技术的信奉和执著。这个保留节目咱们还是聊聊技术。

过来两年,TiDB 在技术上产生的最大变动是什么?可能有很多同学感觉性能变得越来越好,性能变得越来越多,生态性能越来越大,其实不是。

从一个程序员角度看,在过来两年中 TiDB 其实实现了一个很重要的转变,那就是 开发模式的转变。上图中右边是一个工程师对着屏幕在写代码,这是咱们早年在第一个办公室外面开始写 TiDB 第一行代码的状态。旁边放了一瓶可乐和披萨,想到什么写什么。当初 TiDB 整个研发流程越来越像左边这张图,一个小工厂流水线化做月饼。尽管当初离中秋节还略微有点间隔,还是很可恶。

TiDB 这两年最重要的一件事件,是研发流程以一个全新的发版模型去做软件工程,咱们称它为“火车发版”模型。这个模型的特点,是咱们会把很多大的 feature 以小的迭代进行逐渐增量公布,意味着更易于治理公布周期。

很多人可能会说“关我什么事?”,这件事件十分重要的意义在于,TiDB 从一个纯正社区的开源软件开始缓缓变成面向企业级的数据库产品。说得再接地气一点,用户实在场景外面须要的 feature 最快两个月就能合并到 TiDB 的骨干,并交付给用户。

两年前,我的演讲题目也是《The Future of Database》,上图是两年前演讲的截图。向量化,过后这是一个挑战,当初曾经实现了;TiFlash,过后只是在草图上设计的一个架构,在 5.0 引入 MPP 后让它变成了一个真正的 Real-time HTAP 的数据库;IPC / 异步提交,5.0 的性能和稳定性都失去了稳步晋升;TiDB DBaaS,当初 TiDB Cloud 曾经是服务千家万户,服务寰球各个中央的实在产品;本地事务异地多活,两年工夫也做完了。

两年前的五大构想,明天都变成了事实。

从 2019 年到当初的两年工夫中,在 这些 feature 背地咱们经验了什么?是两年工夫超过三万个 PR 的合并。人总是有成长的,两年前的我和当初的我区别是什么?发型没有变,T 恤也是一样的,变动的是 TiDB 合并了三万多个 PR。回头看我两年前的 PPT,我在思考一个问题,TiDB 的竞争力或外围劣势是什么?很多数据库都说本人的外围劣势是性能好、性能多。那么,TiDB 的劣势是什么?

两年前我的 PPT 外面有一页叫 Everything is Pluggable,我感觉特地有滋味,TiDB的真正劣势在于技术开放性。架构凋谢就意味着可能产生更多的连贯,更多连贯意味着更快的迭代速度、更多的可能性。

为什么 TiDB 的系统核心劣势是开放性?大家能够花几秒钟工夫去思考一下,这一个思考的角度,让我这两年缓缓开始变成一个哲学家。这个角度是:单机数据库和分布式数据库最实质的区别是什么?做分布式数据库的工程师的这些苦楚和幸福的本源在哪里?咱们真正的敌人是什么?咱们要解决什么样的问题?咱们怎么解决这些问题?

作为一个零碎的设计者,在思考零碎的时候,我感觉咱们真正的敌人是复杂性。TiDB 这么一个几百万行代码的软件,跑在 3 台机器上,跑在 30 台、300 台、3 万台的服务器上还是这一套代码。大家设想一下,3 台机器的复杂性和 3 万台机器的复杂性是一样的吗?

咱们生存中见过最简单的零碎是什么?就是活生生的生命,生命是最简单的零碎。包含每个人每天在和这个世界产生各种各样的交互,咱们没有方法意料今天。咱们去看生命这么一个简单的零碎,咱们往里看人的生命最开始就是一个受精卵,细胞不停决裂,很简略。再往下看 DNA,排列组合,所以我感觉从生命和本身的角度看,能力真正找到解决反抗复杂性的方法,这就简略了。

这里有肖邦老师的一句话,真正难的事件是把零碎做简略,简略意味着美。TiDB 在这方面的设计理念和很多的惯例做法还是有点不一样的,方才我提到一句话,咱们幸福和苦楚的本源在哪?方才也提到咱们是一个不一样的公司,技术上往深去思考咱们到底和其余的数据库区别是什么?最本源的区别我感觉在于外围的设计理念,当了解了 TiDB 外围设计理念再去看 TiDB 的技术架构设计,有很多具体技术问题大家天然就可能想通了,也能想到为什么咱们会这么做。

右边这是一个惯常思维,1)我要做一个数据库,2)做一个分布式数据库会怎么做,3)我试着把这些数据库下面的表给做分片,分区表,不同的分区放在不同的服务器上就是分布式了。

咱们过来素来没有做过数据库,然而咱们有一个疯狂的想法,这个想法就是咱们要做一个分布式数据库,咱们开始是去定义数据最小的流转单元,像方才看到的那张动图外面的细胞一样,咱们去定义这些细胞的决裂、合并、挪动,复制,滋生。把这些规定用最极简,正交,自洽的规定赋予这些细胞生命,让这些细胞长成一个数据库,是 TiDB 最外围的理念。单机数据库和分布式数据库本质区别在什么,分布式数据库在一台台机器上是能够成长的。

右边这张图解释了一下,惯例是这样去设计,简直所有的数据库都是从上往下设计的,TiDB 是一个 bottom-up 的设计,先定义底层细胞,在让它长成一个数据库的样子。

下一个问题,让大家思考几秒钟,给大家铺垫一下,右边的名词,两地三核心,异地多活,跨地区数据分布能力,本地事务,动静热点打散,实时在线捞数,只读表。这些性能的共同点是什么?

问:如果我要去实现这些性能该怎么去实现?这些性能背地的共同点是什么?有没有一个要害的点,解决了这个点所有能力都能马上领有,有没有这样的货色?

答案揭晓,方才所有这些技术的名词和所有的这些方才提到的用户看到的货色,背地都依赖一个能力就是“调度 ”,方才我提到了那个问题,一个单机数据库,一个单机零碎和分布式系统最实质的区别到底是什么?我给出答案是可调度能力,这是区别于单机零碎最次要的能力。可调度能力是凋谢的根底,凋谢架构不能让这个数据库以不变应万变,这个万变就像 把本人重塑成更适宜用户的场景的数据库,如果没有这样的能力分布式系统就变得没有意义,就不能说本人是一个凋谢的零碎。

所以,这个其实是 TiDB 在技术架构上最外围最闪光的价值。明天聊技术,咱们在可调度性上做了哪些事件,这是一盘大棋,不是一个 feature,这是一个理念,咱们看这个理念过来当初和将来会长成什么样子。相熟 Raft Proxy 技术的敌人,底层架构上,方才我提到的细胞是基于 Raft 复制协定的复制组,这其实是咱们整个调度最细粒度的单元,咱们在这些一个个数据复制组上赋予它自我滋生、决裂、合并、挪动的能力。左边这张图有一个 Learner,用户会心一笑,抉择这样的单元作为细胞是很适合的,每一个细胞的行为都是一样的,它是同构的。

咱们再放飞一下,原来 Learner 这个技术的第一次援用咱们想给它找一个利用场景,这个利用场景就是 TiFlash,原本只是咱们脑中一个小试验,我能不能在这个细胞上让它多复制一小块,让它干点别的事件? 过后,咱们感觉 AP 能力不太强,须要底层数据存储列存的数据结构,咱们把这个架构在正本上让它反对列存,于是 TiDB 就有了 HTAP 的能力,在这个根底上不到两年工夫一个小团队把整个 Real-Time HTAP 这个零碎就做进去了。

为什么这么快做进去?TiFlash 是可调度性的理念绝佳的一个例子,而且我脑子里还有很多很奇怪的想法,Real-Time HTAP,TiFlash 只是开始

最细粒度的调度能力,可调度上的调度能力,咱们再进一步往上看,有一些敌人相熟 Foreign Data Wrapper(FDW),当初 TiDB 还不反对 Foreign Data Wrapper。这个性能比拟好了解的一个说法,让 TiDB 把其余的数据源当作它外部一张表来进行查问,比如说当这个性能反对了当前,我能够把 Redis 作为 TiDB 中的一张表面,把 MySQL 数据作为一张表面,能够一起关联剖析 HBase 这些数据。

然而,FDW 意义仅仅停留在 ” 联邦查问 ” 吗?我在思考这个 feature 是为什么?因为我在看这个 feature 的时候联想到对于数据库的实质,数据库这种软件的实质是什么?当你抛开所有的数据结构,存储的能力,抛开所有性能,数据库外面到底存了什么货色?数据库把所有方才我说的概念都剥来到,它只干两件事件,一是存储实在的数据,另外一部分是叫做索引,数据库无非就是数据和索引,怎么在这两种概念中辗转腾挪。依照方才的思路把整个数据库当成数据和索引的容器,索引这个概念其实就是一种非凡映射的表关系,索引也是一张表,你要索引的内容对应到数据上的映射关系。

那咱们就跟着这个思路从新思考 FDW。左边是我的灵魂画风,有点难以看懂,明天整个数据库行业的趋势,其中一个趋势是各种各样的细分畛域的数据库诞生,图数据库,向量搜寻数据库,全文检索数据库,TiDB 能不能把这些数据库的能力变成它的索引能力?比如说我有一张表这外面存储着用户的关系,用户的信息,大家晓得在一个关系上的搜寻、查问用图的模型更好,如果是用传统的比如说我用索引的数据结构查问得很慢,用图模型能够极大减速这个性能。如果从这个角度去思考,TiDB 的索引可能接入其余的这些数据库,让其余的数据库作为 TiDB 的索引,同时以一个对立的接口给用户提供服务,是不是关上了新世纪大门的感觉?

明天大会的主题是凋谢×连贯×预感。

我感觉特地有意思就是这个“×”号,我也不晓得这些货色加进去当前能对 TiDB 的生态带来多大的可能性,任何人试图去预估它的价值都是高傲的,咱们能做的就是把这些根底给开发者打好,这是索引的局部。

咱们再把眼光往下看,数据库的实质一个是数据,一个是索引,当初咱们看数据,对于数据大家第一个联想就是存储引擎,数据的存储是最要害的一个话题。相熟 TiDB 整体零碎架构的同学必定对右边这张灵魂画风的图不会生疏,方才我提到 TiDB 在外部其实是把数据曾经拆分成了无数个小小的细胞,每个细胞是一个复制组,决裂,合并,挪动。然而在物理层面上存储咱们当初是应用基于 Database 的 Real-time HTAP。TiKV 底层用的是 Rocks DB,TiFlash 用的存储引擎咱们命名叫 Delta tree,两种引擎。

还能不能有更多?

在存储下来体现开放性和可调度性的能力,有一个根底的前提就是对存储引擎进行形象,相熟 TiDB 的代码的同学如果去看它的代码仓库,发现有一个很有意思的文件夹叫 Engine API,这件事件特地有意思,我间接把代码放上了,意思就是 咱们试图去对存储自身的能力进行形象,这个形象是一个根底。

这个形象的意义在哪?咱们为什么做这件事件?我对将来的一个判断,为什么一般来说数据库技术负责人总会谈到性能、性能,为什么明天咱们来探讨哲学?因为我感觉从更长的一个维度来看,当你的软件在保持高速迭代能力的时候,它是一个动静的进化过程,进化的终局是什么?

先来看性能,在 TiDB 倒退过程中,每一个版本都放弃着 100% 性能晋升的速度往前走,能够放弃到 6.0,7.0 每次都是百分之百增长,将来优化是无止境的。我集体认为,不会说创造了一种新的硬件和算法解决了全世界所有利用场景的性能问题,粒度会变得越来越细,有一些优化用于某些具体场景,比方用来存用户的关联和关系就是图的模型最好。然而有一点,我感觉用户不必去关怀他在应用什么样的数据库的构造,哪一块数据在应用哪一种数据结构,这些都不重要。

左边的图走漏了 TiDB 在做的微小的一个事件,信息量十分大,咱们做的事件,方才 Engine API 的形象让咱们能做一件事件,相熟 TiDB 的敌人都晓得,咱们在一台存储节点上是共享一个存储引擎,当初咱们缓缓对每一块数据分片,每一个细胞让它可能本人领有本人的存储引擎,这个事件在咱们实验室里曾经做完了,成果十分棒,过后都震惊了。

下一步倒退,当我把数据的细胞存储拆分了当前,下一步到底是不是 Delta tree 这件事件不重要了,比方我有一部分数据在业务场景外面一年只拜访一次,然而不能丢,我又不心愿用 SSD 来存,我能不能用云上 S3 的存储,甚至在一张表外面的一个数据特地热,对一致性要求没有那么高,是不是能在内存中对这一块数据的状态做一个变换。而且更有意思的是,这些所有的变换都是动静的,对业务都是通明的,回忆方才我说的可调度性和细胞这几个概念。

我方才说所有这些技术都是为了一件事件,都须要构建在一个根底上,方才我说了分布式系统的终局,分布式系统可调度是它的外围劣势,这个根底我置信各位大略可能猜出是什么,我须要有一个近乎有限的弹性资源池,就是云。对于云的重要性我感觉当初整个行业还在低估,当初天天说云,然而我感觉云其实是构建将来新一代软件的最重要的一个基石。

我感觉对于云有一个很好的说法,我作为一个软件工程师对待云就像什么?我用了有限的资源,就像一堆积木我怎么去拼,手上有多少钱能拼成什么样子。左边这张图是 Flink 的架构,Flink 是一个很有意思的产品,它上市有各种各样的新闻,然而我最早留神到它是在 2016 年,它发表第一篇论文的时候,我看那篇论文,是我这几年最喜爱的论文之一,那篇论文更大意义在于它创始了一种新的软件设计的思路,创始了新的物种,基于云的服务去构建的根底软件,它是第一个,但相对不是最初一个,TiDB 在这个畛域是走在最后面的软件之一。

TiDB 的核心思想,开放性体现在可插拔,存储和计算可插拔、可调度,借用明天主题“×”号,乘以调度能力,可插拔当前还能调度,细粒度,粗粒度调度,乘以云上简直有限的资源它又等于什么。

回顾一下我明天的题目,The Future Database,终极的 Future 是什么,这张图是我现实中的数据库的样子:底层各种各样的资源池,各种各样的云,私有云、公有云,混合云;下面两头逻辑这一层是数据平台,用户不同的业务不同数据,对数据库有不同要求,数据库会依据用户的须要主动去重塑本人;在不同的颗粒度上,从正本散布咱们去做寰球跨数据中心部署,这种能力对于 TiDB 来说工程代价并不是太高,刚我说调度能力,索引,咱们通过 FDW 将来能够引入各种各样多种状态的索引。开了一个小小脑洞,图的数据库作为 TiDB 的索引,依据用户需要变换本人的状态。

所以,大胆预测一下,方才那个公式“可插拔性 × 调度能力 × 云上简直有限的资源 =?”,数据库作为一个独立的软件状态我认为会被颠覆,同时意味着整个数据库的“数据服务平台化”会崛起,咱们下一代很多在场的各位为人父母,下一代的小朋友可能到他们写程序的年纪,可能不晓得什么是 CPU,什么是内存,什么是磁盘,什么是操作系统,可能看到的就是一个个云服务,比方要用数据库的时候好象有一个 TiDB 的货色,我把信用卡绑上去之后就能够间接用一个 SQL 的接口里操作就完了,不须要晓得什么叫索引,什么叫 Delta tree。

咱们回头看一下明天咱们大会三个关键字,凋谢,连贯,预感,只有凋谢的架构能力有更多连贯,更多的连贯能力让咱们有更好将来,这是明天我对于 TiDB 的技术和设计理念的分享。

退出移动版