当前位置: 首页 > news >正文

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上, PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲, 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例,强调了数据库的服务化而非服务化数据库的重要性,并展示了 TiDB Serverless 架构的创新之处, 同时探讨了 TiDB Serverless 对于中国用户的价值 。以下为分享实录 。

作为今天上午的最后一个话题,相信大家已经感受到今天我们分享的最核心逻辑,跟 刚才刘奇(PingCAP 创始人兼 CEO)分享 的我们部署一代、研发一代相承接,到我这部分就是未来的一代: 预研一代。

因为今天会场有很多熟悉的老朋友,看到我这个标题肯定会心一笑,我每次在大会上的演讲都是这个题目:The Future of Database。选择这个主题一是我发现每次讲未来的东西都有东西可以讲;另外一点,很多老朋友发现我去年总是不时消失一段时间,怀疑我去闭关修炼了,我也跟大家汇报一下东旭去哪儿了。

Demo:我花了多长时间构建我自己的 OSSInsight Lite

分享之前给大家看看,刘奇的分享里面的这一页,把我 GitHub 个人数据分析的服务截图放上去了,这个小 demo 是我个人的挑战,我能不能完全做到不写代码,不去买服务器,完全用现代化的在线的云上的应用做一个我自己的数据服务。

在这个 demo 里边,我几乎全程只用了鼠标来操作,我想分享的点并不是让大家去学习这些技术,而是想让大家稍微体验一下现代的开发者构建应用的方式已经完全不同——门槛越来越低。

我经常会有一些天马行空的想法,比如我会想如果要给全世界的开发者都提供免费的数据库,这个成本得有多大?以现在的技术肯定支撑不了。那如果要做这么个东西的话,我们可能需要重新去思考数据库本身的一些最基础的东西。

一个人人可用的数据库服务,有怎样的技术架构?

这是一些数据库厂商会说的老生常谈 : 扩展性、稳定性、用户线性的扩缩容、节省成本、多租户、云原生 。

但是刚 才我说的那些新的需求或者面向未来的数据库 , 可能对每一项都会有更高的要求 。比 如你的系统已经具备了一定的扩展性和稳定性,但更重要的是你能不能给 用户一个 稳定的性能的预期 ,我经常说一句话,稳定的慢比不稳定的快其实更好 ,可预测性对系统和底层的架构提出了更高的要求;第二就是现在几乎每个分布式数据库都支持弹性扩容,而更高的要求可能是,在做这些扩缩容的复杂操作的时候,开发者、DBA 都不需要去费 心, 数据库的扩缩容对业务来讲是完全无感的 ,体验非常顺滑;成本层面, 我们再把成本压缩到极 限—— 我能不能,不用的时候就不花钱? 开源软件的分发上、下载不要钱,但是运行软件的服务 器要花钱,现在我们再往前想一步,——数据库、服务器 零成本的起步能不能支持 ;多 租户上,我们过去要去强调互相的隔离,但是如果为了实现大规模的海量的免费的用户、中小型的敏捷的业务 , 不仅要强调隔离,还得强调资源的高效利用和共享 ;云原生是老生常谈,做到 云中立 就是进一步的 目标。

我这边挑一个简单的例子,就从最近发布的多租户能力说起。如果把租户的规模从私有化部署的几十几百个,扩大到十万个、一百万个、一千万个甚至一亿个,平台如何去支撑这么大的租户数量,它需要哪些基础的能力,我们是怎么思考的?第一老生常谈,多租户一定要 隔离 ;第二是 刚才唐刘稍微讲了一下 我们现在在研发的东西:资源管控,我们必须得实现一套很好的机制能够让海量用户更高效地利用和 共享 底层系统的资源,才能达到很低的成本;第三就是 能区分 ,每一个用户在使用的体验上都必须能够感受到自己是在拥有整个数据库的。

之前有人问我 TiDB 支持多租户、多应用这种模式吗,我当时一直都是比较保守,通过几个大版本的迭代,我现在可以负责任的说,TiDB 要去实现现代的多租户,基础的能力都已经满足了。

TiDB Serverless :未来数据库理念的「概念车」

我们回到最开始的话题:如果我们要给全世界的开发者提供数据库该咋做?今天我就给大家说一下背后的概念车,把 TiDB Serverless 引擎盖掀起来大家看一看。

