ARTICLE · 软件编程

Cloudflare 将 D1 控制平面扩展至数百万个数据库

作者:Renato Losio 来源:InfoQ 2026-11-08 14:34 3 分钟 1 阅读 579 字
编程与工程系统设计云原生 / DevOps分布式系统性能优化
一语总结

Cloudflare 重新设计了 D1 控制平面架构,通过使用 Postgres 存储事务元数据、ClickHouse 进行分析、Workers KV 提供路由,并结合分布式缓存和心跳协调机制,将规模扩展至数百万个数据库,同时避免集中式瓶颈。

AI 总结

Cloudflare 重新设计了 D1 无服务器 SQL 数据库的控制平面,通过将边缘的查询处理与集中的管理操作分离,支持数百万个数据库。该架构使用 Postgres 作为事务元数据的唯一事实来源,使用 ClickHouse 进行分析,并使用 Workers KV 存储全球复制的路由数据。系统每 30 秒通过带有逐数据库随机抖动的心跳机制,将每个 D1 Durable Object 与 Postgres 进行协调,从而能够自动修正创建或删除操作失败的问题。边缘 API Workers 负责身份验证和速率限制,Eyeball Workers 则将查询直接路由至 Durable Objects。异步用量更新和预聚合的账户总量可避免写入激增冲击 Postgres,而 Hyperdrive 缓存则能在清除缓存时防止亚稳态故障。系统通过分布式元数据缓存、连接池和最终一致性实现可扩展性。

核心要点
  1. D1 控制平面采用多层架构:Postgres 存储事务元数据,ClickHouse 负责分析,Workers KV 提供全球复制的路由数据。

    这种职责分离让查询处理能够继续在边缘运行,同时集中式管理操作可独立扩展,从而避免数据平面出现瓶颈。

  2. 系统每 30 秒通过带有逐数据库随机抖动的心跳机制,将每个 D1 Durable Object 与 Postgres 进行协调,从而能够自动修正操作失败的问题。

    如果对象成为孤立对象,系统会自动将其标记为已删除;如果更新失败,路由元数据也会得到修复,因此无需人工干预即可实现最终一致性。

  3. 边缘 API Workers 负责身份验证、授权和速率限制,Eyeball Workers 则使用 D1 Bindings 将查询直接路由至 Durable Objects。

    这种设计避免在查询路径中重复进行授权检查,并将 Postgres 排除在数据平面之外,从而降低延迟并提升可扩展性。

  4. 异步用量更新和预聚合的账户总量可在高流量场景下保护 Postgres,避免写入激增。

    通过批量写入并持续维护增量存储变化,该系统能够避免拥有数百万个数据库的账户发生写入争用。

Cloudflare 将 D1 控制平面扩展至数百万个数据库

Cloudflare 重新设计了 D1 无服务器 SQL 数据库的控制平面,通过将边缘的查询处理与集中的管理操作分离,支持数百万个数据库。该架构使用 Postgres 作为事务元数据的唯一事实来源,使用 ClickHouse 进行分析,并使用 Workers KV 存储全球复制的路由数据。系统每 30 秒通过带有逐数据库随机抖动的心跳机制,将每个 D1 Durable Object 与 Postgres 进行协调,从而能够自动修正创建或删除操作失败的问题。边缘 API Workers 负责身份验证和速率限制,Eyeball Workers 则将查询直接路由至 Durable Objects。异步用量更新和预聚合的账户总量可避免写入激增冲击 Postgres,而 Hyperdrive 缓存则能在清除缓存时防止亚稳态故障。系统通过分布式元数据缓存、连接池和最终一致性实现可扩展性。

文章金句

"

心跳机制可以容忍数据略有过时,因此可以通过 Hyperdrive 的多层缓存或 Postgres 只读副本来提供数据。该心跳流程使 Durable Object 能够自我修正,确保数据库的创建和删除状态与事实来源 Postgres 保持一致。

"

你可能也会好奇,既然已经有 Hyperdrive Caching,为什么还要使用 Workers KV。Workers KV 是持久化数据存储,而不只是缓存:如果某个条目从 KV 的边缘缓存中淘汰,读取请求会由 KV 自身的存储提供,而不是由 Postgres 提供,从而使 Postgres 不进入数据平面。

"

如果发生灾难性的缓存清除,一百万个数据库同时尝试获取路由信息,就会导致亚稳态故障。