ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

为什么background-agents选择Cloudflare?Durable Objects按会话隔离深度解析

为什么background-agents选择Cloudflare?Durable Objects按会话隔离深度解析 为什么background-agents选择CloudflareDurable Objects按会话隔离深度解析【免费下载链接】background-agentsAn open-source background agents coding system项目地址: https://gitcode.com/GitHub_Trending/ba/background-agentsbackground-agentsOpen-Inspect是一个开源的后台编程智能体系统你发一条提示AI 会话就在云端沙箱里独立跑起来可以关电脑、并行多个任务、多人实时协作。它的控制平面Control Plane部署在Cloudflare上核心设计是——每个会话独占一个 Durable ObjectsDO实例实现彻底的按会话隔离。本文带你从零理解这个架构为什么成立、以及它是怎么做到的。一、先搞懂后台智能体和会话是什么传统编程助手要求你全程在线你打字 → AI 回 → 你看 → 你再打字。而 background-agents 把这两件事解耦了Fire and forget睡前发现一个 bug发起一个会话早上起来看 PR并行会话同一个问题用多种方案同时跑互不阻塞多人协作Multiplayer把会话链接发给同事实时看到彼此的操作这里的会话Session是整个系统的最小工作单元它绑定仓库最多 10 个、保存消息/事件/产物、关联一个沙箱Sandbox——沙箱里有完整的 Node.js、Python、git、浏览器自动化环境AI 在其中真正执行代码。架构上系统分为两层层运行位置职责控制平面CloudflareWorkers Durable Objects会话状态管理、实时推送、沙箱生命周期编排、鉴权数据平面Modal / Daytona / E2B / Vercel 等沙箱后端真正运行 AI 和代码的隔离环境控制平面不执行代码只管状态和消息路由——这正是选择 Cloudflare 的起点。二、为什么是 Cloudflare四个关键理由1. Durable Objects天然的按会话隔离原语一个后台智能体系统最棘手的工程问题成百上千个并发会话每个都有自己的内存状态、WebSocket 连接和事件流如何互不干扰Cloudflare 的 Durable Objects 给出的答案很直接一个 DO 实例 一个全局唯一的单点状态机。所有针对某个会话的请求都会被路由到同一个实例上串行处理天然消除了多实例部署中的锁、竞态和一致性问题。background-agents 的做法见 packages/control-plane/src/cloudflare/session-runtime-dispatch.ts会话 ID 直接作为 DO 的名字namespace.idFromName(sessionId)每个会话 ID 对应且仅对应一个 DO 实例请求通过平台 RPC 送达。这意味着隔离不是靠小心写代码实现的而是由平台架构保证的会话 A 的事件洪峰物理上不可能碰触会话 B 的状态。2. DO 内嵌 SQLite每个会话自带私有数据库每个会话的 DO 内部还嵌了一个 SQLite 数据库通过ctx.storage.sql访问存放该会话的消息、事件、产物等高频读写数据。官方文档 docs/HOW_IT_WORKS.md 的说法是每个会话在自己的 Cloudflare Durable Object 中获得独立的 SQLite 数据库即使数百个会话并发也能保证隔离和高性能。会话级数据留在本地只有需要全局共享的数据会话索引、仓库元数据、加密后的 Secrets才写入全局 D1 数据库——读写路径被清晰地按作用域切分。3. WebSocket Hibernation实时流式推送几乎零成本会话要实时把 token 流、工具调用事件推给所有加入的客户端多人协作场景可能有很多人同时挂着。传统方案里大量长连接空闲时也是持续烧钱的。DO 的Hibernatable WebSockets让连接在空闲时冬眠连接活着但不产生计算费用有消息进来才唤醒实例。配合alarm()定时器机制见 packages/control-plane/src/cloudflare/durable-object.ts 中的onScheduledDeadline委托会话的运行截止时间检查也能在实例休眠期间按时触发。4. 边缘网络 按需付费契合长会话负载会话可能几分钟不活动也可能一分钟产生上千个事件负载极度不均匀。Cloudflare 的按用量计费 边缘全球节点让高峰扛得住、低谷不花钱成为默认行为而不是需要自己调优的目标。三、深入一个 DO 里到底装了什么打开核心类SessionDOpackages/control-plane/src/cloudflare/durable-object.ts每个 DO 实例承载四类能力SQLite 存储会话私有状态initSchema(this.platform.storage.sql)在每次激活时初始化WebSocket Hubfetch()中识别Upgrade: websocket请求并完成升级所有客户端连接汇聚在此事件流与后台任务webSocketMessage / webSocketClose处理实时消息alarm()处理调度沙箱生命周期沙箱的 WebSocket 断开不会杀死沙箱——桥接端自动重连控制平面同时安排心跳检查防止假死一个值得称道的工程设计是平台抽象层业务逻辑面向SessionPlatform接口编程见 packages/control-plane/src/session/ 与 packages/control-plane/src/platform-ports.tsCloudflare 只是其中一个适配器packages/control-plane/src/cloudflare/session-platform.ts。这也让系统可以整体搬到别的底座——仓库里就提供了 AWS 容器的替代部署docs/AWS_BRING_UP.md、docker-compose.aws.yml。四、D1 / R2 / KV全局数据的分工DO 负责会话内全局共享数据则按用途分流绑定关系见 packages/control-plane/wrangler.jsonc服务绑定存什么D1SQL 数据库DB会话索引、仓库元数据、AES-256-GCM 加密的 SecretsR2对象存储MEDIA_BUCKET会话媒体、截图等二进制产物KV键值存储REPOS_CACHE仓库列表等热点缓存迁移脚本terraform/d1/migrations/记录了这张全局表从 0001 到 0079 的完整演化包括会话索引优化、PR 关联、RBAC 审计等可以当作一份数据模型演进史来读。五、如何动手阅读这份架构按这个顺序读源码30 分钟可以建立全局认知README.md —— 架构图、功能清单、安全模型注意目前为单租户设计docs/HOW_IT_WORKS.md —— 为什么选 Cloudflare一节有官方视角packages/control-plane/src/cloudflare/ ——durable-object.tsDO 外壳、session-platform.ts平台适配、websocket-upgrade.ts连接升级docs/GETTING_STARTED.md 与 docs/SETUP_GUIDE.md —— 本地跑起来 部署六、总结background-agents 选择 Cloudflare本质上是选择了一组与后台长会话负载高度匹配的原语⚡Durable Objects会话 ID 即对象 ID隔离由架构保证而非代码纪律内嵌 SQLite会话私有状态高频读写不出实例WebSocket 冬眠实时协作流零空闲成本按用量计费不均匀负载下的成本天然平滑这套控制平面轻、数据平面重的分工加上清晰的平台抽象层是它最值得借鉴的设计。【免费下载链接】background-agentsAn open-source background agents coding system项目地址: https://gitcode.com/GitHub_Trending/ba/background-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表