今天无数次讲到了 TiDB 的经典架构,然而如果把 TiDB 这个经典架构搬到云上,想实现“人人可用”这个目标,仅从成本上考虑,PingCAP 就得赔死了。

所以重新设计 TiDB Serverless 的时候,我当时定下了几个规范或者开发的哲学,其中最重要的一 条就是 我们应该做的是数据库的服务化,而不是服务化的数据库 。

传统意义上来说我们要做云数据库,大家第一直观感觉,底下做个云管平台,每个租户部署一套 TiDB,把自动化的管控做完,这不就可以了吗?但是 TiDB Serverless 在这个方面,我们选择重新去思考一些非常基础的东西,刚才做云上运维 TiDB 的思路是行不通的,如果要做这么大规模这么新的东西的话,而且应该当做一个完整的服务去设计,而不是把它当做一个数据库去设计。

八年前一开始设计 TiDB 的时候,我看到的东西就是一台台具体的服务器,我看到的是 CPU、内存、磁盘,基于这些东西我们构造了 TiDB。但是如果我们现在在云上构建 Serverless 这个系统,拿到的是一张白纸,我今天重新再开始去设计这个系统的时候,我看到的已经不是 CPU、磁盘机器这样的东西了,我看到的东西是云上给我的服务,EC2、虚拟机,我看到的是对象存储,我甚至可以看到云厂商的 RDS,我能不能拿 RDS 作为系统的一部分,所以在新的云原生的工程哲学里边必须有一条能够充分利用云的基础设施,这也是我们能把成本推到如此极限的一个核心的思想。

掀开 TiDB Serverless 的引擎盖,大概有三个新的东西,第一个换了新的云原生的引擎 CSE(Cloud-native Storage Engine),非常朴素的名字。第二是终于在 TiDB 引入了逻辑上的 Key Space,第三就是 Resource Control 以及 RU 的概念,从上到下做全局流控。

这是 CSE 整体的架构,核心就一点,它是一个极致的成本考虑下,极致的多租户背景下的新一代云上 OLTP 存储引擎。本质来说即使在之前的存储层,TiKV 这一层也开始做了存算分离,这就带来一个好处,比如有一些用户的数据是冷数据,因为我们在云上发现大多数的用户的业务和数据满足 82 法则,20%的热数据,80%可能是冷数据,但这些冷数据你在它不用的时候就可以按照流量的需求,直接 compact 到 AWS S3 这样云上更便宜的存储上面。AWS S3 存储的价格每 TB 每个月大概 20 美金,喝两杯咖啡就有一个月一个 TB 的存储空间了,这还是没有任何优惠的情况,实际上还可以更便宜。

所以基于新的存储引擎,我们可以发现本身 TiDB 之上所有的组件一下子就变成了无状态的。当一个组件变成无状态了以后,怎么去降低成本?池化。

图中 TiDB 右边现在已经把所有的包括计算节点存储节点全都变成了池化的设计,最上面加入了一层 Gateway,用户直接连接到 Gateway,Gateway 负责对现在用户的请求从资源池中捞出一个活跃的节点,它不用的时候连接断开再放回去。

大家看这个图尤其是做系统架构多年的朋友会有个感觉,这个东西感觉不像一个数据库,反而像大型互联网公司后台的服务——有这个感觉就对了,因为我们在设计这个系统的时候就不是把它当做一个数据库在设计,而是把它当做一个真正的云服务在设计,所以才能达到极致的性能和成本的压缩。

TiKV 是 TiDB 的存储引擎,所有的数据都是通过 key-value 来编码的,Key Space 本质上,就是在编码前面加上一个用户 ID 的前缀,将 tenant ID 作为 group keys 的前缀。

这张图解释了零成本起步,业务没有流量的时候就不收钱,本质上还是依靠池化来实现的。刚才我提到用户的连接都是连接到一层可以水平扩展的 Cluster Gateway 上,Gateway 来控制计算节点是否启用。如果这个客户的数据特别冷,十天半个月都不访问一下,这个数据完全存储在对象存储上,在对象存储上的成本是极其低的,在用户请求的时候再快速加载回来。这样一个架构保证了 TiDB Serverless 基础设施的成本会被均摊到所有用户身上,用户越多,数据量越大的时候,成本也就会越来越低。

