news 2026/8/31 12:52:28

celld跑Rust:3步用workers-rs编译WASM并在自托管Durable Object中运行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
celld跑Rust:3步用workers-rs编译WASM并在自托管Durable Object中运行

celld跑Rust:3步用workers-rs编译WASM并在自托管Durable Object中运行

【免费下载链接】celldself-hosted, distributed Durable Objects项目地址: https://gitcode.com/GitHub_Trending/ce/celld

celld 是一个自托管的分布式 Durable Object 运行时,内置 V8 引擎,可以直接执行 Wrangler 打包的 Worker 应用。如果你想在 celld 上用 Rust 编写有状态的 Worker,只需借助 workers-rs 生态把 Rust 代码编译成 WASM,再用celld deploy一键部署——本文带你完整走通这条链路。

先认识 celld:每个对象都有自己的数据库

celld 是一个开源守护进程,让你在自己的机器上运行 Cloudflare Workers 和 Durable Objects。它的核心设计非常简洁:

  • 每个 Durable Object(cell)都是一座独立的 SQLite 数据库,天然分片,不存在共享数据库的争用问题
  • 节点之间只通过一个 S3 兼容或 GCS 存储桶协调,没有控制平面、没有共识协议
  • cell 的状态持续复制到存储桶,节点随时可替换

这套架构意味着:你的 Rust 应用不需要管理任何数据库基础设施,状态持久化由运行时兜底。

为什么把 Rust 编译成 WASM 跑在 Durable Object 里

用 Rust 写 Durable Object 的吸引力在于:

  • 强类型 + 高并发:业务逻辑用 Rust 严格约束,编译为 WASM 后在 V8 中执行,性能与安全性兼得
  • 零胶水代码:workers-rs 的构建工具会自动生成 JavaScript shim,你不需要手写任何 JavaScript
  • 状态自动持久化:Rust 代码里调用state.storage()读写,背后就是 celld 为这个对象维护的 SQLite,并持续复制到存储桶

官方文档对 WASM 的支持规则与 Wrangler 完全一致:导入.wasm文件得到的是编译后的模块而非字节串,在 Cloudflare 上能跑的 Worker 包在 celld 上也能跑。详见 docs/wasm.md。

准备环境:安装 worker-build 构建工具

workers-rs 提供worker-build工具,它会完成三件事:把 crate 编译到wasm32-unknown-unknown目标、对输出运行 wasm-bindgen、写出 JavaScript 入口文件shim.mjs。安装只需两条命令:

rustup target add wasm32-unknown-unknown cargo install worker-build

仓库里自带一个完整的 Rust 示例,可以直接参考 examples/wasm/README.md。

编写 Rust Durable Object:计数器示例

以官方 Rust 计数器为例,核心代码非常短——一个Counter类处理每个/c/<名字>路径的计数器:

#[durable_object(fetch)] pub struct Counter { state: State } impl DurableObject for Counter { async fn fetch(&self, req: Request) -> Result<Response> { let n: u64 = self.state.storage().get("n").await.ok().flatten().unwrap_or(0); let n = n + 1; self.state.storage().put("n", &n).await?; Response::from_json(&json!({ "name": name, "n": n, "lang": "rust" })) } }

完整源码见 examples/wasm/src/lib.rs,crate 配置(cdylib+worker依赖)见 examples/wasm/Cargo.toml。

wrangler.jsonc只需把main指向构建产物,并声明 Durable Object 绑定与迁移:

{ "name": "counter-demo-rs", "main": "build/worker/shim.mjs", "compatibility_date": "2026-01-01", "durable_objects": { "bindings": [{ "name": "COUNTER", "class_name": "Counter" }] }, "migrations": [{ "tag": "v1", "new_sqlite_classes": ["Counter"] }] }

对应文件:examples/wasm/wrangler.jsonc。

编译 WASM 并用 celld 部署

构建和部署总共只有两条命令:

worker-build --release celld deploy . --bucket s3://my-cells-bucket

