turbopuffer:如何每天发布数据库
How to ship a database every day

在 turbopuffer,我们每天部署数十次数据库升级,甚至在同一天提交 PR 后就立即上线。面对 public SaaS、single-tenant SaaS 和 BYOC 三种部署模式下的 100 多个集群,我们无法直接 SSH 或 kubectl 登录客户的 BYOC 环境。为此,我们设计了一套无需“伸手”即可操作的架构:每个集群运行本地 agent,通过 Kubernetes CRD 实现状态机驱动,自动推进升级、整理等操作。控制平面通过 API 下发任务,集群主动拉取并反馈状态,即使断连也能独立完成任务。我们摒弃了 Terraform 等 IaC 工具,转而构建基于 Remix/React 的键盘友好型 Dashboard,让工程师像使用代码编辑器一样高效管理集群。这套机制让我们能在不触碰客户资源的前提下,实现每日多次的数据库发布。
我们不需要伸手去操作集群,因为状态机本身就能驱动工作走向完成。
HN 评论区
10- dwedge
这看起来可能像钓鱼,但我保证不是——我默认首选 MySQL 而不是 Postgres。不过,你们为什么选择 MySQL 作为状态数据库?在 HA 和同步集群方面,它确实是个不错的方案,但除非我理解有误,否则你们似乎只用它来做键值存储和追加日志,这两者都不一定是大家认为需要“MySQL”来解决的问题。
鉴于你们似乎采用了相当时髦的技术栈(Kubernetes、直接使用 etcd、云优先、IaC 以及自定义数据库技术),我很好奇像这样的公司为什么会选择 MySQL。难道是因为 MySQL 集群已经出于其他原因部署好了吗?
- robszumski
我曾参与提出这种操作模式(Kubernetes Operator)[1]/控制器的团队,看到一支能力出众的团队打造出一个看似极其出色、真正能推动业务扩展的方案,感觉非常棒。
我一直认为,数据库是 Operator 最能发挥优势的领域。有一些不错的 Postgres Operator,但除此之外,真正能处理日常运维(Day 2 operations)的并不多。
- hemc4
很有趣的阅读。这是一种更简单的方式来管理数据平面。
很好奇,你们是否也使用 OTEL 层来了解 BYOC 集群中正在发生的情况?