docs: update PROGRESS.md - 异步队列架构 + e2e验证 + 超时修复

新增任务 #43-47:
- SQLite异步队列 + TokenBucket速率限制 (Gemini 1000/NVIDIA 40 RPM, 2x burst)
- NAS Dispatcher enqueue模式 + Poller线程
- 超时分离模式 (10s connect, 60s read) + stale_timeout 600s
- e2e验证: task 312 (5.7MB) 全链路 93s PASS

新增技术决策 #14-16
新增待办 #51: 生产视频预压缩 (360MB HTTP上传超时)
This commit is contained in:
ericwyuan
2026-08-20 12:18:58 +08:00
parent 4f0f19bccd
commit fb4ccb64dc

View File

@@ -1,13 +1,13 @@
# 项目进度追踪
> 最后更新: 2026-08-20 11:20
> 最后更新: 2026-08-20 12:16
## 服务运行状态
| 服务 | 节点 | 地址 | 状态 | 验证结果 |
|------|------|------|------|---------|
| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, Python 3.10 venv, API 全部测试通过 |
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | 新架构已部署(云端直出直存);`/api/edge/chat/ask` 实测 provider=nvidiaGemini→NVIDIA 降级成功) |
| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, gunicorn --threads 4, scheduler+dispatcher+poller 全部 running |
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | v2.0, SQLite 异步队列 + 消费者线程 + TokenBucket 速率限制 |
| MariaDB | NAS | 127.0.0.1:3306 | ✅ 运行中 | 10.11.11, 6 张表, utf8mb4 |
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | qwen2.5:7b仅智能问答兜底不参与视觉/融合) |
| Tailscale | Oracle ↔ NAS | 100.74 ↔ 100.70 | ⚠️ 待修复 | Tailscale 运行但端口不通当前用公网IP |
@@ -120,14 +120,20 @@
| 40 | **fix: Gemini timeout 30s→90s + 熔断器 threshold 3→5 cooldown 600→300** | `853cb21` | 2026-08-20 |
| 41 | **fix: dispatcher crash on invalid failure_stage** — Edge 返回 'process' 不在 ENUM 中导致 DataError 崩溃db_layer 加容错映射 + dispatcher per-task try/except | `d75c745` | 2026-08-20 |
| 42 | **视频管线批量处理验证** — task 291/297 SUCCESSNVIDIA 6 帧分析 ~15s/任务events + event_details 落库正确 | ✅ 完成 | 2026-08-20 |
| 43 | **异步任务队列架构** — Edge 端 SQLite 队列 + TokenBucket 速率限制 (Gemini 1000 RPM, NVIDIA 40 RPM, burst 2x) + 消费者线程 | `02da23e` | 2026-08-20 |
| 44 | **NAS Dispatcher 重构为 enqueue 模式** — 上传视频后立即返回 202不等 AI 处理结果 | `02da23e` | 2026-08-20 |
| 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 |
### 待完成
| # | 任务 | 依赖 | 优先级 |
|---|------|------|--------|
| 43 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 |
| 44 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 |
| 45 | daily_summaries 每日摘要 | - | 低 |
| 48 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 |
| 49 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 |
| 50 | daily_summaries 每日摘要 | - | 低 |
| 51 | **视频预压缩** — 360MB 生产视频 HTTP 上传超时/断连,需在 NAS 端预压缩后再上传 Edge | - | 高 |
## 技术决策记录
@@ -143,7 +149,10 @@
10. **关键帧自适应帧数** - 原固定 5-8 帧对长视频太稀疏30分钟仅8帧=每3.75分钟1帧改为随视频时长自适应候选帧 `clamp(duration_min×2, 30, 120)`,关键帧上限 `clamp(duration/150s, 8, 30)`。30分钟→12帧60分钟→24帧封顶30帧
11. **云端直出直存(架构重构)** - 本地 Ollama 完全移出视频链路:云端 VLMGemini 多图单请求 / NVIDIA 逐帧聚合)直接产出结构化 JSONEdge 仅 `format_cloud_result` 格式化/校验(无模型调用)后直存 NAS DB。根因CPU 版 Ollama 对无上限融合 prompt 预填充极慢导致 300s 超时
12. **Q&A 三模型降级编排** - 智能问答由 Edge `run_qa` 编排Gemini → NVIDIA → 本地 Ollama仅两云端都失败才启用本地兜底各适配器实现 `chat()` 纯文本接口
11. **FFmpeg 快速 seek 替代 fps 滤镜** - 原方案 `ffmpeg -vf fps=1/interval` 需全解码视频30min 360MB 视频在 ARM CPU 上需 180s+(超 120s 超时)。改为逐帧 `ffmpeg -ss <ts> -frames:v 1` 快速 seek仅 33s6-8x 提速)
13. **FFmpeg 快速 seek 替代 fps 滤镜** - 原方案 `ffmpeg -vf fps=1/interval` 需全解码视频30min 360MB 视频在 ARM CPU 上需 180s+(超 120s 超时)。改为逐帧 `ffmpeg -ss <ts> -frames:v 1` 快速 seek仅 33s6-8x 提速)
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 预压缩(降分辨率/码率)后再上传
## 真实视频性能基准测试 (2026-08-20)