唐刘:当 SaaS 爱上 TiDB(一)- 行业挑战与 TiDB 的应对之道

导读

在 TiDB 8.1 发布后,TiDB 展现了强大的支持 SaaS 业务的能力,成为 SaaS 业务数据库的优先选择之一。

本文为“当 SaaS 爱上 TiDB”系列文章的第一篇,系列文章将从技术原理真实用户体验两个角度深入探讨 TiDB 在 SaaS 业务中的表现,包括如何应对可扩展性、多租户管理、运维便利性、高可靠性等挑战,后续文章将分别从资源隔离、弹性扩展、方便运维、业务架构等角度展开。通过这些内容,您将了解为何 TiDB 是高成长 SaaS 业务的最佳选择。

本文作者:唐刘,PingCAP 研发副总裁。

当TiDB 8.1 发布之后,我非常相信,TiDB 已经具备了支持客户 SaaS 业务的能力,甚至可以做为客户 SaaS 业务数据库的最优先选择之一,为什么我会这么笃定,主要信心的来源就是我已经看到了非常多的客户,来自不同的行业(譬如游戏,电商,AI,互联网等等),基于 TiDB 构建他们的 SaaS 业务的成功案例。

TiDBSAAS

当然,成功并不是一蹴而就的,TiDB 也并不是从一开始就能支持好客户的 SaaS 的业务,所以后面,我会写一系列的文章,来聊聊 TiDB 是如何在 SaaS 业务场景下,如何一步一步赢得客户的『信任之旅』,以及说明下为什么 『TiDB 会成为你高成长 SaaS 业务的第一选择』。

一个好的 SaaS 业务给数据库带来哪些挑战?

什么是 SaaS,网上已经有太多的解释,这里简单的说明一下,SaaS 全称为软件即服务,新一代 SaaS 目前都是基于云计算的软件服务,通过互联网提供软件应用。用户无需在本地计算机或服务器上安装和维护软件,而是通过网络浏览器进行访问。SaaS 业务由服务提供商托管和管理,用户可以从任何有互联网接入的设备访问,并且通常采用订阅制,使其对企业和个人来说既方便又具有成本效益。从某一方面来说,TiDB Cloud 也算是一种 SaaS,后面如果有机会,我也可以写写我们是如何构建 TiDB Cloud 这个 SaaS 业务的。

SaaS 业务的挑战非常的大,对于数据库的要求尤其的高。通常一个数据库要支持好 SaaS 业务,会面临如下的一些挑战:

可扩展性 - SaaS 业务一个非常有意思的点就在于你的业务的租户数量可能会从一点点突然就涨到了成千上万,甚至百万以上的级别,而单个租户数据也可能从 GB 级别疯涨到百 TB 级别。在整个业务增长,数据膨胀的过程中,数据库的可扩展性尤其重要:客户总不可能容忍因为数据库没法承载业务增长导致错过成长红利。

多租户的管理 - 如何在一个数据库里面管理多个租户,既要确保这些租户之间的数据隔离以及安全,又要保证租户之间不能相互影响,是一件非常困难的事情。

方便运维 - SaaS 业务另一个好玩的点就在于业务的快速变化,我们如何对数据库进行快速的变更以满足不断变化的业务需求,还有如何快速的对不同的租户进行数据备份,性能监控等等,在运维上面都是挑战。

高可靠性和高可用性 - SaaS 业务的连续性非常重要,如果 SaaS 业务出现宕机,影响的可是成千上万的租户,这个损失客户是承受不起的。数据库需要稳定高可靠的长时间运行,即使出现最极端的情况,也要保证能快速的帮助客户恢复数据。

还有:高性能、数据安全和合规、成本等等。

可以看到,要支持好一个 SaaS 业务,对数据库的核心能力要求非常的高。下面我就来大概的介绍下 TiDB 是如何应对上面的一些挑战的。

可扩展性-SaaS业务增长的基石

如果你问我,要支持好 SaaS 业务,对于数据库来说,最重要的特性是什么?我会毫不犹豫的回答 - 『可扩展性』。一个不支持可扩展性的数据库是没法支持好客户的 SaaS 业务增长的。

说起可扩展性,我猜测,大部分的读者立刻能想到的就是数据规模的可扩展性,这个也是 SaaS 业务一个通用需求。而这方面,TiDB 具备天生的优势,因为 TiDB 从一开始就具备水平扩展能力,随着数据规模的增大,客户唯一需要做的一件事情就是不断地增加存储节点,TiDB 会自动的将数据进行切分打散到不同的存储节点,并且使用多副本的方式保证数据的高可用性。这块网上因为有太多的文章,就不详细的说明了。

