celld:Deno 团队把 Cloudflare Durable Objects 搬进自托管环境

Cloudflare
Durable Objects
自托管
Deno
后端
2026/9/29
·

阅读时间: 大约 8 分钟

celld:Deno 团队把 Cloudflare Durable Objects 搬进自托管环境

celld 官方性能与密度指标表(含测量方法脚注)

celld 是 deno 团队(denoland)开源的运行时,目标是”Self-hosted, distributed Durable Objects”:让原本只能跑在 Cloudflare 上的 Workers 与 Durable Objects 代码,不改一行跑在你自己的机器上。据 Koala 项目库点评,Durable Objects 是近年最优雅的有状态编程抽象之一,代价是深度锁定 Cloudflare;celld 就是来打破这层锁定的。本文基于官网 celld.dev 梳理。

一、它承诺什么

官网开篇三句话:你的 Cloudflare 应用原样运行(Workers、Durable Objects、KV、Queues、D1、R2、Workflows、Cron、静态资源);数据放在你自己拥有的桶里;规模化后成本低一个数量级。

交付形态极轻:一个 58 MB 的静态可执行文件(curl -fsSL celld.dev/install.sh | sh),或 Docker 镜像 ghcr.io/denoland/celld。它直接读取你现有的 wrangler.json,遇到不认识的 key 会报错停下而不是默默忽略——这点对迁移安全性是加分项。

二、架构:用 S3 桶当分布式协调器

celld 最巧妙的设计是它不要成员协议、不要故障检测器、不要共识服务。做法是:

  • 所有 cell(Durable Object/KV/Queue/D1/Workflow 各是一个 cell)状态存在各自的 SQLite 数据库里;
  • 节点共享一个 S3 兼容对象存储桶(支持 S3、Google Cloud Storage、Azure Blob)作为持久层;
  • 靠**桶的条件写(compare-and-swap)**来仲裁 cell 归属:哪个节点在桶里抢到租约,cell 就归它;
  • 状态用 SQLite + Litestream 的 LTX 格式持续复制到桶。

一个 cell 同一时刻只在一个实例上运行(epoch-fenced,每 cell 写者数=1);实例间路由 cell 请求并复制写。某实例挂了,另一个通过 CAS 抢到租约、从存储恢复 cell。

三、官方数据:密度、延迟、故障转移

官网”Key characteristics”表给出的数字(均来自官网):

维度指标数值
持久化每 cell 写者数(epoch-fenced)1
持久化kill 时已确认写丢失0(RPO=0)
持久化持久写延迟(单节点、同区)~90 ms
持久化节点宕机后故障转移、零丢失~20 s
速度(热)无状态请求 p50 / p990.2 / 0.3 ms
速度(热)每工作线程无状态吞吐~94k req/s
速度(热)唤醒一个休眠 cell~4 ms
密度成本每常驻 cell 内存0.47 MB
密度成本8 GB 节点常驻 cell 数2,500
密度成本非活动 cell 桶操作成本~0
密度成本每常驻 cell-月成本~$0.02

成本对比官网也算得很直白:Cloudflare Workers Paid 是 $5/月 + 每个常驻 cell-月 $4.15;celld 用 DigitalOcean us-east $48/月的 8GB 节点,每节点封顶 2,500 个常驻 cell,折算约 $0.02/cell-月——差了两个数量级。

四、兼容面:哪些 Cloudflare 服务能跑

celld 官方支持的 Cloudflare 服务矩阵

从服务矩阵看,Workers、Durable Objects/Cells、DO Facets、KV、Queues、D1、R2、Workflows、Cron、静态资源、动态 Workers 均标 Supported;Containers 标 Experimental。每个 KV namespace、D1 库、队列、Workflow 都是一个 cell,享有和 DO 一样的租约、SQLite、LTX 复制与故障转移;R2 绑定则直接读写你的桶。

五、口径与局限:数字是怎么测的

官网在表下用脚注主动交代了测量条件,这是评估时必须带上的:

  1. 速度与密度是”理想环境”:官方写明”one node, trivial cells, an Apple M-series laptop over loopback”——即在苹果 M 系笔记本回环上、跑无关紧要的小 cell 测的。而在”实测的 2 vCPU 机队节点”上,唤醒一个休眠 cell 的 activation p50 慢到 35.9 ms,远高于宣传的 ~4 ms。
  2. 持久化测试条件:用 4 vCPU/8GB 机队 + 同区一个桶,通过 SIGKILL 强杀一个满载节点、恢复后逐个房间校验。这是受控测试,不等于你的生产网络。
  3. 成本账不含流量:官网明确这些是基础成本,不含应用流量带来的计算与桶用量;超大流量下桶请求费用会改写这笔账。
  4. 出界范围:官网直说”任何需要 Cloudflare 全球网络、其 GPU、或浏览器农场的能力都不支持”。
  5. 仍依赖你的基础设施:自托管把命运拿回来,也意味着机队、网络、桶供应商的可用性责任全在你自己身上——blast radius 由你选,但也由你扛。

值得一提的是,官网主动引用了 2026 年 7 月的事件:Orange Cloud Report 给 Cloudflare Durable Objects 的可靠性打了 2/10,并称其”技术上惊艳、运维上可怕”;同月 Cloudflare status 也记录了 DO 错误率上升的重大故障。这正是 celld 讲故事的时机——把可靠性风险从厂商手里搬到自己可控的机队上。

六、客观分析:优势与适合人群

优势: 几乎零迁移成本(读 wrangler.json)、58MB 单二进制好部署、用 S3 桶当协调器省掉了 etcd/ consensus 层、RPO=0 + ~20s 故障转移的有状态语义保持了 DO 的编程模型;成本在大规模常驻 cell 场景下极具竞争力。

适合: 已用 Cloudflare DO、想摆脱厂商锁定或需要数据落自己桶的团队;对成本敏感、常驻 cell 很多的应用;有运维能力、能自己背机队与桶可用性的团队。

注意: 宣传的 ~4ms 唤醒是回环小 cell 数字,生产 2 vCPU 节点实测 35.9ms,别拿前者做容量规划;Containers 仍实验性;自托管不是免费午餐——省了厂商溢价,也接回了运维责任。

参考来源