今天,我们推出Gated Schema Deployments ,它帮助我们将架构更改视为更像原子操作,同时解决跨分片数据库进行更改的复杂性,并回答了用户最常提出的问题之一。首先,让我们了解架构部署的复杂性。


PlanetScale 已提供的非阻塞架构更改

PlanetScale 已支持非阻塞的架构更改。你可以在开发分支中进行一些架构更改,提交部署请求,获得审批,然后每个更改都会非侵入性地应用到你的生产数据库。一些部署只需要几秒钟,而对于影响表较大或生产工作负载较多的情况,有些部署可能需要数小时才能完成。
问题从 多维部署 开始。这包括:

  1. 一个部署中有多个架构更改
  2. 在一个多分片数据库中进行单次更改
  3. 或者两者同时出现。

多更改维度

一个架构部署可能包含多个更改,这些更改通常会相互关联。例如:

  • 添加一张新表,并在现有表中添加一个新列,该列引用新表的主键列。
  • 或者添加一种新类型的数据(例如位置),需要应用到许多表,因此需要对多个表进行修改。

常见做法是逐一部署多个更改。例如,CREATE TABLE 是一种简单且轻量的操作,但 ALTER TABLE 更改往往较重,并行运行多个可能会占用大量数据库资源。然而逐一运行迁移也会导致差异问题:有些更改可能被应用,而有些则没有。如果在部署期间出现问题,你可能会陷入一种“半完成”的状态。
通过 **Gated Deployments**,PlanetScale 尽可能紧密地应用所有更改,每个更改之间只隔几秒。实现这一点时,它可能会并行运行一些迁移,但不会耗尽数据库资源。例如,对于两个表的大规模 ALTER TABLE 操作,主要工作是复制现有的表数据,这将按表顺序逐一完成。但尾随更改日志并应用正在进行的更改可以并行完成。
我们尽可能提前运行较多的批量工作(顺序进行),然后并行运行较轻量的工作。这种方式可以同时维护多个架构更改,在确保所有更改都准备好后,尽量紧密地完成迁移。虽不完全是原子性操作,但这种部署可以被视为更接近于原子性;在最终阶段之前,任何更改都不会反映到生产环境。如果需要,部署可以在完成前随时取消。


多分片维度

随着数据库扩展,你可能需要应对一个新的 **多分片维度**。从设计上看,多分片数据库表现得像单体架构,同时分片之间是独立的。这带来了重要的优势,例如资源分配和问题发生时的爆破半径最小化。但同时也引发了新的挑战:如何确保分片之间的架构同步?
不同分片处于不同的工作负载下,可能会在几分钟到几小时的时间间隔内完成迁移操作。对于一个多分片数据库来说,如果分片之间的架构不同步,可能导致性能不一致,或者设计本身不一致。
Gated Deployments 最大限度地减少了这种间隔时间的影响。它通过追踪所有分片上的架构部署进度,在所有分片都准备好之前,暂缓切换到新架构。切换将在所有分片上几乎同时发生(虽然不是完全原子性)。


解决高需求的架构回滚功能:控制式 Gated Deployments

PlanetScale 提供了一种功能强大的架构回滚流程:允许将部署回滚到之前的架构状态,同时保留部署间积累的数据。当一个部署完成后,PlanetScale 提供一个 **30 分钟窗口**,在需要时可以进行回滚。
用户对架构回滚功能最常见的问题包括:

  • “为什么是 30 分钟?”
  • “如果部署在周末凌晨 2:00 完成,我无法及时操作怎么办?”
  • “能否更好地控制回滚时间?”

为回应这些问题,**Gated Deployments** 现在允许用户自行选择部署完成的时间。默认情况下,当部署准备好时会自动完成,这对大多数情况都很方便,并清理了部署队列。然而,如果用户选择取消勾选“自动应用(Auto-apply)”选项框:
PlanetScale 部署请求:“自动应用更改”复选框界面
此时,部署会安排所有更改,并运行所有长时间任务。当所有更改准备好时,部署将等待用户点击 “应用更改(Apply changes)” 按钮。如果用户没有进行操作,部署将继续在后台运行,与数据变化保持同步。
PlanetScale 仪表板 UI:显示已完成的迁移,等待点击 “应用更改” 按钮后可合并
例如,一个包含针对大型表的三个 ALTER 语句的部署可能需要一天时间运行。当它在周末凌晨 2:00 完成数据复制工作时,部署不会直接应用这些更改,而是继续同步和响应表上的持续更改(比如 INSERTDELETEUPDATE)。到周一早晨,开发者回到办公桌并做好准备时,可以点击 “应用更改” 按钮。这时部署完成,并开始 30 分钟的架构回滚窗口,而开发者完全掌控局势。



引入 Gated Deployments:应对大规模架构部署的复杂性插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2025/09/07/gated-deployments/