我最后分享一个小小的例子。我们公司内部也有自己用自己产品的习惯,这是我们自己的一些服务 demo,全部用 TiDB 自己构建。我们做了一个很有趣的工具叫 OSS Insight,把 GitHub 上的数据抓下来做分析的一个在线应用,这个在以前传统的 TiDB Cloud,也就是经典 TiDB 云上部署架构下,一个月的成本在一万美金左右,上图就是我们付给自己的账单。

同样这个业务今天已经接近 12 个 TB 了,这样一个巨型的数据库前一段把它迁移到 Serverless 以后,总体成本下降了 70%,而业务在使用层面上也完全没有任何的感知。

这里有一个很有趣的真实例子,刚才我们看到整体的 TiDB Serverless 的设计是面向弹性去做设计的,但是这种东西总是希望能有一个实际的例子去验证一下这东西是不是真的在现实生活中比较好用,我们也真的有了这样的机会。今年 4 月初 OSS Insight 成功登上了 HackerNews 的首页,流量一下暴增到原来的 7 倍,这个事情还发生在中国时间的深夜,我们的工程师都还在睡梦中,TiDB Serverless 自动发现了流量的突变把集群扩容,承担起 7 倍流量的业务负载以后,又自动缩回来,前端业务的各项指标都还是非常稳定的,也没有额外的收费。这是一个特别好的例子,我们也特别欣慰。

我今天分享了一些我们未来对数据库的看法,关于 TiDB Serverless,我还有三个点想强调。第一,虽然看到现在它是一个在纯 云端的服务,但是 我们有计划将更先进的架构服务于中国的客户 ,甚至你可以 未来在私有化环境里面部署 TiDB 的 Serverless。因为我们设计这个系统内核的时候非常仔细的考虑了这个系统本身的可移植 性, 刚才这些东西未来大家会在自己的数据中心或者自己的云上去使用 ;第二,我 个人认为这也是代表着数据库最前沿的发展的方向, 就是 云原生加上极致的弹性 ,我们在 思考数据库本身的一些架 构或者最底层的想法的变革都会遵循这个方向;第三点我个人觉得 Serverless 是我们很好的练兵场,包括中国企业级客户我们预研出来的版本我们新的一些特性,最早会在 Serverless 上应用 ,比如 刚才我说的 Key Space 这个功能,目前已经在 Serverless Tier 上实现了上万个用户的部署,经过上万个集群的打磨,很快也会在企业版和云上托管版本里边落地。

最后我想小小的总结一下今天我的分享以及我的一些感受。我也代表着 PingCAP,纵使大的经济环境充满各种不确定性,我们永远相信技术创新能够真正给业务带来价值,我也相信技术真正能够改变世界,所以我们相信未来永远是一个更好的世界。

相关文章:

黄东旭:The Future of Database,掀开 TiDB Serverless 的引擎盖

在 PingCAP 用户峰会 2023 上, PingCAP 联合创始人兼 CTO 黄东旭 分享了“The Future of Database”为主题的演讲, 介绍了 TiDB Serverless 作为未来一代数据库的核心设计理念。黄东旭 通过分享个人经历和示例,强调了数据库的服务化而非服务化…...

Linux环境搭建(XShell+云服务器)

好久不见啊,放假也有一周左右了,简单休息了下(就是玩了几天~~),最近也是在学习Linux,现在正在初步的学习阶段,本篇将会简单的介绍一下Linux操作系统和介绍Linux环境的安装与配置,来帮…...

-bash: /bin/rm: Argument list too long

有套数据库环境,.aud文件太多导致/u01分区使用率过高,rm清理时发现报错如下 [rootdb1 audit]# rm -rf ASM1_ora_*202*.aud -bash: /bin/rm: Argument list too long [rootdb1 audit]# rm -rf ASM1_ora_*20200*.aud -bash: /bin/rm: Argument list too…...

5个步骤完成Linux 搭建Jdk1.8环境

1:首先,在Linux系统中创建一个目录,用于存放JDK文件。可以选择在/opt目录下创建一个新的文件夹,例如/opt/jdk。 sudo mkdir /opt/jdk 2:将下载的jdk-8u381-linux-x64.tar.gz文件复制到新创建的目录中。 sudo cp jdk…...

【JAVASE】运算符

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 运算符 1. 什么是运算符2. 算术运算符3.…...