celld deploy会自动发现 WASM 导入、把.wasm文件上传到 bundle 旁边,并给部署打上wasm-v1特性标记。如果你的集群里有旧版本节点不支持该特性,部署时会立即报错,而不是等到请求时才失败。

运行阶段还有两层性能保障:

  1. 每个 WASM 模块对全进程只编译一次,之后的每个 isolate 都复用编译结果
  2. 冷激活 cell 时无需重复支付编译开销

验证运行:访问你的自托管 Durable Object

启动节点后,用 curl 验证状态持久化:

curl http://localhost:8080/c/hello # {"lang":"rust","n":1,"name":"hello"} curl http://localhost:8080/c/hello # n 递增——状态保存在 cell 里 curl http://localhost:8080/c/other # 不同的 cell,独立计数

可以看到每次请求计数递增,而/c/other拥有自己独立的计数器——每个名字对应一个独立的 SQLite 数据库,这正是 Durable Object "按名字寻址"的核心模型。

注意事项与限制

  • 运行时 API 边界:celld 提供的是 Cloudflare 运行时 API 面,workers-rs 中映射到缺失功能的 API 不可用,完整清单见 docs/cloudflare-compat.md
  • 体积计入部署限制:WASM 字节数和 JavaScript 一样占用部署大小配额
  • 编译失败会明确报错:无法编译的模块会抛出带文件名的WebAssembly.CompileError
  • shim 的 Proxy 包装:worker-build 生成的 shim 用 JavaScript Proxy 包裹导出,celld 会透过该包装解析入口类和 Durable Object 类

更多细节(如 Worker Loader 动态加载 WASM)见 docs/wasm.md,项目整体使用方式参考 docs/README.md。

总结

用 celld 跑 Rust 的路径可以归纳为:worker-build编译出 shim + WASM →wrangler.jsonc指向 shim →celld deploy上传。整个过程你不需要写一行 JavaScript,Rust 代码即可获得分布式 Durable Object 的全部能力:每对象独立 SQLite、桶复制持久化、按名字寻址。对于想在自己基础设施上部署有状态 Worker 的团队,这是一条从源码到生产的最小链路。

【免费下载链接】celldself-hosted, distributed Durable Objects项目地址: https://gitcode.com/GitHub_Trending/ce/celld

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 12:50:20

电商测试岗校招笔试解析:从业务全局到用例设计

每年校招季&#xff0c;测试岗的笔试题目一出来&#xff0c;总有人对着满屏的业务场景题发懵。美丽联合2019届校招测试类笔试题在我印象里就是这种典型——整张卷子几乎没有死磕纯算法&#xff0c;反倒把大篇幅给了电商业务逻辑、场景设计、网络协议和数据库操作。很多人拿到通…

作者头像 李华
网站建设 2026/8/31 12:48:49

GATE与检查点模式:stitch-skills如何让AI Agent安全行驶

GATE与检查点模式&#xff1a;stitch-skills如何让AI Agent安全行驶 【免费下载链接】stitch-skills A library of Agent Skills designed to work with the Stitch MCP server. Each skill follows the Agent Skills open standard, for compatibility with coding agents suc…

作者头像 李华
网站建设 2026/8/31 12:47:21

Uber AI原生SDLC实践:70%代码由Agent生成背后的工程体系

这次我们来看 Uber 在 AI 工程实践上的一个公开分享&#xff1a;70% 的代码由 Agent 生成。这个数字在 2025 年的 AI 辅助编程浪潮里不算最激进&#xff0c;但放在 Uber 这种体量的工程团队里&#xff0c;意义完全不同。它不是实验室里跑通一个 Demo&#xff0c;而是把 AI Agen…

作者头像 李华
网站建设 2026/8/31 12:41:26

Harness如何设计团队架构:Phase 2的3个关键子步骤详解

Harness如何设计团队架构&#xff1a;Phase 2的3个关键子步骤详解 【免费下载链接】harness A meta-skill that designs domain-specific agent teams, defines specialized agents, and generates the skills they use. 项目地址: https://gitcode.com/GitHub_Trending/harn…

作者头像 李华