ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

celld跑Rust:3步用workers-rs编译WASM并在自托管Durable Object中运行 celld跑Rust3步用workers-rs编译WASM并在自托管Durable Object中运行【免费下载链接】celldself-hosted, distributed Durable Objects项目地址: https://gitcode.com/GitHub_Trending/ce/celldcelld 是一个自托管的分布式 Durable Object 运行时内置 V8 引擎可以直接执行 Wrangler 打包的 Worker 应用。如果你想在 celld 上用 Rust 编写有状态的 Worker只需借助 workers-rs 生态把 Rust 代码编译成 WASM再用celld deploy一键部署——本文带你完整走通这条链路。先认识 celld每个对象都有自己的数据库celld 是一个开源守护进程让你在自己的机器上运行 Cloudflare Workers 和 Durable Objects。它的核心设计非常简洁每个 Durable Objectcell都是一座独立的 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) - ResultResponse { 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.rscrate 配置cdylibworker依赖见 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-bucketcelld deploy会自动发现 WASM 导入、把.wasm文件上传到 bundle 旁边并给部署打上wasm-v1特性标记。如果你的集群里有旧版本节点不支持该特性部署时会立即报错而不是等到请求时才失败。运行阶段还有两层性能保障每个 WASM 模块对全进程只编译一次之后的每个 isolate 都复用编译结果冷激活 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.CompileErrorshim 的 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上传。整个过程你不需要写一行 JavaScriptRust 代码即可获得分布式 Durable Object 的全部能力每对象独立 SQLite、桶复制持久化、按名字寻址。对于想在自己基础设施上部署有状态 Worker 的团队这是一条从源码到生产的最小链路。【免费下载链接】celldself-hosted, distributed Durable Objects项目地址: https://gitcode.com/GitHub_Trending/ce/celld创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表