Ryan Dahl 领导的 Deno 团队推出了最新开源项目 Celld,一个能在自己机器上运行 Cloudflare Workers 和 Durable Objects 的守护进程。
设计思路很直接:每个对象是一个独立的 SQLite 数据库,按名称寻址,复制到你自己的 S3 兼容存储库里。节点之间只通过这个存储库协调——没有控制平面,没有共识协议。每个对象自带一个小型数据库,应用天然按分片构建,单个数据库的竞争和爆炸半径问题在设计层面就被消除了。

闲置的 cell 会休眠到几乎不占资源。当 cell 迁移或唤醒时,新宿主从 S3 恢复 SQLite 数据库继续执行。存储库是持久化的唯一真相来源,节点是可替换的。
这和 Cloudflare 的 workerd 有什么不同?workerd 是运行时,缺了调度器——让 DO 在多个节点间分配的那部分。Celld 是完整的分布式系统,虽然目前是单租户的。它把 DO(在 Celld 里叫 cell)分配到任意数量的 VM 上,每个 DO 的数据库在对象存储中,RPO=0。

kentonv(Cloudflare Workers 的 CTO)在社区讨论中意外现身。他提到 Cloudflare 内部其实也有一个类似方向的项目,但"被其他事情耽搁了"。他说:"说实话,你不会想运行我们的内部实现——太复杂了。除非你有 100 多个数据中心遍布全球,否则没必要。新设计的目标是让集群可以扩展,同时在运维上非常简单,适合自托管。"
他还点赞了 Celld 的做法:"我很高兴现在有多个实现了。Celld 在这方面确实走在我们前面,毫无疑问。"
社区里讨论最热烈的是 Celld 的贡献方式。README 里写着:Pull request 已关闭。 原因是"编程 agent 让提交一个体量大、上下文少的改动变得太容易了,这消耗维护者的时间远超它节省的时间。"想贡献代码?用 git format-patch 发邮件给 ry@deno.com。sakesun 在评论区问:"这会成为以后的常态吗?" dbmikus 的回复很简单:"是时候把开发者邮件列表重新带回来了。"

技术评论里,q3k 指出一个有趣的设计哲学:"说'没有控制平面和共识',但 S3 本身就是控制平面和共识层,只是把问题往下推到了运行 S3 的人那里。" jitl 的回答很务实:"S3 比典型的分布式协调工具(etcd、ZooKeeper、Consul)更容易买到,也更可靠。每个主流云厂商都提供,还有几个不错的开源选项。"
有人关心性能和全球分布。zuzululu 质疑:"Cloudflare 给你的是全球即时同步,用 Celld 我需要自己在各大洲买裸金属吗?" wmf 回应:"Celld 的定位不是 Cloudflare 的精确克隆,而是为那些想在一个区域内跑一堆 worker 的人准备的。如果你喜欢 Cloudflare,继续用就好。"
Celld 主要采用 Rust 编写(67.7%),嵌入 V8 执行 Wrangler 打包的 JavaScript。安装只要一行:
curl -fsSL https://celld.dev/install.sh | sh
Apache 2.0 许可。更多细节可查阅 celld.dev 上的文档。
参考来源: