作者: shiyuhang0
TiDB Serverless 作为 TiDB 的云上产品。提供了一种完全托管的、自动扩缩容的 TiDB 部署方式,可以让用户无需关心底层节点,即可快速使用 TiDB 数据库,并根据应用负载自动扩缩容。TiDB Serverless 在 2023.07.10 正式 GA,同时带来了 TiDB Serverless branching.
什么是 branching?
Serverless branching 也称 database branching(数据库分支),随着 Serverless 数据库的不断发展逐渐进入我们的视野中。
如同 Git 分支,数据库分支允许你像代码分支一样为数据库创建分支。原始数据库将被称为新分支的 parent,新分支与父分支相互隔离,这使得你可以自由地使用新分支而不必担心对父分支产生影响。根据数据是否被克隆,数据库分支可以分为 schema branching 与 data branching。前者仅克隆 schema 而后者同时克隆 schema 与 data。
在 TiDB Serverless branching 中,以 cluster 为 parent,基于写时复制(copy-on-write)技术提供分钟级别的 data branching 特性。详情可以参考官方文档 。
如何使用 branching
Branching 仍处于发展状态,最佳实践还在摸索阶段。目前 branching 一般用于以下场景:
- 容灾备份:朴素的说,branching 可以被视为一次手动的备份。
- 开发:branching 可以为每个开发者提供一个可随意修改,与线上数据一致的数据库,提高开发效率。
- 测试:branching 完全克隆线上数据,非常适合作为 bug fix 或者新 feature 上线前的测试数据库。
- 部署:部署基于 branching 的 staging/dev 环境,更好的模拟线上环境。甚至我们还可以基于 branching 构建每位开发人员的 personal dev 环境,减少开发人员本地构建部署的压力。
此外,如果你的代码托管于 GitHub,还可以使用 TiDB Serverless branching 提供的 GitHub integration。该集成通过关联 GitHub 仓库和 TiDB Serverless 来帮助您在该仓库构建一套基于 branching 的 CI/CD workflow。在关联之后,branching bot 会被启用,为每个 PR 创建一个 branch,同时创建一个 GitHub comment 和 check run 跟踪 branch 的状态。
创建完 branch 之后呢?为了让整个 workflow 更顺畅,你可以使用 wait-for-tidbcloud-branch。它是一个与该集成配套使用的 action,会在 Github action 中等待 branch 完成并生成该 branch 的连接信息。这样你就可以基于该连接信息用新创建的 branch 进行 PR 的测试。tidbcloud-branch-gorm-example 是一个 gorm 框架的例子。相信未来会有更多语言与框架的 example。
TiDB Serverless branching 的优缺点
除了 TiDB Serverless branching,一些知名 Serverless 数据库厂商同样提供了 branching 能力。相比于他们, TiDB Serverless branching 有哪些优点与不足呢?我们先来看一下他们的简单对比:
基础对比:
vendor | 数量 | 限制 | data branch 创建时间 |
PlanetScale | free: 1 schema branch $29: 5 schema branches $39: 2 data branches | / | 不清楚 |
Neon | free:10 data branches pro plan:unlimited data branches | free: 3GB storage + 共享的 vCPU pro plan: 按使用付费 | 秒级 |
Xata | free:15 data branches 付费:每 $8 增加 5 data branches | data branch 只能 copy 10,000 行 | 2 分钟 |
TiDB Serverless | free:5 data branches 付费:由于是 beta 还没有相关计费 | free: 5GB storage + unlimited RU | 1-5 分钟,视数据大小而定。 (36GB 3.5min) |
特性对比:
vendor | create branch from branch | create from specify time | promote | integration |
PlanetScale | ✅ | ❌ | ✅ | 内建 workflow |
Neon | ✅ | ✅ | ✅ | Vercel, Cloudflare worker |
Xata | ✅ | ❌ | ❌ | Github, Vercel, Netlify |
TiDB Serverless | ❌ | ❌ | ❌ | Github |
TiDB Serverless branching 能支持 create branch from branch 与 create from specify time,只是因为处于 beta 状态所以还未暴露相关能力。由于 TiDB Serverless 以 cluster 为 main 数据库,因此提升 branch 为 main (root branch) 的操作并不适用于 TiDB Serverless。
总结
TiDB Serverless branching 总结:
- 数据复制:TiDB Serverless branching 基于内部 native fork 实现 cow,拥有较快的数据复制速度(数据量越大速度提升越明显)。而 PlanetScale 与 Xata 有明显的限制:前者太贵,后者复制的数据量有限制。
- 特性:TiDB Serverless branching 具有支持各种特性的能力,相信在 beta 后会陆续暴露出来。
- workflow:TiDB Serverless branching 基于 Github integration 建立了一套 CI/CD workflow。Neon 虽有一些 blog 介绍 workflow,但没有相关集成。PlanetScale 内建一套更改 schema 的 workflow,TiDB Serverless 支持 online DDL,没有必要做相关的 workflow。
- 生态:TiDB Serverless branching 推出未多久,但自公布就有与 Github 的集成。相信后续也会推出与 Vercel, Netlify, Cloudflare worker 等平台的集成。
- 价格:TiDB Serverless branching 还没有相关计费策略。但预估会比 PlanetScale 更便宜,且比 Neon 更 Serverless。如果要使用 neon branching 需要分配 endpoint。endpoint 需独占一定的 cpu 与内存,粒度较粗。而 TiDB Serverless 则是完全的 pay as you go,相信 TiDB Serverless branching 也会延续这样的计费策略。
- 限制:Branch 从属于 cluster,无法 promote branch 为 main。