DeepSeek Harness projection 分片預熱插件

在 DSH 的 projection 開發中,大會話的冷摺疊(Cold Fold)處理是性能瓶頸。DSH 0.1.0-rc.6 版本中,SessionProjectionRegistry.cellFor() 在 cell 冷時會對整個 session.events 逐事件 apply()。實測 74 萬事件會話的冷摺疊會阻塞 20 分鐘以上,導致 Node 事件循環凍結,所有 unary RPC 超時(30s),前端表現爲 signal timed out。

DSH projection warmup 插件通過 live session chunked warmup 和 fork cache backfill 機制,消除上述事件循環阻塞。

核心功能

該插件提供以下能力:

  1. 分片預熱:針對超過閾值的事件分片重放 cells。會話進入(created/resume)且事件數超過閾值時,搶在首次同步冷摺疊前,每 chunkSize 個事件通過 setImmediate 讓出事件循環,摺疊完成後直寫 registration.cells(WeakMap)。
  2. Fork 子會話緩存回填:建立投影緩存行。fork 子會話(header.parentSession 存在)預熱完成後立即 cache.write(child),否則該會話被放棄時永遠沒有緩存行,下次打開歷史 coldSnapshot 會走 readFrom(0) 全量讀。
  3. 磁盤冷會話後臺補行:掃描缺緩存行的大日誌,流式 parse + fold 後 putSoft 寫行。
  4. API 支持:提供統計與配置 API。

安裝

使用官方安裝命令添加插件:

dsh plugin --profile web add github:orangeofcarl0-sys/dsh-projection-warmup

典型用法

插件提供 HTTP API 用於查詢狀態與配置:

# 統計與重置
POST http://127.0.0.1:3080/dsh-projection-warmup/api/stats/get
POST http://127.0.0.1:3080/dsh-projection-warmup/api/stats/reset

# 配置獲取與設置
POST http://127.0.0.1:3080/dsh-projection-warmup/api/config/get
POST http://127.0.0.1:3080/dsh-projection-warmup/api/config/set

開啓磁盤冷會話後臺補行功能時,需調用配置接口:

{
  "key": "diskBackfill.enabled",
  "value": true
}

適用場景與注意

插件運行在當前 DSH 進程權限下,安裝前應檢查源碼與許可證。

已知侷限:

  • 同步解碼限制:冷會話全量 readFrom(0) 中的同步解碼(zstd)無法在插件層安全分片,對大文件仍會凍結事件循環數秒至數十秒。
  • 內存風險:超大會話(70萬+事件)加載本身有內存 OOM 風險;啓動期補行與 dsh 自身的啓動投影摺疊疊加會推高內存峯值。
  • 兼容性:默認開啓 live 會話分片預熱與 fork 子會話緩存回填;磁盤冷會話後臺補行默認關閉,需按需開啓。

總結

該插件將大會話的冷摺疊時間從分鐘級降低至毫秒級。通過分片與回填機制,顯著減少歷史加載與 UI 操作的超時概率。更多詳情可參考 GitHub 倉庫。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