Emacs之改造搜索文件fd-dired(基于fd命令)(一百二十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

字典序排数(力扣)思维 JAVA

给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1: 输入:n 13 输出:[1,10,11,12,13,2,3,4,5,6,7,8,9] 示例 2: 输入:n 2 输…...

NLP 中的pad/padding操作代码分析

今天分析一下NLP中的pad操作代码: 该方法的作用是将输入的序列列表seqs进行填充操作,使其具有相同的长度,以便进行批处理。填充使用指定的pad_token进行,并生成一个对应的mask标志列表,用于标记哪些部分是填充内容&am…...

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…...

Vue 本地应用 图片切换 v-show v-bind实践

点击切换图片的本质,其实修改的是img标签的src属性。 图片的地址有很多个,在js当中通过数组来保存多个数据,数组的取值结合索引,根据索引可以来判断是否是第一张还是最后一张。 图片的变化本质是src属性被修改了,属性…...

AI生成-- autocomplete 模糊搜索

el-autocomplete可以通过设置属性来实现模糊搜索功能。 首先需要设置一个搜索函数&#xff0c;即在输入框输入内容时会调用的函数&#xff0c;用来返回所有符合条件的结果。这个函数需要接收两个参数&#xff1a;输入框的值和一个回调函数。 <el-autocompletev-model"…...

怎么用手机做文字二维码?文本内容在线生成二维码技巧

手机端怎么将文字制作二维码呢&#xff1f;现在二维码是日常生活中经常会使用的一种工具&#xff0c;能够将不同的内容生成二维码使用&#xff0c;比如文本二维码就是常用的一种类型。那么当我们在没有电脑的情况下时&#xff0c;如何通过手机来快速生成二维码&#xff08;二维…...

【Ap模块EM】08-怎么让Execution Management成为第一个执行的进程?

前面的文章,我们讲述了ubuntu系统上电执行的流程,那么在Ap AutoSAR中Execution Management怎么成为第一个被执行的进程呢额?就是让它取代传统的init进程,成为ubuntu系统第一个执行的进程? 我们可以通过符号链接 symbolic link去实现,这个类似于windows系统中的某个exe文件…...

使用vscode+platformio搭建arduino开发环境

存在的问题&#xff1a; Arduino编译时会将所有的C文件都编译一遍造成编译很慢&#xff0c;一个简单的工程稍加修改有可能都需要三四分钟才能编译完成&#xff0c;同时arduino也不支持代码跳转查看功能&#xff0c;不方便代码查看。 解决方法&#xff1a; 使用vscodeplatfor…...

java后端接口实现302跳转

正常来说&#xff0c;接口返回String是"redirect:"url或者“r:”url就能实现前端接收到返回后自动302.但是我在自己的一个项目中这么写了之后发现返回的是纯字符串&#xff0c;很奇怪。 最后发现&#xff0c;如果你的controller层有RestController注解&#xff0c;那…...

分布式理论:CAP理论 BASE理论

文章目录 1. CAP定理1.1 一致性1.2 可用性1.3 分区容错1.4 矛盾 2. BASE理论3. 解决分布式事务的思路4. 扩展 解决分布式事务问题&#xff0c;需要一些分布式系统的基础知识作为理论指导。 1. CAP定理 Consistency(一致性): 用户访问分布式系统中的任意节点&#xff0c;得到的…...

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…...

5-Ngnix配置基于用户访问控制和IP的虚拟主机

目录 5.1.Ngnix配置基于用户访问控制的多虚拟主机 5.1.1.前提条件 5.1.2.Ngnix配置基于用户访问控制的多虚拟主机 5.2.Ngnix配置基于IP的虚拟主机 5.3.Ngnix配置基于IP的多虚拟主机 Nginx配置文件在/usr/local/nginx/conf下&#xff0c;文件名为nginx.conf 5.1.Ngnix配置…...

springboot jar分离部署

springboot jar分离部署 注意&#xff1a;spring boot web项目别使用jsp页面&#xff0c;可以使用模板代替&#xff0c;jsp打包时访问页面会报404错误。 1.具体配置如下&#xff1a; <build><plugins><!--更换maven的jar打包插件先前使用的是spring-boot-mav…...

Opencv 细节补充

1.分辨率的解释 •像素&#xff1a;像素是分辨率的单位。像素是构成位图图像最基本的单元&#xff0c;每个像素都有自己的颜色。 •分辨率&#xff08;解析度&#xff09;&#xff1a; a) 图像分辨率就是单位英寸内的像素点数。单位为PPI(Pixels Per Inch) b) PPI表示的是每英…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...