如果你曾经用过 Cloudflare Durable Objects,一定对它的强一致性、单线程执行模型和按名寻址爱不释手。但托管服务的成本在规模化后往往令人头疼——每个常驻对象 $4.15/月,1000 个就是 $4150+。Deno Land 创始人 Ryan Dahl 最近开源了一个项目 celld,让你在自己的机器上跑 Durable Objects,成本降到原来的 1/80。
项目概览
celld 是一个开源守护进程,可以在你自己的服务器上运行 Cloudflare Workers 和 Durable Objects。每个对象(cell)都是一个独立的 SQLite 数据库,按名寻址,自动复制到你自己的 S3 兼容存储桶中。节点之间仅通过存储桶协调——没有控制面,没有共识协议,没有成员管理。
- GitHub 地址:github.com/denoland/celld
- 官网:celld.dev
- 今日 Stars:516+(总 2,228+)
- 语言:Rust
- 许可证:Apache-2.0
- 二进制大小:58 MB(静态编译)
核心设计理念
celld 的架构可以用一句话概括:存储桶即协调器。传统分布式系统通常需要 Zookeeper、etcd 或 Raft 共识协议来管理节点成员和领导者选举。celld 的做法截然不同:
- 每个 cell 是一个 SQLite 数据库:应用天然按 cell 分片,不存在单数据库的争用和爆炸半径问题
- 所有权通过 S3 的原子写入(Compare-and-Swap)来声明:不需要成员协议,不需要故障检测器,不需要共识服务
- 持续复制:每个 cell 的 SQLite 状态以 LTX(Litestream 格式)增量段的形式持续复制到存储桶
- 故障恢复:节点宕机后,另一个节点从存储桶获取租约,恢复 SQLite 数据库,在秒级内恢复执行
- 休眠机制:空闲 cell 自动休眠,不占用内存和 CPU,唤醒只需约 4ms
celld 是对 Cloudflare Durable Objects 设计理念的一封情书——这个原语太好了,值得在任何地方运行。
性能数据
| 指标 | 数值 |
|---|---|
| 无状态请求 P50 / P99 | 0.2ms / 0.3ms |
| 无状态吞吐(每 Worker 线程) | ~94,000 req/s |
| 休眠 cell 唤醒 | ~4ms |
| 每个常驻 cell RAM | 4 MB |
| 8 GB 节点可容纳常驻 cell | ~1,000 个 |
| 确认写入丢失(RPO) | 0 |
| 持久化写入延迟(区域本地) | ~90ms |
| 节点故障恢复 | ~20s |
| 每月每常驻 cell 成本 | ~$0.05 |
对比 Cloudflare Durable Objects 的 $4.15/cell-month,celld 在单个 8GB 节点上运行 1000 个 cell 的成本仅约 $48/月(DigitalOcean 定价),相当于每个 cell 不到 $0.05/月,成本降低约 80 倍。
快速上手
1. 安装 celld
一行命令安装静态编译的二进制文件(支持 Linux x86-64 和 ARM64):
# 从官网下载安装脚本后执行(详见 https://celld.dev)
# 支持 Linux x86-64 和 ARM64,仅 58MB
安装器会将二进制放到 ~/.local/bin,并用独立版本目录管理,支持原子切换和验证卸载。
2. 准备 S3 兼容存储桶
推荐使用 Cloudflare R2(免费额度充足),也支持任何 S3 兼容服务:AWS S3、MinIO、Backblaze B2 等。创建一个空存储桶即可。
3. 部署项目
celld deploy . --bucket s3://my-cells-bucket --endpoint https://ACCOUNT.r2.cloudflarestorage.com
celld deploy 会自动调用 esbuild 编译 Worker 代码,支持 Wrangler 配置的子集,包括共同部署的静态资源。
4. 启动节点
celld --bucket s3://my-cells-bucket --endpoint https://ACCOUNT.r2.cloudflarestorage.com --region auto --listen 0.0.0.0:8080 --advertise node-a.internal:8080
多个节点指向同一个存储桶即可自动组成集群。节点之间通过存储桶发现彼此所有权,无需额外的服务发现。
5. 使用 Docker 运行
docker volume create celld-state
docker run --rm --network host -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e CELLD_WATCH=/var/lib/celld/state -v celld-state:/var/lib/celld ghcr.io/denoland/celld --bucket s3://my-cells-bucket --listen 0.0.0.0:8080 --advertise node-a.internal:8080
安全与运维
- 节点间通信:Peer HTTP 不终结 TLS,需要部署在受信任的私有网络或加密覆盖网络(WireGuard/Tailscale)中。公网 IP 会被默认拒绝,除非显式指定
--unsafe-public-advertise。 - 认证:首个节点会在存储桶中创建
fleet/peer-auth.json,后续所有节点间请求都会用该密钥进行 HMAC 签名和重放保护。 - 诊断工具:
celld diagnose --bucket s3://my-cells-bucket可以枚举所有节点租约,探测每个活跃节点,报告过期记录、不可达节点、协议不兼容等问题,并展示每个节点的 cell 数量、WebSocket 连接、内存、CPU 等指标。 - 压力卸载:支持设置常驻 cell 的高/低水位线,在压力下自动复制并释放最少使用的空闲 cell,并在水位线以下重新接收新 cell。
适用场景
- 实时协作应用:多人文档编辑、白板、聊天室——每个房间是一个 cell,状态天然隔离
- 游戏服务器:每个游戏房间独立的状态管理,宕机自动恢复
- IoT 设备管理:每台设备一个 cell,管理连接状态和消息队列
- 分布式任务队列:天然分片,worker 崩溃不影响其他任务
- 边缘计算/私有云:在自有服务器上部署,数据不出域,满足合规要求
- 开发和测试:本地运行完整的 Workers/Durable Objects 环境,接近零成本
当前限制
celld 目前仍处于早期阶段(PR 已关闭,提交通过邮件发送 patch),有几个需要注意的限制:
- 运行环境和兼容性表面仍在演变中
- 不支持完整 Workerd 所有 API(兼容列表见 celld.dev/docs/cloudflare-compat)
- Node.js compat 模块处于早期支持阶段
- 正式发布前不建议用于生产环境
总结
celld 代表了一个重要的趋势:Cloudflare Workers/Durable Objects 编程模型的去中心化。它继承了一个优秀的分布式编程原语——单线程对象 + 自带存储 + 按名寻址——然后把控制权还给了开发者。你的数据在你自己的存储桶里,你的节点运行在你自己的机器上,出问题时你可以直接用 sqlite3 和 grep 排查,而不是对着一个状态页面干瞪眼。
对于追求成本优化、数据主权和运维透明度的团队来说,celld 是一个值得持续关注的项目。虽然目前还不适合生产环境,但它展示的技术路线——用 S3 作为分布式系统唯一的协调器——本身就值得每一位后端开发者深入学习。
















cqlbgzs@163.com 1年前0
d好879445037@qq.com 2年前0
购买了 无法下载Alexcc 3年前0
强大Alexcc 3年前0
看不了教程Alexcc 3年前0
雷刺下载Alexcc 3年前0
下载Alexcc 3年前0
下载dsa456159 3年前0
下载