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:
23
PROGRESS.md
23
PROGRESS.md
@@ -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=nvidia(Gemini→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 SUCCESS,NVIDIA 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 完全移出视频链路:云端 VLM(Gemini 多图单请求 / NVIDIA 逐帧聚合)直接产出结构化 JSON,Edge 仅 `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,仅 33s(6-8x 提速)
|
||||
13. **FFmpeg 快速 seek 替代 fps 滤镜** - 原方案 `ffmpeg -vf fps=1/interval` 需全解码视频,30min 360MB 视频在 ARM CPU 上需 180s+(超 120s 超时)。改为逐帧 `ffmpeg -ss <ts> -frames:v 1` 快速 seek,仅 33s(6-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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user