docs: update PROGRESS.md - 串行上传+5MB分块+看门狗+chunk_size防护

This commit is contained in:
ericwyuan
2026-08-20 14:20:00 +08:00
parent 5915cf4be3
commit a9a1b1dda5

View File

@@ -1,6 +1,6 @@
# 项目进度追踪
> 最后更新: 2026-08-20 12:16
> 最后更新: 2026-08-20 14:20
## 服务运行状态
@@ -125,6 +125,9 @@
| 45 | **NAS Poller 线程** — 定期从 Edge /api/edge/results 拉取处理结果写 MariaDB | `02da23e` | 2026-08-20 |
| 46 | **fix: dispatcher/poller 超时分离模式** — timeout 改为 (connect, read) 元组stale_timeout 3600→600s | `4f0f19b` | 2026-08-20 |
| 47 | **异步队列端到端验证** — task 312 (5.7MB e2e clip): 上传38s + Edge处理54s + Poller落库 = 93s 总耗时event_id=12 落库 PASS | ✅ 完成 | 2026-08-20 |
| 48 | **分块断点续传上传** — 20MB/块 + 分块级重试(3次) + 断点查询 + /assemble 合并入队 | `b6c13a9` | 2026-08-20 |
| 49 | **串行上传 + 看门狗** — Dispatcher limit=1 避免带宽争抢 + 线程存活检测(is_alive) + 60s 看门狗自动重启 + 退避缩短至 30×(n+1)s | `881ea3f` | 2026-08-20 |
| 50 | **fix: 分块大小 5MB + chunk_size 变更防护** — Edge 端 total_chunks 变更自动清理旧分块NAS 端断点续传检测 total_chunks 不匹配时从头上传timeout (60,180) | `5915cf4` | 2026-08-20 |
### 待完成
@@ -133,7 +136,7 @@
| 48 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 |
| 49 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 |
| 50 | daily_summaries 每日摘要 | - | 低 |
| 51 | **视频预压缩** — 360MB 生产视频 HTTP 上传超时/断连,需在 NAS 端预压缩后再上传 Edge | - | |
| 51 | **视频预压缩** — 360MB 生产视频 HTTP 上传超时/断连,需在 NAS 端预压缩后再上传 Edge5MB 分块已缓解但 72 块仍需 ~18min | - | |
## 技术决策记录
@@ -153,6 +156,10 @@
14. **异步任务队列架构 (SQLite + TokenBucket)** - 原 Dispatcher 同步推送 360MB 视频至 Edge 等待 AI 处理,单任务阻塞 15+ 分钟导致后续任务积压。重构为NAS Dispatcher 仅上传视频入 Edge SQLite 队列202 立即返回)→ Edge 消费者线程异步处理TokenBucket 按 API 限制 2x 速率Gemini 1000 RPM / NVIDIA 40 RPM→ NAS Poller 定期拉取结果写 MariaDB。e2e 验证5.7MB 视频全链路 93s (上传 38s + 处理 54s + 落库 1s)
15. **超时分离模式** - `requests.post(timeout=300)` 对大文件上传无总超时限制per-write 不触发),改为 `timeout=(10, 60)` 分离连接/读取超时,配合 stale_timeout 600s 回收僵尸任务
16. **生产视频预压缩(待实施)** - 360MB 30min 1080p H.264 视频跨公网 HTTP 上传超时/断连,需在 NAS 端 FFmpeg 预压缩(降分辨率/码率)后再上传
17. **串行上传策略** - Dispatcher 轮询 limit=1一次只处理一个任务避免多任务并行上传争抢带宽。NAS 上行带宽仅 ~1Mbps并行上传会导致所有任务都超时
18. **5MB 分块大小** - 实测 NAS→Oracle 上行带宽 ~1Mbps1MB 需 6s5MB 需 35s10MB 需 85s。20MB 分块在 ~1Mbps 下需 170s 超出 120s 读取超时。5MB 分块 + timeout(60,180) 在 ~35s/块 下有充裕余量72 块 360MB 约 18min 完成上传
19. **chunk_size 变更防护** - Edge 端 upload_chunk 检测 total_chunks 变更(由 chunk_size 变化导致),自动清理旧分块防止混合不同大小分块导致 assemble 后文件损坏。NAS 端 _query_uploaded_chunks 比对 expected_total != edge_total 时跳过断点续传
20. **看门狗机制** - app.py 启动 daemon 看门狗线程,每 60s 检查 scheduler/dispatcher/poller 线程 is_alive(),崩溃自动 check_and_restart()。/api/status 改用 thread.is_alive() 替代 _running 标志,防止线程假死误报
## 真实视频性能基准测试 (2026-08-20)