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 仓库。

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

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

小夜