我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
作者: shiyuhang0 原文来源: https://tidb.net/blog/fbedeea4
背景
Serverless 数据库是云原生时代的产物,它提供全托管,按需付费,自动弹性的云数据库服务,让客户免于繁重的数据库运维工作。关于 Serverless 数据库原理文章比较少,本文将介绍我们是如何依托云厂商提供 TiDB Cloud Serverless 服务的。如果觉得喜欢,可以 点击链接 试用一下,试试又不要钱:)
我们要做什么
我们做的是一款 Serverless 数据库服务。
Serverless 是云原生架构下的一种新兴模式,关于 Serverless 网上有很多定义,大家可以自行搜索。Serverless 数据库简单来说,就是一款开箱即用,无需部署运维的数据库。国外 Serverless 数据库产品起步较早,也比较成熟,比如 PlanetScale, Neon, Cockroachdb, AWS aurora。
那我们实现 Serverless 数据库,是在实现什么东西呢?自动弹性,多租户,高可用,备份恢复。但其中最重要我觉得还是成本。成本是支撑这个模式走下去的基石。在成本上,我们经历了从一开始的上百美金一个集群,到现在的几美金一个集群。可以说成本的降低让 Serverless 模式成为了可能。
本文从成本的角度出发,来看我们是如何实现 TiDB Cloud Serverless 的。
基于对象存储的数据底座
在云上,相比于昂贵的块存储,对象存储便宜的多。
我们的存储层 TiKV 针对 AWS S3 做了适配,以共享存储的方式提供给租户。但 S3 的访问延迟相比于本地盘高了不少,为了解决这个问题,我们将高速本地盘作为缓存,用户读写实际会基于作为缓存的本地盘。TiKV 启动时会从 S3 拉取全量的数据到本地盘作为缓存。最近,我们正在开发冷数据存储的功能,该部分数据会仅在使用时才从 S3 拉取,并收取更少的费用。
TiKV 针对 AWS S3 的适配说起来简单,实际是最复杂的部分,这部分也是和开源 TiKV 区别最大的地方。使用 S3 作为共享存储还带来一些其他好处:比如海量数据存储,极高的可用性,秒级的备份能力,快速的 region 迁移等等。
计算资源池化
对于一款 Serverless 数据库来说,不仅要做到流量高峰时的自动扩容,也要做到流量低谷时的缩容,甚至要做到无流量时缩容到0,即按需付费能力。而对于数据库来说,低延迟是必须的,也就是说我们既要缩容到0,又要保证快速的冷启动。因此我们不能在客户请求时才拉起计算资源。
对此,我们将计算资源进行了池化,形成了一个 TiDB Pod 池。该池子由一个内部组件进行管理,保证池中空闲 Pod 数量一直处于限定的范围内,其空闲数实际反应了 TiDB Cloud Serverless 快速应对突发流量的能力。池内所有的 TiDB Pod 会处于 standby 模式,当请求来临时即可针对对应租户激活。整个过程是极快的,就犹如你始终占有该计算资源。
无状态的计算资源池,也使得我们可以使用 Spot Instance 节约成本。
Spot Instance 是云厂商提供的一种抢占式实例,相比于按量实例节点可以节省至多 90% 的成本,但其缺点是随时可能会被云厂商回收。计算池中的 TiDB Pod 就使用了 Spot Instance 实例,为了防止 Spot Instance 被回收,我们还有一个监控的机制。当监控到 Spot Instance 实例不足,会提前购买 on demand 实例防止 TiDB Cloud Serverless 的计算能力跟不上 。
统一网关层
在很早期,我们没有统一的网关层,这导致每一个数据库集群都需要一个 LB。我们目前运行了上万的集群,如果每个都有一个 LB ,那就会带来巨大的成本。
因此,我们有一个 TCP 网关层,负责统一入口,只需要一个四层 LB。该网关层主要负责 MySQL 连接协议的处理,在建立连接之后,网关层作为客户端与 TiDB 之前的桥梁——透传数据的传输。
在网关层,我们主要解决的一个问题是如何区分租户。在 MySQL 协议中,能够传输额外租户数据的地方不多:
-
Connection attributes:许多 MySQL client 不支持该特性
-
数据库名:少许 MySQL client 不支持 (PHP)
-
用户名
最终我们选择了使用用户名承载租户信息,这也是当你使用 TiDB Cloud Serverless 时,用户名前有个前缀的原因。
总结
在成本上,我们还做了很多。比如 Copy on write 的备份恢复机制, Txn File 降低大写入成本,Remote compaction 充分利用资源等等。相比于上文,这些内容更细节,这里就不一一展开了。上述内容也不一定完全准确,有问题麻烦大家多多指正~
总而言之,正是因为这些成本上的优化,才有了现在 TiDB Cloud Serverless 具备竞争力的价格。以及为所有用户提供 5 个免费集群的能力。对的,我们为每个用户提供总计 25G 的免费存储以及可观的计算额度,快试试创建一个属于自己的 Serverless 数据库吧。 https://tidbcloud.com/
询问AI 相关文章:
我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
作者: shiyuhang0 原文来源: https://tidb.net/blog/fbedeea4 背景 Serverless 数据库是云原生时代的产物,它提供全托管,按需付费,自动弹性的云数据库服务,让客户免于繁重的数据库运维工作。关于 Serve…...
PCL算法汇总
参考 【2024最新版】PCL点云处理算法汇总(C长期更新版)_pcl点云聚类c-CSDN博客...
sql注入之二次注入(sqlilabs-less24)
二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…...
Android compose 软键盘 遮挡对话框中TextField 输入框
在AlertDialog对话框中含有TextField输入框时,弹出软件盘会遮挡输入框 解决1: 在AndroidManifest.xml的 MainActivity中添加如下 android:windowSoftInputMode"adjustResize" 然后AlertDialog 中的modify. modify.windowInsetsP…...
spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索
一、背景 es索引有一个文档CourseIndex,下面是示意: creatorIdgradesubjectnameno1002270英语听力课程一N00232DS91004380数学口算课程N00209DK71003480物理竞赛课程N00642XS21002280英语听力课程二N00432WS31002290英语听力课程三N002312DP5 在搜索的时候&#…...
【项目开发】分析六种常用软件架构
未经许可,不得转载。 文章目录 软件架构核心内容设计原则分层架构常见层次划分优缺点应用场景事件驱动架构核心组件优缺点应用场景微核架构核心概念优缺点应用场景微服务架构核心组件设计与实施优缺点应用场景云架构云架构模式优缺点应用场景软件架构 软件架构是指一个软件系…...
算法和程序的区别
算法(Algorithm)和程序(Program)是计算机科学中两个密切相关但不同的概念。让我们通过以下几个方面来比较它们: ### 1. 设计 vs 实现 - **算法设计(Algorithm Design)**: - **定…...
用指针遍历数组
#include<stdio.h> int main() {//定义一个二维数组int arr[3][4] {{1,2,3,4},{2,3,4,5},{3,4,5,6},};//获取二维数组的指针int (*p)[4] arr;//二维数组里存的是一维数组int[4]for (int i 0; i < 3; i){//遍历一维数组for (int j 0; j <4; j){printf("%d &…...
《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…...
使用pip安装esp32的擦除、写入固件的esptool库
esptool库可以为esp32的开发板烧录新的固件,但是如果为了烧录固件就要装esp-idf软件包,甚至需要用make编译安装很久,实在太费时费力了! 好消息就是,esp提供了python的esptool库,这样只要使用pip安装上这个…...
传奇996_23——杀怪掉落,自动捡取,捡取动画
一、杀怪掉落 前置: 添加地图地图刷怪怪物掉落(术语叫爆率,掉落叫爆率,而且文档上叫爆率) 刷怪步骤:在\MirServer\Mir200\Envir\MonItems文件夹中建立以怪物名字为文件名的txt文件写法案例: …...
【030】基于51单片机甲醛检测报警器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统 ZE08-CH2O甲醛传感器AT24C02存储芯片LCD1602液晶显示按键设置蜂鸣器报警。 1、本设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、采用ZE08-CH2O甲醛传感器采集环境中的甲醛浓度值,LCD1602实时显示…...
微信小程序:vant组件库安装步骤
前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…...
处理namespace问题:Namespace not specified for AGP 8.0.0
How do I fix ‘namespace not specified’ error in Android Studio? Namespace not specified for AGP 8.0.0 解决方案 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/androi…...
C++(Qt)软件调试---内存分析工具Heob(26)
C(Qt)软件调试—内存分析工具Heob(26) 文章目录 C(Qt)软件调试---内存分析工具Heob(26)[toc]1、概述🐜2、环境配置🪲3、功能说明4、使用Heob分析qt 程序内存泄漏🦧5、使用Heob检测qt 程序野指针…...
Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录 一、String字符串类型介绍 二、常见命令 1、SET 2、GET 3、MGET 4、MSET 使用MGET 和 使用多次GET的区别 5、DEL 6、SETNX SET、SET NX和SET XX执行流程 7、INCR 8、INCRBY 9、DECR 10、DECYBY 11、INCRBYFLOAT 12、APPEND 13、GETRANGE 14、SETRANGE …...
Flutter中的Material Theme完全指南:从入门到实战
Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…...
Python 第三方库 PyQt5 的安装
目录 前言 PyQt5安装 不同操作系统PyQt5安装 一、Windows 系统 二、macOS 系统 三、Linux 系统(以 Ubuntu 为例) 安装 PyQt5 可能会遇到的问题 一、环境相关问题 二、依赖问题 三、网络问题 四、安装工具问题 五、运行时问题 六、环境配置问…...
CSS基础也要进行模电实验
盒子阴影 圆角边框已经介绍过哩,现在先介绍一下盒子阴影的效果如何实现 CSS3中新增了盒子阴影,可以使用box-shadow属性为盒子添加阴影 这是固定的语法: text-shadow: h-shadow v-shadow blur color; 它有这些可选的值: 哦。 …...
贴代码框架PasteForm特性介绍之markdown和richtext
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...
腾讯小龙虾使用指南
腾讯小龙虾使用指南腾讯小龙虾是一款集成了多种实用功能的工具,广泛应用于数据分析、自动化处理和团队协作等领域。以下指南将详细介绍其核心功能、操作方法和最佳实践。安装与配置下载腾讯小龙虾的安装包,支持Windows、Mac和Linux系统。运行安装程序后&…...
Android App集成AI对话功能:从基础实现到性能优化与安全实践
Android App集成AI对话功能:从基础实现到性能优化与安全实践 在移动应用开发领域,AI对话功能的集成已经从"锦上添花"变成了"必备能力"。对于中高级Android开发者而言,仅仅实现基础功能已经不够——用户期待的是流畅、安…...
别再死记硬背BPSK公式了!用Python+NumPy手把手带你仿真2PSK信号生成与解调全过程
用Python实战BPSK:从信号生成到误码率分析的完整指南 通信工程专业的学生常常被各种调制公式搞得晕头转向,尤其是BPSK(二进制相移键控)这类基础但抽象的概念。今天,我们将彻底改变这种学习方式——通过Python代码和可视…...
【RK3588 NPU性能调优实战】多线程异步推理YOLOv5,榨干6TOPS算力
1. 为什么你的RK3588 NPU跑不满6TOPS? 第一次在RK3588上跑YOLOv5时,我也被官方宣称的6TOPS算力唬住了。直到亲眼看到npu-smi显示的实际利用率——好家伙,不到30%!这就像买了辆跑车却只能挂一档开。经过两周的折腾,终于…...
哔哩下载姬DownKyi完整指南:三步掌握B站8K视频下载
哔哩下载姬DownKyi完整指南:三步掌握B站8K视频下载 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
OpenClaw性能测试:Qwen3.5-4B-Claude处理百页文档实测
OpenClaw性能测试:Qwen3.5-4B-Claude处理百页文档实测 1. 测试背景与目标 上周我在整理一个开源项目的技术文档时,遇到了一个头疼的问题——这份文档长达137页,包含了代码示例、架构图和版本变更说明。手动梳理关键信息耗费了我整整两天时间…...
GLM-4-9B-Chat-1M惊艳效果:输入50万字小说,精准定位伏笔与人物关系图谱
GLM-4-9B-Chat-1M惊艳效果:输入50万字小说,精准定位伏笔与人物关系图谱 1. 百万长文处理新标杆 想象一下,你手头有一部50万字的网络小说,想要找出所有埋设的伏笔线索,理清复杂的人物关系网。传统方法可能需要花费数天…...
Unity游戏开发实战:用三阶贝塞尔曲线为你的角色设计一条丝滑的移动路径(附完整C#脚本)
Unity游戏开发实战:三阶贝塞尔曲线打造丝滑角色移动路径 想象一下,你的游戏角色需要完成一个优雅的空中翻转动作,或者赛车需要在弯道实现完美漂移轨迹。这些令人惊叹的运动效果背后,往往隐藏着一条看不见的数学曲线——贝塞尔曲线…...
告别手动标注!用RexUniNLU零样本模型自动提取电商评论情感
告别手动标注!用RexUniNLU零样本模型自动提取电商评论情感 1. 电商评论分析的痛点与解决方案 电商平台每天产生海量用户评论,这些评论蕴含着宝贵的用户反馈和市场洞察。传统的情感分析方法通常面临两大难题: 标注成本高:需要大…...
React-PDF自定义字体粗细终极指南:实现精确文本字重控制的完整教程
React-PDF自定义字体粗细终极指南:实现精确文本字重控制的完整教程 【免费下载链接】react-pdf 📄 Create PDF files using React 项目地址: https://gitcode.com/gh_mirrors/re/react-pdf React-PDF是一个功能强大的库,允许开发者使用…...