**不过,数据规模仅仅只是可扩展性一个方面的挑战,这里说另外一个例子,就是 schema 的可扩展性挑战。**我们的一个客户,他在设计自己的 SaaS 业务的时候,让所有租户共用一套 schema 模板,也就是实际创建一个租户的时候,一个租户一个数据库,每个数据库里面有十几张表,所以不同租户除开数据库名字不一样,里面的表结构是一模一样的。最开始这个客户只有几千个租户,不过很短时间,租户数量直接直接涨到了 10 万个,这就意味着他需要在 TiDB 里面存至少 100 万级别以上的 tables,简化一点,我们就说 1M tables,我不确定有多少数据库有信心说能很好的支持好 1M tables 这个场景。坦白的说,当前我们只能说能承接 1M tables 这个场景,还有很多挑战需要攻坚,关于这块的,我后面也会有文章详细的说明。

除开上面两个例子,可扩展性还包括很多方面,这个我们会在后面的文章中具体解析。

下图是一个客户实际的例子,他使用 TiDB Cloud 提供的自动扩缩容功能,在一小时之内直接新增了 200 个计算节点,承载住了那一段时间的业务流量,然后在业务稳定之后,又下线了 50 个计算节点,节省了成本。

Nodes

方便运维-为SaaS业务敏捷性兜底

SaaS 业务以灵活多变著称,灵活多变就意味着业务逻辑调整的频繁,甚至会对数据库进行变更,而变更,恰恰是最容易引入故障的。

第一个最直接挑战就是 Schema 的变更,研发不可能一开始就规划好 Schema 设计,所以就很可能出现为了业务对 schema 进行变更的情况。可能有些读者会说,不就是做 DDL 操作吗,对数据库不就是小菜一碟?不过假设现在一个客户在数据库里面存了 10 万个租户,一次业务变更,可能要进行 10 万次 DDL 操作,中间的任何失败,以及执行效率变慢,都会影响到实际的业务变更,拖慢业务的迭代。

所以对于数据库来说,在 DDL 这块,需要具备如下关键核心能力:

  1. Online DDL 能力,确保做 DDL 的时候不会影响在线业务。
  2. 失败重试管理,譬如能随时从中途某一个阶段恢复继续执行。
  3. 高效,快速,性能好,譬如如果要给一个 100TB 的表添加索引,需要小时级别就能搞定,甚至越快越好。

另一个挑战就是依据对业务的规划,对数据库进行扩缩容处理。譬如下一周如果有一个重要的活动,譬如最近的欧洲杯,或者游戏新功能上线,客户需要提前做好应对。这一块一直是 TiDB 的优势,上面也说到了,这里就不提了。

还有一个非常大的变更挑战,这个算一个低频的操作,不过真要做的时候,大家的头一定是非常大的 - 这个就是数据库版本的升级。SaaS 业务在这方面,挑战尤其突出:如果只能停机升级,这个对于客户来说,就会面对成千上万个租户的业务停机,对客户来说这个损失不可想象。另外,如果因为代码 bug(无论是 SaaS 业务自身,还是数据库自身),可能会导致一部分租户能正常工作,一部分租户出现问题,对于特定租户的数据修复,也是一个非常大的难题。

TiDB 从一开始就支持了 online upgrade,能让客户不停机,直接在线滚动升级,不影响客户的业务连续性。在 TiDB Cloud 上面,我们也提供了非常充分的升级解决方案,更进一步保证升级的成功。当然 TiDB 也还有一些挑战需要更好的解决,这个后面有机会再说。

下图是另一个客户跑的一个 SaaS 业务(某客户给我们提供的数据,做了脱敏处理)。他在 30 分钟时间内进行了 300 多次 DDL 变更,这里我们仅仅列出了 create table,还并没有列 drop,alter 的统计。实际上这个客户的 DDL 频繁一直如此频繁,而如此频繁的进行 DDL 处理,我只能猜测,客户实际已经是基于 TiDB Online DDL 特性,构建他自己的 SaaS 业务逻辑了。

create table

资源管控-助力精细化资源管理

多租户的支持是 SaaS 业务里面一个很重要的能力,对于客户来说,在数据库里面,一个很重要的难题就是我需要给这一个租户设置多少的资源,才能确保一方面这个租户的业务能正常运行,而另一方面则是不能影响到其它的租户。

这里其实就涉及到数据库里面资源隔离,或者资源管控的支持。在非常多的数据库里面,通过使用 cgroup 或者其他方式,提供了按照 CPU/Mem 等物理资源拆抽象的隔离方案,譬如我给租户 1 设置只能使用 8c16g 的资源,给租户 2 设置只能使用 16c32g 的资源,这种资源设置的方案非常的直观,客户也容易理解,为了便于说明,我们后面叫这个方案为 resource group(RG)。

