乐趣区

关于数据库:TDSQL-云原生时代的数据库技术革命

大家好!我是腾讯数据库工程师程彬,十分荣幸可能代表团队在这里和大家一起交换一数据库畛域一些技术思考和技术实际。

明天和大家分享的次要蕴含三局部: 第一局部,在最新的云原生时代,数据库技术该何去何从,将怎么进一步演进?第二局部,基于 TDSQL- C 这样一个数据库的产品,怎么去构建一个新时代的数据库的产品?最初是用户的实际。

当云计算这个词还在热度的时候,其实云原生的时代就曾经悄悄而来。 在云原生时代外面最大的扭转是什么呢?在云原生时代外面,咱们的感觉是用户应用云的形式产生了极大变动,在过来用户可能会把本人 IT 架构或是业务零碎从自建的 IDC 或传统的 IDC 搬迁到云下面来。然而最近几年客户上云有一个很大的变动,不在是间接搬迁上来,而是依据云上基础设施、IaaS 或者 PaaS 的一些特点,进行本人 IT 架构的降级或业务零碎的降级。

用户应用云的形式的扭转,会对云上的云数据库有哪些挑战呢? 这外面的挑战十分大,举一个例子,比方用户在云下面本人去购买虚拟机,部署本人数据库,而当初虚拟机提供了很牢靠的存储正本数自身就是三份,如果你在数据库下层再做架构的冗余,整个数据库存储正本数就会放大很多。

那么这个问题应该怎么解决呢?先简略回顾一下数据库技术演进的历程,从技术的角度来讲,数据库是利用计算、存储、网络的能力对用户数据进行存储和加工,数据库技术的演进也离不开基础设施和数据特色变动。
在上世纪七十年代,以大型机和专用网络为主,这种状况下应用计算机的场景或者用户数是不多的,次要是国防或科研单位,或是一些大型的商业公司来应用数据库,他们的数据量规模不是很大,然而数据价值十分之高,就催生出了以 Oracle 和 IBM 为代表的商业级数据库。

商业级数据库给人最大的印象就是贵,然而它贵是有理由的,首先是软件贵,它有三件了不起的事件,第一件是实现了二维标为代表的数据模型,这种模型最大的益处是把主观世界数据能在数据库系统外面完整的保留下来。另外一个很了不起的事件,到当初为止也影响着数据库,很多时候大家拿 SQL 代表数据库,SQL 是十分了不起的语言,有了 SQL 之后才有了数据库宽泛的被实用。最初就是事务处理的能力,让数据库能真正用到一些要害的业务场景外面去,实现数据库的存储。

随着计算机和因特尔技术进一步倒退,咱们发现应用计算机的用户变得越来越多,催生出了以谷歌为代表的互联网企业。而在互联网时代数据库又遇到一个新的挑战,那就是用户的数据急剧增长而带来老本挑战。

怎么去解决老本问题? 之前的数据库为什么贵重首先是软件贵,通过开源共建的形式来去升高整个软件的老本。第二个是硬件问题,传统数据库依赖于一个很低廉专有的硬件设施,怎么去解决这个问题?办法也很简略,能够通过一般 PC 服务器来去承载,一般服务器带来一个问题,是它的可用性,包含性能相比于专有的设施是有肯定降落的,这时很天然会想到通过集群、分布式的形式来去解决这个问题,开源和分布式为根底的互联网技术体系就应运而生,同样,互联网的数据库也是基于这个体系来去构建的。
云计算时代又有什么变动呢?以前一家公司只须要治理本人数据库,而当初变成一家公司要治理数以万计数据库,治理规模增大带来了两大问题。第一个问题,怎么让数以万家技术不同的公司能很好应用到云下面的数据库。第二个问题,大规模治理下怎么去进步管理效率,数据库即服务就应运而生了,大家都会想尽办法通过服务的形式来躲避在应用上瓶颈,想方法晋升整体资源的利用率。

随着数字经济遍及,这外面又遇到一个全新问题,比如说腾讯云数据库上发现用户数整体增长还是依照很高增长在往上增长,客户构造跟之前也产生了变动,有更多的守业用户上云,老本变得更加敏感。第二个,咱们发现在云下面跟着腾讯云一起成长用户,从守业公司到独角兽到上市公司,他们对数据库弹性要求随着他们本人公司价值变得越来越高。另外,传统线下,包含银行、政务逐步上云,对稳定性要求更高。

再说一下之前基础架构上的天花板,基于分布式和开源的架构下解决了很多问题,但它还是有一些先天的有余,并没有解决得很好。第一个,对计算、存储这种资源的耦合度十分强,导致整个资源利用率是偏低的,反过来说,这块的老本就偏高。第二个,弹性能力下面,因为受限于资源的紧耦合,在弹性下面做不到极致。

基础设施又有什么新的变动? 咱们发现在云下面的 IaaS、PaaS 它的承受度会变得越来越高,那么是不是能够换一个思路来看这个货色?数据库自身蕴含计算、存储、减速,是不是有可能基于云下面的基础设施打造全新数据库来提供极致弹性呢?答案是必定的,所以咱们就会去尝试去研发出一款全新的数据库。

首先从架构上来看,能够把单体架构降级为更可控的弹性架构。 设计理念很简略,第一,如果要去提供弹性,首先要去把解耦,各种资源做分层设计,把数据库当成一个计算机来对待,把计算、存储进行分层来解决。分层过后,咱们通过池化让每一层的能力,让计算、存储的能力变得有限之大。然而数据库还要解决一个很大的问题,就是稳定性的问题,一个好的数据库稳定性怎么去打造?咱们基于云上的 IaaS 跟 PaaS 来进行从新设计数据库,会复用到之前数据库的内核和已有的十分成熟的计算技术,去复用 EV 级规模存储的平台。基于这样的平台,去打造六大外围能力。

