我们是如何实现 TiDB Cloud Serverless 的 - 成本篇

news2024/11/17 10:54:50

作者: 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/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——环境基础开发工具使用2(正在更新中...)

1.自动化构建-make/Makefile 1.1 认识make和Makefile make是一个命令; Makefile是一个文件。 1.2 理解 其中在第一个图片中,第一行的 mytest:test.c 叫做依赖关系;第二行的 gcc test.c -o mytest 叫做依赖方法。 依赖关系和依赖方法共同…

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统,主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案,特别适用于微服务、云原生架构和基于容器的环境(如Docker、K8s、Mesos&…

品牌如何利用大数据工具,进行消费者洞察分析?

存量竞争的时代, 消费者聆听是品牌持续增长的关键,借助大数据的消费者数据洞察,可以帮助品牌分析消费者的所思所想及行为特征,获取消费者对产品的需求痛点、使用感受,对品牌的评价口碑等,从而帮助品牌更好地…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 (向上调整)代码 (向下调整)代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

【4】GD32H7xx ADC采样

目录 1. GD32H7xx ADC1.1 ADC外设资源1.2 采样时间1.3 片上硬件过采样 2. ADC DMA规则多通道采样程序3. 程序测试 1. GD32H7xx ADC 1.1 ADC外设资源 GD32H7xx 有3个ADC外设: ADC0 20个外部通道,1个内部通道(DAC0_OUT0通道)32位…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知,GitLab 的升级必须要严格遵循升级路径,否则就会出现问题,导致升级失败。因此,在 GitLab 升级之前需要做好两件事情: 当前版本的确认升级路径的确认 极狐GitLa…

【咕泡P5人工智能CV 技术NLP项目实战】

人工智能核心代码: 一、什么是人工智能技术: 人工智能(Aritificial Intelligence),英文缩写AI,人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智…

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

C# x Unity 从玩家控制类去分析命令模式该如何使用

本文部分内容出自游戏编程模式一书,游戏编程模式,有兴趣的小伙伴可以去看看,虽然不是unity x c#写的 但是思路挺好的 目录 目录 0.先说结论 发现问题 命令模式如何解耦 打个断点更利于分析 怎么实现延迟命令? 如何撤销命令? 脚本整体一览 不足分析(AI) 0.先说结论 …

【C++】—— stack和queue的模拟实现

前言 ​ stack 和 queue使用起来都非常简单,现在来模拟实现一下,理解其底层的原理。 ​ 在实现之前,应该知道,stack 和 queue 都是容器适配器,通过看官网文件也可以看出来;其默认的容器都是deque&#xff…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代,人工智能(AI)已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具,其质量直接影响着我们获取信息的准确性和有用性。今天,我们将深入探讨一个通用的 Prompt 框架…

动态规划-完全背包问题——322.零钱兑换

1.题目解析 题目来源 322.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数,所以不妨设置一个二维dp表,即dp[i][j]:在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬…

day-82 最少翻转次数使二进制矩阵回文 I

思路 依次计算使行回文和列回文的的翻转次数,返回较小的次数即可 解题过程 计算行翻转次数:对于每一行,如果第一个数与最后一个数不相同(前提前一个数的索引小于后一个数的索引)则需翻转一次,将所有行翻转…

计算光纤色散带来的相位移动 matlab

需要注意的地方 1.以下内容纯属个人理解,很有可能不准确,请大家仅做参考 2.光速不要直接用3e8 m/s,需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的,是固有属性,但是波长lambdac/f在不同的介…

15分钟学 Go 第 53 天 :社区资源与学习材料

第53天:社区资源与学习材料 目标 了解Go语言官方资源掌握社区重要学习平台学会利用开源项目学习构建个人知识体系 一、Go语言官方资源汇总 资源类型网址说明Go官网golang.org官方文档、下载、教程Go Blogblog.golang.org技术博客、最新特性介绍Go Playgroundpla…

丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN(基础概念) 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

机器学习-36-对ML的思考之机器学习研究的初衷及科学研究的期望

文章目录 1 机器学习最初的样子1.1 知识工程诞生(专家系统)1.2 知识工程高潮期1.3 专家系统的瓶颈(知识获取)1.4 机器学习研究的初衷2 科学研究对机器学习的期望2.1 面向科学研究的机器学习轮廓2.2 机器学习及其应用研讨会2.3 智能信息处理系列研讨会2.4 机器学习对科学研究的重…

激光slam学习笔记5---ubuntu2004部署运行fastlivo踩坑记录

背景:看看fastlivo论文,觉得挺有意思的,就本地部署跑跑看看效果。个人环境,ubuntu20.04。 一、概要 由于依赖比较多,个人构建工作空间,使用catkin_make编译 src├── FAST-LIVO├── livox_ros_driver…

多模态大模型开启AI社交新纪元,Soul App创始人张璐团队亮相2024 GITEX GLOBAL

随着AI在全球范围内的加速发展和广泛应用,各行业纷纷在此领域发力。作为全球最大的科技盛会之一,2024年的GITEX GLOBAL将目光再次聚焦于人工智能的飞速发展,吸引了超过6700家来自各个领域的企业参与。在这样的背景下,Soul App作为国内较早将AI技术应用于社交领域的平台,首次亮相…