**相比于单纯的 RG,TiDB 提供了另一种抽象,我们叫做 request unit(RU)。**为什么我们要提供 RU 的抽象,一个很重要的原因就是我们希望客户能更加细粒度的控制自己的资源,譬如对一条特定的 SQL 进行细粒度的控制。一个例子,在 RG 这个方案里面,我给一个租户设置了 16c32g 的资源,不过这个租户完全跑满了,那么到底是哪几条 SQL 占用了最多的资源,是不是需要控制这些 SQL 的资源开销?另外如果我发现一个租户一直没跑满过资源,我是不是要重新设置下它的 RG,不过万一这个租户在某一天突然又需要更多的资源,我如何来调整?这些都是一些比较有意思的挑战。

而使用 RU 的方式,是容易就能达到精细化控制的效果,帮助客户能更好的看清楚自己业务每一条 SQL 的资源开销,针对性的进行成本优化。如果你要对你的租户进行收费,RU 也可以提供更加细粒度的账单,方便你更好的设计你的定价模型。当然,RU 这个方案也并不是完美的。关于 RG 和 RU 的优劣,后面有时间,可以再来讨论。

因为现在的数据库几乎都能支持 HTAP 了,所以如何在一个数据库里面很好的处理 TP 还有 AP 的业务,也是在资源管控上面的另一个挑战。不少的数据库,在自己的存储层支持了行列混存的方案,而 TiDB 则是完全的将行列两种数据分别放到了不同的存储节点上面,从物理上面进行了隔离。

为什么我们要选择行列分离的存储方案,一个很朴素的偏见就是我们认为 AP 的查询都是会占用比较多的资源的,无论是 IO 还是 CPU,在物理层面上面 TP 和 AP 分开,会显著的减少 AP 对于 TP 的影响,做到更好的,更彻底的隔离。行列混存方案在资源充分的情况下工作的很不错,不过当资源吃紧的时候,我们并不相信这样的方案能很好的保证 AP 不会干扰 TP。而 TP,恰恰是客户跑得最重要的业务。关于这两个方案的优劣对比,后面有时间,也可以再来讨论。

下图是一个客户在 TiDB Cloud 使用 RU 的效果(客户自己提供的监控数据),可以明显的看到,在设置好 RU 之后,租户之间的影响降低了,整体的 TP 业务更加的稳定。

latency spikes

写在最后

上面仅仅只是列举了一些 TiDB 如何支持好客户的 SaaS 业务的例子,可以看到,我们实实在在的助力了客户 SaaS 业务的增长,帮助这些客户成功,能赢得这些客户的信任,是我们的荣幸。

当然,离真正的让任何的 SaaS 业务在 TiDB 上面都能完美顺畅的直接运行,我们还有很长的一段路要走。在后面的系列文章中,我会详细的介绍 TiDB 在 SaaS 业务场景中一系列具体的挑战(譬如 1M tables,资管隔离等) 以及我们是如何应对的。我也会介绍一些客户是如何基于 TiDB 构建他们自己 SaaS 业务的最佳实践。

在产品方向上面,SaaS 业务的支持也会做为今年以及未来几年 TiDB 重点的发展方向,所以如果你的业务是 SaaS 业务,需要选择一款数据库,不要犹豫,请从现在开始使用 TiDB。即使当前可能在一些方面 TiDB 会有一些问题,我们也会跟你一起努力,共同克服难关,在助力你 SaaS 业务增长的同时,也一起将 TiDB 打造成全世界上『高成长 SaaS 业务的首选数据库』。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/793910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

ISO/OIS的七层模型②

OSI模型是一个分层的模型&#xff0c;每一个部分称为一层&#xff0c;每一层扮演固定的角色&#xff0c;互不干扰。OSI有7层&#xff0c;从上到下分别是&#xff1a; 一&#xff0c;每层功能 7.应用层&#xff08;Application layer &#xff09;&#xff1a;应用层功能&#x…

计算机基础 进制转化

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

用Apipost压力测试接口

用Apipost压力测试接口 1.点击自动化测试 2.选择要测试的接口 3.如果没有接口&#xff0c;就先在api调试中添加要测试的接口 4.根据自己的需求设置相应的参数&#xff0c;这里我压测10次 5.这样就可以压测接口了&#xff0c;非常nice

c++ 建造者模式

文章目录 建造者模式为什么使用建造者模式建造者模式实现步骤实现示例建造者模式优缺点 建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是面向对象设计模式中的一种&#xff0c;主要用于创建复杂对象。这种模式将对象的构建过程与其表示分离&#xff0c;允许用…

maven6——生命周期与插件

生命周期 生命周期&#xff1a;指运行的阶段&#xff08;比如几岁&#xff09; maven有三个生命周期如下&#xff0c;每个生命周期大概做的事情如下&#xff1a; 注意&#xff1a;每次执行某个&#xff0c;他会把上面的都执行一遍 插件&#xff1a; 每一个插件&#xf…

