Fetching metadata from the HF Docker repository... 24 days ago
-
perf(chathistory): 拆分读写锁并合并流式落盘,修复 HF Space 整体卡顿
luckfun233
线上表现为 API 响应变慢、后台面板加载历史对话卡顿。根因是对话历史的落盘
路径把整个服务串行化了:
- Store 只有一把互斥锁,saveLocked 在持锁状态下完成 JSON 序列化 + fsync +
rename;而 Snapshot / Get(后台面板读历史)用的是同一把锁,因此被流式写入
直接阻塞。
- progress() 在每个 SSE 分片上被调用(250ms 节流),每次都重写包含 messages /
history_text / final_prompt 等请求期内不变字段的完整记录。HuggingFace Spaces
的 /data 是 bucket 对象存储卷,单次 fsync 的延迟远高于本地盘,几十秒的响应
就会触发数百次高延迟写入。
改动:
- 拆成 mu(仅内存状态,持锁期间不做 I/O)与 writeMu(仅串行化落盘),后台
面板读取不再阻塞在磁盘上。
- 新增 UpdateParams.Background:流式进度只写 <id>.live.json 增量文件,由单个
自终止的合并协程按 400ms 窗口合并落盘,彻底脱离 SSE 读取循环;终态更新仍
同步回写完整文件并清理增量文件。
- 去掉 chat history 的 fsync,保留「临时文件 + rename」的原子性。
- 后台面板轮询降频(列表 1.5s→3s,详情 750ms→1.5s)。
实测单次进度写入从 84,475 B 降至 246 B(343x)。旧数据无需迁移即可加载。
Start 与终态 Update 仍同步返回写盘错误,保持既有错误语义。
-
Initial commit: ds2api with HF Spaces support
204848