Cloudflare Computer,装在 Durable Object 里的文件系统

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

Cloudflare Computer 将文件系统置于 Durable Object 的 SQLite 中,执行环境作为可插拔外设,支持容器、isolate shell 和 JavaScript 三种后端。权威态单一存储,同步通过 rev 计数器增量进行,容器用 FUSE 挂载,isolate 直接读写。性能上元数据操作优于真盘,但大文件较慢,适合 agent 工作区,不适合大型 monorepo。

🔎

延伸解读

架构反转:权威态与执行环境解耦

Cloudflare Computer 将文件系统作为权威态存储在 Durable Object 的 SQLite 中,而执行环境(容器、isolate)成为无状态外设。这种设计颠覆了传统沙箱中“文件在容器内”的模式,使得容器重启或 isolate 回收不会影响数据持久性。对于构建 agent 工作区的开发者,这意味着可以更灵活地选择或切换执行后端,而无需担心状态丢失。

同步协议:增量与幂等设计

同步依赖单调递增的 rev 计数器,通过增量推送和拉取实现双向同步。协议设计注重效率与容错:只传输变更的 chunk 哈希,缺失块才传输内容;崩溃恢复从批次边界继续,重复条目被幂等丢弃。这种设计适合网络不稳定或需要频繁同步的场景,但目录重命名需要 O(子树) 的条目更新,可能成为性能瓶颈。

性能权衡:元数据快,大文件慢

官方基准显示,元数据操作(如 stat、rm、mkdir)优于真盘,但大文件顺序 IO 明显较慢(64 MiB 读慢 30 倍)。原因在于每 512 KiB 的哈希计算和内容寻址存储。因此,该方案适合以元数据操作和小文件为主的 agent 工作区,不适合大型 monorepo 或大文件密集负载。开发者需根据实际负载评估是否适用。

安全与隔离:限制与注意事项

isolate 后端通过封闭网络出口、限制命令集和模块解析来增强安全性,但文档提醒“路由不是鉴权”,公网网关需自行校验 backend 参数。此外,runtime.exec() 返回后 DO 可能被驱逐,需排空事件流或使用 setAlarm 保持活跃。这些细节对生产部署至关重要,开发者应仔细阅读规格文档并做好相应处理。

Q&A

Cloudflare Computer 是什么?

Cloudflare Computer 是一个预览项目,将虚拟文件系统放在 Durable Object 的 SQLite 中,执行环境作为可插拔外设,支持容器、isolate shell 和 JavaScript 三种后端。

Cloudflare Computer 的三种后端分别是什么?

三种后端是:container(真容器加 FUSE 挂载)、isolate shell(Dynamic Worker 里跑 just-bash)、isolate JavaScript(Dynamic Worker 里求值 ES module)。

Cloudflare Computer 如何实现文件同步?

同步通过 rev 计数器增量进行,push 在 exec 前将新 rev 推给容器,pull 在 exec 后从容器拉取变更,使用游标和批次处理,支持断点续传和幂等重放。

Cloudflare Computer 的性能表现如何?

元数据操作优于真盘,如 stat 0.91x、rm 0.66x、mkdir 树 0.74x;但大文件较慢,纯读 64 MiB 比真盘慢 30 倍,copy 慢 40 倍。

Cloudflare Computer 适合哪些场景?

适合 agent 工作区,不适合大型 monorepo,因为工作区约 10 GB 上限,容器侧整棵树在内存里,大文件 IO 慢。

如何使用 Cloudflare Computer?

通过 npm install @cloudflare/computer,创建 Workspace 实例并配置后端,使用 workspace.fs 和 workspace.runtime 进行文件操作和执行。

🏷️

标签

➡️

继续阅读