内容提要
Snorkel AI 借助 Databricks 的 Lakebase(无服务器 Postgres)解决 CI 测试需要真实数据的问题。Lakebase 支持写时复制分支,创建分支仅需秒级且不复制数据。Snorkel 通过 DMS 将生产 Aurora 数据持续同步到主分支,每个 PR 自动创建独立分支运行测试,合并后删除并设 TTL 兜底。分支存储仅随改动增长,计算空闲时缩容,成本较低。该模式也适用于 AI 代理:每个任务一个分支,可安全读写、审查或丢弃改动。
延伸解读
从20分钟到秒级:分支如何解决CI环境瓶颈
Snorkel原先为每个PR环境恢复生产数据库副本需约20分钟,在频繁开PR和合并队列场景下成为瓶颈。Lakebase的写时复制分支将创建分支变为元数据操作,不复制数据,因此从约1TB生产副本创建分支也只需秒级。这使每个PR都能获得独立、可写的生产数据副本,避免共享数据库的测试干扰和合成数据失真问题。
成本控制的关键:写时复制与TTL配合
分支存储仅随改动增长,Snorkel每个PR分支约增加5到10GB,计算按分支分配且空闲缩容至零。但分支会保留创建时的数据版本,随着DMS持续更新主分支,长期存活的分支会积累旧页面导致存储增长。因此为每个CI分支设置TTL,在PR合并或关闭后自动删除,能将存储控制在生产基础数据加活跃PR改动的规模。
安全与身份:私有网络和按用户类型拆分
生产数据从Aurora到Lakebase、再到CI集群均走私有网络,不经过公网。身份方面,Snorkel区分交互式调试的开发者与无人值守的CI流水线:Okta SSO面向浏览器登录,而CI流水线使用服务主体和短期OAuth令牌。这种拆分使自动化任务也能被审计追踪,同时避免将交互式登录凭证用于流水线。
AI代理场景:每个任务一个分支的实践
文章指出,需要 disposable 生产副本的不只是CI。AI代理写SQL、跑迁移或改数据时,也可为每个代理任务创建独立分支。代理可读写真实数据甚至改模式,不影响生产或其他代理。分支创建与数据库大小无关,存储只随改动增长,计算空闲缩容,因此并行运行数十个代理的成本接近其改动量而非数十份数据库副本。团队可审查代理改动后再应用,不满意直接删除分支,无需回滚,TTL自动清理废弃分支。
Q&A
Lakebase 分支是什么?它如何实现快速创建?
Lakebase 分支是 Databricks 无服务器 Postgres 数据库的一项功能,允许从任意时间点创建隔离的可写数据库副本,类似 Git 分支。它采用写时复制(copy-on-write)机制,创建分支是元数据操作,不复制数据,新分支与父分支共享存储页,只有修改的页才会写入新存储,因此创建分支仅需秒级,即使数据库很大。
Snorkel 如何将生产数据同步到 Lakebase 主分支?
Snorkel 使用 AWS DMS 将生产 Aurora PostgreSQL 集群的数据持续复制到 Lakebase 项目的主分支。先进行全量加载,然后通过变更数据捕获(CDC)保持主分支与生产数据延迟约 2 分钟。DMS 支持全 LOB 模式,可传输 10-20 MB 的 JSONB 值。由于团队已有 DMS 经验,无需构建新的复制管道。
在 CI/CD 中,每个 PR 如何获得独立的数据库环境?
当开发者打开 PR 时,CI 管道调用 Lakebase API 从主分支创建一个新分支,设置过期时间(TTL),并将分支连接信息传递给 PR 的 Kubernetes 命名空间。分支在不到一分钟内就绪。测试可以针对真实数据运行,包括迁移、写入和模式更改,而不会影响生产、主分支或其他 PR。PR 合并或关闭后,管道删除分支;如果清理失败,TTL 会作为后备自动删除。
Lakebase 分支在成本和存储方面有什么优势?
由于写时复制,分支与主分支共享大部分数据,存储仅随分支的修改而增长。对于 Snorkel,每个 PR 分支在共享基础之上仅增加约 5-10 GB。每个分支的计算资源独立,空闲时缩容到零,只有运行测试的分支才使用计算资源。设置 TTL 可确保分支短命,避免存储随时间增长,从而保持低成本。
Lakebase 分支如何支持 AI 代理的安全数据操作?
每个 AI 代理任务可以获得主分支的一个独立分支,代理可以读取真实数据、写入数据甚至修改模式,而不会影响生产或其他代理的工作。创建分支仅需秒级,适合为每个任务创建分支。多个代理并行运行时,存储仅随各自修改的页增长,计算空闲时缩容到零,成本较低。团队可以审查代理在分支上的更改后再应用到生产,如果不满意直接删除分支即可。TTL 自动清理废弃分支,代理还可以使用服务主体和短期 OAuth 令牌运行,便于审计。
Snorkel 为什么选择 Lakebase 分支而不是共享 staging 数据库或合成数据?
共享 staging 数据库、裁剪的测试数据或合成数据会带来测试相互干扰、模式过时以及只有真实数据形状才能暴露的 bug 等问题。而 Lakebase 分支提供隔离的、可写的生产数据副本,创建快速(秒级而非 20 分钟恢复),且成本低廉,使测试能够针对真实数据运行,同时避免上述问题。