【JavaScript 报错】未捕获的加载错误:Uncaught LoadError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 资源路径错误2. 资源不存在3. 网络问题 二、解决方案1. 检查资源路径2. 确保资源存在3. 处理网络问题 三、实例讲解四、总结 在JavaScript应用程序中&#xff0c;未捕获的加载错误&#xff08;Uncaught …

Echarts实现github提交记录图

最近改个人博客&#xff0c;看了github的提交记录&#xff0c;是真觉得好看。可以移植到自己的博客上做文章统计 效果如下 代码如下 <!DOCTYPE html> <html lang"en" style"height: 100%"><head><meta charset"utf-8"> …

vue3项目中浏览器打开本地文档或者下载本地应用的方法(2024-07-11)

在public文件夹下面加入预览的文件【操作说明文档】。 此文件夹不会压缩并且路径不变&#xff0c;所以是最佳的存放文件的位置。 代码&#xff1a; <template><n-icon title"操作文档" style"cursor: pointer;margin-right: 10px;" size"2…

docker-2

27.构建python应用镜像-dockerfile实践项目 1.基于官方的镜像&#xff0c;构建python代码运行环境 dockerfile 2.运行镜像&#xff0c;开启一个读写的容器空间&#xff08;定制操作&#xff0c;将代码丢进去&#xff0c;运行调试&#xff09; 3.提交这个变化的容器层数据&#…

Facebook的AI革命:人工智能如何改变社交体验

随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;作为一项革命性的技术&#xff0c;正在深刻影响着社交媒体的发展和用户体验。作为全球最大的社交平台之一&#xff0c;Facebook积极探索并应用AI技术&#xff0c;以提升用户的社交互动、内容分享和个性化体验…

插片式远程 I/O模块:热电阻温度采集模块与PLC配置案例

XD系列成套系统主要由耦合器、各种功能I/O模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器&#xff0c;例如Profinet、EtherCAT、Ethernet/IP、Cclink IE以及modbus/TCP等。I/O 模块可分为多通道数字量输入模块、数字量输出模块、模拟量输入模块、模拟量输出模…

Python实战:拥有设闹钟功能的可视化动态闹钟的实现

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

昇思25天学习打卡营第11天 | FCN图像语义分割

昇思25天学习打卡营第11天 | FCN图像语义分割 文章目录 昇思25天学习打卡营第11天 | FCN图像语义分割FCN模型数据处理下载数据集创建训练集可视化训练集 网络构建网络结构张量操作 训练准备导入VGG-16部分预训练权重&#xff1a;损失函数模型评估指标 模型训练模型评估模型推理…

「C++系列」一篇文章说透【存储类】

文章目录 一、C 存储类1. 类的定义2. 对象的创建3. 对象在内存中的布局4. 对象的存储位置 二、auto 存储类1. auto的基本用法2. auto与存储类的关系1) 自动存储类&#xff08;最常见的&#xff09;2) 静态存储类3) 动态存储类&#xff08;通过new&#xff09; 三、register 存储…

SSRF漏洞深入利用与防御方案绕过技巧

文章目录 前言SSRF基础利用1.1 http://内网资源访问1.2 file:///读取内网文件1.3 dict://探测内网端口 SSRF进阶利用2.1 Gopher协议Post请求2.2 Gopher协议文件上传2.3 GopherRedis->RCE2.4 JavaWeb中的适用性&#xff1f; SSRF防御绕过3.1 Url黑名单检测的绕过3.2 Url白名单…

【PHP安装内置扩展】

PHP安装内置扩展 1、首先查看php源码以及查询是否有需要的扩展;本次以zlib扩展为例子 2、进入需要安装的扩展目录,执行命令 cd zlib 执行 make clean 清掉之前的安装的残留文件; 不需要的话直接略过,新安装也略过3、运行phpize,执行/usr/local/php/bin/phpize 注意这个路径一…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- 初识GPIO --(六)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

子任务:IT运维的精细化管理之道

在当今的企业运营中&#xff0c;信息技术已成为支撑业务发展的核心力量。根据Gartner的报告&#xff0c;IT服务管理&#xff08;ITSM&#xff09;的有效实施可以显著提升企业的运营效率&#xff0c;降低成本高达15%&#xff0c;同时提高服务交付速度和质量。随着业务的复杂性和…

7个外贸网站模板

Nebula独立站wordpress主题 Nebula奈卜尤拉wordpress主题模板&#xff0c;适合搭建外贸独立站使用的wordpress主题。 https://www.jianzhanpress.com/?p7084 Starling师大林WordPress独立站模板 蓝色橙色风格的WordPress独立站模板&#xff0c;适合做对外贸易的外贸公司搭建…