第一个就是可计算存储能力,咱们践行 log is database 设计理念,把计算节点做到无状态。第二个是超大计算 / 存储力,单个实例能够做到千核级别的计算能力,达到 PB 级的存储能力。第三个是弹性,咱们心愿做到秒级扩大,再进一步让这个事件变成主动伸缩的能力。在老本上,咱们会通过 Serverless,包含一些多级的存储,来把整个老本降到极致。另外就是简化用户开发门槛,通过一体化服务,尽量让用户架构变得简略,在一个数据库外面尽量去解决多种场景。

在计算存储解耦过后,这外面其实是有很多问题的,第一个问题就是当计算存储拆散后,之前数据库外部很多 IO 操作会变成一个网络的操作,怎么去解这个货色?大家可能很容易想到,后端拿了一个相似于云硬盘产品,间接在数据库下面一跑就 OK 了。这外面有很大的问题,首先是网络上的放大,有可能你批改一个字段,批改一行,然而会一个 pag 的放大,这个放大效应在 10 倍、20 倍之上,网络放大过后就会影响到实地吞吐能力。第二,这种简略计算存储解耦过后,并没有解决数据库计算层很简单问题,大家都晓得对于 DBA 来说很苦楚的事件就是数据库的刷章,数据库刷章很有可能导致无奈解决。还有一个问题,计算层还是要去解决存储的逻辑,这时是要把计算层的资源额定放到它不应该做的事件下面去。

基于这个,咱们实现了一种 log is database 的计划,咱们不再依照传统的形式去做,而是把一部分数据库计算逻辑下沉到存储层进行实现。简略来说,要去扭转一个字段时,只须要把扭转这个字段事务日志通过这样一个操作传达到后端存储,由后端存储来就近去解决帮日志转化成它最终须要行的数据。这样一个扭转可能极大缩小网络带宽;同时,因为把数据库计算能力下放到存储下面来,计算自身 CPU 资源能够更好地去服务数据库的逻辑解决。

同时另外一点,咱们把日志和存储做了分布式后,在数据库里传统的问题就是怎么去做式 crash recover,咱们通过把之前集中式故障复原的机制变成分布式,整个工夫也会大大缩短。

另外一个能力,做到千核计算力和 PB 存储力。 依靠于上面一个分布式存储系统,而这个分布式存储系统是腾讯,包含腾讯外部业务在下面去运行超过 1B 级规模的存储,通过批改数据库自身的外围逻辑,来把数据进行分布式的打散,实现单个实例能够反对 PB 级存储规模。

可用性上,云数据库要解决一个很重要的问题,因为咱们的规模十分之大,在做版本升级时候,要改革传统形式,去告诉用户,心愿用户去配合,咱们通过 Zero-Downtime Patching 的能力,心愿把这个做到数据库内核外面,让它的降级能够做到秒级。
当咱们做到很好的计算扩大时,又遇到一些挑战,不同用户对数据的一致性要求是不同的,咱们重点实现了包含会话一致性、全局一致性在外面。

云下面有很多中仓尾的用户,这些用户一天可能就拜访几个小时,那么怎么进一步升高这一部分开发者老本呢?咱们通过 Serverless 去解决,通过智能监控,发现这个实例计算资源曾经继续多长时间没有进行任何解决,咱们会把它的计算资源进行开释,在他们应用计算资源的时候,不是传统调配给你一个核,就收一个核的钱,而是通过采集它理论 CPU 使用率,通过它应用了多少来进行计费。要做到这种能力,技术上挑战也是十分之大的,无论是数据库计算层还是存储层,都要通过一系列技术联结能力做到这一点,这是计算下面的优化。

说完计算极致老本之外,咱们在存储上也有一个极致老本,数据库外面并不是所有的数据库它的热度、拜访都是那么高的,很多数据可能随着工夫变动,数据被拜访的频度会升高。针对这个状况,咱们做了一个存储的分层,存储分层除了通常做的热数据、温数据、冷数据之外,在这里有一个不一样的中央,咱们在温数据外面通过了一个新技术,突破了在数据库存储外面通过正本的形式来保障可靠性,能够用更小的数据冗余度、更少的正本提供同样可靠性来满足用户的要求。

同时当初越来越多的用户,特地是一些新型利用,比如说直播带货,它有一些新变动,在生产订单的同时他还须要根据订单状况来及时调整线上的折扣策略,须要对海量订单进行实时数据分析。通过这个咱们提出了叫做 HTAP 一体的解决方案。咱们是怎么做到 HTAP 解决方案呢?次要是四个方面。

第一个,咱们在存储引擎下面做到行列混存,通过列存来减速查问能力。 在优化器下面,咱们把以前面向行的优化器进行优化,让它自适应能去进行剖析场景算法调整。在执行引擎上,把繁多串行的执行引擎调成分布式执行引擎,加大数据查问能力。最初在计算下面做了优化,把多个节点技术联结起来做协同,通过 NVM 拓展内存,相比之前进步了 50 倍的性能。

这个产品在最近的 18 个月外面实现了 24 倍的规模增长,除了咱们本人工程师致力之外,也要感激用户,正是因为用户们的参加,咱们数据库才会有信念做得更好,谢谢大家!

退出移动版