行追蹤器詳解:并發(fā)exec狀態(tài)跟蹤的完整設計指南)
Cloudflare Computer執(zhí)行追蹤器詳解并發(fā)exec狀態(tài)跟蹤的完整設計指南【免費下載鏈接】computerGive your agent a computer 項目地址: https://gitcode.com/GitHub_Trending/computer1/computerCloudflare Computer 是一個為 AI Agent 提供一臺計算機的開源項目Give your agent a computer 它把虛擬文件系統(tǒng)和可插拔的執(zhí)行后端封裝在 Durable Object 中。當多個exec命令同時在不同后端容器、Worker Shell、Worker JavaScript上并發(fā)運行時系統(tǒng)如何準確跟蹤每個執(zhí)行execution屬于哪個運行時runtime答案就是ExecutionRuntimeTracker執(zhí)行追蹤器——本文帶你用最短的時間理解它的狀態(tài)跟蹤設計。Cloudflare Computer 的整體架構Durable Object 持有權威狀態(tài)執(zhí)行面可插拔為什么并發(fā) exec 需要執(zhí)行追蹤器一個 Workspace 可以同時注冊多個后端workspace.runtime.exec()是唯一的執(zhí)行入口。每條命令執(zhí)行后系統(tǒng)會拿到一個executionId后端容器可能隨時被替換reconnect、重建。這時候有兩個經典問題后續(xù)操作該發(fā)給誰對某條 exec 執(zhí)行killExec、disposeExec、拉取事件流getExec時必須確認它當前所在的運行時運行時被換了怎么辦如果容器已重建舊 exec 已經丟失系統(tǒng)要快速、明確地報錯而不是把命令發(fā)到錯誤的運行時上。執(zhí)行追蹤器就是為這兩個問題設計的記錄最近活躍的執(zhí)行 → 所屬運行時的映射關系。雙層結構有界內存 LRU SQLite 持久化追蹤器的核心實現(xiàn)非??酥浦挥?100 行左右位于 execution-runtime-tracker.ts。層級實現(xiàn)作用內存層Map實現(xiàn)的有界 LRU默認1024條快速命中避免無界增長持久層SqlExecutionRuntimeStoreSQLite 表computer_execution_runtimeDurable Object 重啟/緩存淘汰后恢復所有權幾個關鍵設計點LRU 淘汰#touch()方法在讀取時把條目重新插入到 Map 末尾利用 Map 的插入順序把最久未訪問的鍵淘汰——最近活躍的執(zhí)行永遠不會先被擠出去持久兜底內存命中不了時回查 SQLite查到的映射會被回填進內存緩存樂觀刪除delete(key, expectedRuntimeId)只有當前值與期望的 runtimeId 一致時才真正刪除防止并發(fā)場景下晚到的舊操作誤刪新執(zhí)行剛寫入的映射。Workspace 構造時這樣裝配追蹤器見 workspace.tsthis.#executionRuntimes new ExecutionRuntimeTracker( 1_024, new SqlExecutionRuntimeStore(this.#db), );一次并發(fā) exec 的完整狀態(tài)跟蹤流程整個閉環(huán)體現(xiàn)在 workspace.ts 的命令適配層中流程大致是exec 返回時記憶每條命令的返回信封envelope自帶runtimeId通過#rememberExecutionRuntime()寫入追蹤器鍵由JSON.stringify([backendId, executionId])組合天然區(qū)分不同后端下的同號執(zhí)行 ID后續(xù)操作前查表getExec/killExec/disposeExec先查追蹤器拿到期望的 runtimeId斷言校驗真正下發(fā)前assertExecutionRuntime()會把期望值與當前運行時對比。若容器已被替換立即拋出WorkspaceExecutionLostError錯誤碼EEXEC_LOST明確告知這條執(zhí)行在運行時替換時丟失了清理收尾disposeExec成功后用帶期望值的樂觀刪除清理映射避免臟數(shù)據(jù)殘留。這樣即使緩存被淘汰、甚至 Durable Object 整體重建新的 Workspace incarnation持久層也能把誰屬于哪個運行時的信息恢復回來——測試用例 execution-runtime-tracker.test.ts 覆蓋了 LRU 淘汰、持久回退、跨實例恢復和樂觀刪除全部場景。設計亮點小結?有界內存LRU 上限固定緩存占用不隨 Durable Object 生命周期無限增長?持久兜底SQLite 保證跨實例incarnation的所有權連續(xù)性?失敗即明確運行時不匹配時報EEXEC_LOST而不是靜默執(zhí)行到錯誤環(huán)境?并發(fā)安全樂觀刪除 鍵中攜帶后端 ID雙保險防并發(fā)誤操作。相關資料追蹤器實現(xiàn)packages/computer/src/execution-runtime-tracker.tsWorkspace 集成packages/computer/src/workspace.ts行為測試packages/computer/src/execution-runtime-tracker.test.ts運行時接口規(guī)范docs/05_runtime_interface.md同步協(xié)議含并發(fā)變更說明docs/02_sync_protocol.md可運行示例examples/container、examples/worker-shell【免費下載鏈接】computerGive your agent a computer 項目地址: https://gitcode.com/GitHub_Trending/computer1/computer創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考