不换 Deno:10 万行 agent 平台迁移 Cloudflare Workers 实战复盘
uriwa · reddit · 2026-10-20
prompt2bot 团队把 10 万行 Deno 代码的 agent 平台后端从 Deno Deploy 迁到 Cloudflare Workers + SQLite 版 Durable Objects,且完全保留 Deno 工具链。Durable Object 是按名字寻址的全局唯一单线程 V8 isolate,自带私有 SQLite 和 alarm 定时器,SQLite 查询是微秒级同步 C++ 调用。
迁移中踩过的坑与解法:
- 保留 Deno 测试套件:在 deno.json 里把 cloudflare:workers 映射为 10 行 stub 类,deno test 可原生跑;部署时用 deno bundle 换回真实 DurableObject 类、shim globalThis.Deno、Zod v4 设 jitless(Workers 禁 new Function)。
- 128MB 内存天花板:js-tiktoken 首次调用膨胀 +43MB、27.5 万词词典 +35MB、pdf.js 三份重复构建曾反复 OOM,构建期剥离静态表释放约 80MB。
- 自研 Deno KV 模拟层:Cloudflare KV 最终一致、无原子事务,他们在常驻美东的 SQLite Durable Object 上实现 drop-in Deno.Kv,tuple key 用类型标签+20 位零填充编码,atomic 事务走同步单线程 SQLite。
- 508 Loop 之谜:Cloudflare 在 C++ 边缘层把入站 cdn-loop: deno 头复制到出站请求,Deno Deploy 看到自己的 hash 直接 508;另外 waitUntil 在返回 200 后有 30 秒硬上限,会掐断多步 agent 回合。
- 最终架构:按会话分片 Runner Durable Object(runner:<botId>:<conversationId>),靠 alarm() 在干净 IoContext 中启动任务,每个活跃会话独享热 isolate+亚毫秒 SQLite 状态,1 到 1 万并发会话都无需队列。
「编程与Agent」频道最新
- 用 Codex 填会议报备资料,6 分钟搞定 10 页文档 — vista8 · 2026-10-20
- Flow 时代回忆:他曾手动把项目 TS→Flow→TS 来回重写三轮 — cnakazawa · 2026-10-20
- 「人类必须逐行审代码」已过时:生成与审查都该自动化 — nptacek · 2026-10-20
- Hermes 智能体做出零素材文件的暗黑 ARPG,画面音效全靠代码实时生成 — Teknium · 2026-10-20
- Vibe42 让手机随时接管家中电脑上的 AI 编码 Agent — yihui_indie · 2026-10-20
- 实测:用户按停止后 AI 仍在偷偷生成,除非真正断开连接 — No-Peanut-6988 · 2026-10-20