简单理解 TiDB Serverless branching

作者: shiyuhang0 原文来源: https://tidb.net/blog/22f5d0c8

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 的状态。

简单理解 TiDB Serverless branching_第1张图片

简单理解 TiDB Serverless branching_第2张图片

创建完 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。

你可能感兴趣的:(tidb,serverless,云原生)