Cloudflare Computer同步幂等性设计:崩溃恢复与重复应用的零成本保证 Cloudflare Computer同步幂等性设计崩溃恢复与重复应用的零成本保证【免费下载链接】computerGive your agent a computer 项目地址: https://gitcode.com/GitHub_Trending/computer1/computerCloudflare Computer 是 Cloudflare 官方的「给 Agent 一台计算机」项目它把 SQLite 支撑的虚拟文件系统放进 Durable Object通过 FUSE 挂载到沙箱容器并在两侧之间跑一条双向增量同步协议。这篇文章带你拆解它的同步幂等性设计——为什么崩溃恢复、连接中断、重复投递最终都接近零成本。️ 架构速览两份文件副本一条同步协议Cloudflare Computer 始终维护同一棵目录树的两个副本DO 侧位于 Durable Object 内、SQLite 支撑的虚拟文件系统是跨越重启的唯一权威状态容器侧暴露给沙箱的 FUSE 挂载容器内每次写入都会被打上递增的修订号。数据沿两个方向、各按各的节奏流动命令执行前DO 把未送达的变更推给容器push命令结束后DO 把容器侧的变更拉回 SQLitepull。一次完整的exec()往返就是「推送 → 挂载水合 → 执行 → 拉取 → 应用」六步。完整协议设计可参见 docs/02_sync_protocol.md。⚡ 幂等的第一道防线按路径合并的「最终状态」传输很多同步系统记录操作写了一次、删了一次、重命名了一次恢复时必须按序重放——这是复杂度的根源。Cloudflare Computer 反其道而行线上只传最终状态不传操作。关键在 coalesceChanges两个水位之间同一个路径被重写 5 次线上只合并成 1 条——最新状态胜出。线上记录只有两种存活条目和删除墓碑tombstone。这意味着重命名不需要专门的 opcode表达为新路径的存活条目 旧路径的墓碑冷启动的接收方无需任何历史上下文就能应用应用方无需按操作顺序重放每条条目独立对照接收方当前状态判断重复应用多少次结果都一样。这就是幂等的前提协议让重复投递成为常态场景而不是异常。️ 重复应用零成本的秘诀alreadyApplied 检查应用阶段applyChanges 对每条入口先做快速比对本地状态已匹配的直接丢弃。比较规则在 alreadyApplied 中按节点类型细分文件比对清单哈希。哈希由文件的分块列表计算得出见 computeManifestHash内容寻址保证相同分块永远产生相同哈希是否相同一次比对即可目录只比对 mode故意不比 mtime——避免目录的时间戳漂移变成无谓的同步流量符号链接比对目标路径与 mode删除直接强制删除已经不存在也视为成功apply.ts。还有一个更妙的收益被丢弃的条目不会提升本地修订号所以下一轮推送不会把它原样弹回来。重复应用不仅安全而且安静——这正是零成本三字的含义。 崩溃恢复指南(rev, path) 游标与每批次检查点崩溃之后最多重取多少数据答案是一个批次256 条。拉取侧按 PULL_BATCH_SIZE 256 分批流式处理条目每批提交后立刻把持久化游标推进到该批最后一条的(rev, path)writeFetchCursor。注意这是两级坐标rev是修订号每次变更原子地加一path是正交的第二坐标记录同一 rev 内部推进到了哪一条。一次大型目录重命名会在同一个 rev 里盖下海量条目。若只能停在 rev 边界恢复一次崩溃就要重做整个 rev有了path坐标就能在 rev 中间恢复。源码注释说得非常直白sync-driver.ts游标推进故意不与 apply 原子化——崩溃导致重复取回同一批时alreadyApplied会默默吸收它。推送侧同理接收方确认并回显appliedPushCursor之后发送方才推进pushRev。中途断开则水位未动下次重试整批重放由接收方的幂等检查兜底。DO 侧的所有水位都持久化在_vfs_watermark表中重启后新实例直接从旧进度继续容器进程重启内存数据库被清空时同步驱动会在重连后调用 reconcileWatermarks 把分叉的游标重置归零从 rev-0 基线增量重建——依然不用全量传输。 常见故障场景速查表故障场景恢复机制保证DO 重启水位持久化于_vfs_watermark表新实例接着旧进度走拉取中途崩溃游标按批次推进同批重取浪费工作 ≤ 256 条幂等吸收推送中途断线pushRev未推进整批重放接收端alreadyApplied丢弃已应用条目容器进程重启重连 reconcileWatermarks从 rev-0 基线增量重建并发 push/pull每 Workspace 的 FIFO 队列串行执行失败不传染队列 新手注意幂等 ≠ 合并有一个边界值得说清上述幂等保证的是同一状态应用多次必然收敛但两个不同状态同时写同一路径仍是最后写入者胜出——没有合并、没有报错和共享 NFS 挂载的语义一致。对一个 Agent、一个容器的常见用法同步本质上是持久化机制不存在冲突若多个 Agent 共写一个文件或交接同一个工作区建议用显式的workspace.pull()作为交接点。详见 docs/02_sync_protocol.md 的 Conflict semantics 一节。 小结最终状态传输按路径合并、墓碑表达删除不需要操作重放幂等是协议属性alreadyApplied重复应用只做一次哈希比对即丢弃连本地修订号都不提升——真正意义上的零成本(rev, path)两级游标崩溃恢复的重取量恒定有界≤ 256 条可预测、可压测持久水位 重连对账DO 重启与容器重启各有一条明确的恢复路径。四套机制叠加让 Cloudflare Computer 的同步层不怕重传——这正是把一台可以长期可靠运行的计算机交给 Agent 的底层工程底气。【免费下载链接】computerGive your agent a computer 项目地址: https://gitcode.com/GitHub_Trending/computer1/computer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考