perf(storage): 拦截任务二进制并本地暂存结果
原因:任务标准结果中的 Base64、Data URI 和 Buffer 会进入 PostgreSQL JSON,导致 TOAST 与备份体积快速增长。 影响:新增统一 JSON 持久化关口;upload_none 将二进制原子写入本地结果目录,数据库仅保存带 SHA-256 的有界占位符;任务详情、同步响应、异步查询和兼容协议按需校验恢复。补充 24 小时清理、容量上限、历史小批量治理命令及管理端说明。 风险:本地结果超过 TTL、丢失或损坏时分别返回明确的 410/500;空间不足时返回 503 且不重试上游。未自动执行历史治理。 验证:三种真实图片模型同步/异步与幂等重放通过;Go vet/全量测试、前端 111 测试、lint/typecheck/build、OpenAPI、迁移安全、govulncheck、依赖审计、手工发布测试及 Linux amd64 构建通过。
This commit is contained in:
@@ -1823,11 +1823,18 @@ AI_GATEWAY_TASK_RETENTION_DAYS=30
|
||||
AI_GATEWAY_TASK_ANALYSIS_RETENTION_DAYS=7
|
||||
AI_GATEWAY_TASK_CLEANUP_INTERVAL_SECONDS=300
|
||||
AI_GATEWAY_TASK_CLEANUP_BATCH_SIZE=1000
|
||||
AI_GATEWAY_LOCAL_RESULT_TTL_HOURS=24
|
||||
AI_GATEWAY_LOCAL_RESULT_MIN_FREE_BYTES=10737418240
|
||||
AI_GATEWAY_LOCAL_RESULT_MAX_BYTES=268435456
|
||||
AI_GATEWAY_LOCAL_RESULT_MAX_TASK_BYTES=536870912
|
||||
```
|
||||
|
||||
运行时要求:
|
||||
|
||||
- 首次上线先保持清理关闭;兼容协议和异步恢复验收通过后,显式改为 `AI_GATEWAY_TASK_CLEANUP_ENABLED=true`,再启动历史压缩和 7/30 天删除。
|
||||
- 结果策略为 `upload_none` 时,Base64、Data URI 和 Buffer 只写入 `data/static/generated/results/<task-id>/<sha256>.bin`;任务 JSON 保存固定占位符,查询结果时校验大小与 SHA-256 后恢复 Base64。
|
||||
- 本地二进制结果默认保留 24 小时;文件过期返回 `410 binary_result_expired`,文件损坏返回 `500 binary_result_corrupted`。写入前保留至少 10GiB 空间,单文件和单任务上限分别为 256MiB、512MiB。
|
||||
- 历史二进制治理使用镜像内 `/app/easyai-ai-gateway-backfill-binary-results` 先 dry-run;确认范围后带 `--apply`,每批最多 100 行,使用输出的 `resumeAfterId` 分段继续。该命令不会随服务启动自动执行。
|
||||
- runtime 仅在任务真实状态变化时写 `gateway_task_events`;事件 payload 固定为空,轮询不会生成事件。
|
||||
- callback worker 以 `0083_task_history_minimal_storage` 的应用时间为边界,只投递新 outbox;旧 pending/processing callback 在启用治理后分批标记为 `failed`,不会向业务端补发形成历史回调风暴。
|
||||
- callback worker 使用 `SERVER_MAIN_INTERNAL_TOKEN` 调用 `TASK_PROGRESS_CALLBACK_URL`。
|
||||
|
||||
Reference in New Issue
Block a user