MG-02-017 验收测试(续二)
验收测试下半部分
本页是 验收测试续篇的前半部分 的续篇,2026-10-18 按章节拆分;上半部分仍在原页。
21. 高并发
首个实现周期使用以下临时 H1,M0 取得现网最近 30 天峰值后调整为:
最终目标 = max(H1, 现网峰值 × 2)临时 H1:
- 模型列表和模型广场:300 RPS,持续 10 分钟;
- 异步任务创建:200 RPS,持续 10 分钟;
- 队列积压:10,000 Task;
- Dispatcher/Poller:代码并发上限 100;单机默认每进程取
min(100, PostgreSQL max_open_conns),H1 排空阶段各使用 2 个副本; - 使用记录:管理员最新记录列表
limit=20,100 RPS;过滤组合由 Component Test 单独覆盖; - 同一 Capacity Slot:100 路并发争抢;
- 幂等:50 路同 Key 并发。
P0-LOAD-001 API
在隔离环境达到 H1,无数据错误、goroutine 泄漏、连接池耗尽或非预期 5xx。
P0-LOAD-002 队列
10,000 Task 不丢失、不重复提交;供给容量释放后持续排空。 积压创建前,客户组与 API Key 的实际异步并发配置必须与测试值一致,前序任务的 PostgreSQL Permit 和 Redis 并发占用必须全部释放;历史释放泄漏不能导致虚假 429。
P0-LOAD-003 背压
达到数据库、队列或 Worker 安全上限时返回明确背压,不继续无限占用内存。
P0-LOAD-004 管理查询
高并发执行期间使用记录、健康和队列页面保持可用,不做无索引全表扫描。
管理员最新记录列表必须使用 (created_at DESC, id DESC) 索引,120,000 条媒体请求
与完整生命周期记录存在时仍达到 100 RPS 目标的至少 95%。
21.1 单机 Compose 负载入口
负载脚本只启动隔离的 Test Fixture Compose 项目,不读取生产 Credential,也不访问 真实 Provider:
# 短时开发门禁:验证相同目标 RPS、较短持续时间和 200 个排队任务
scripts/compose-load-test.sh
# 切换前完整 H1:300/200/100 RPS 各持续 10 分钟,并验证 10,000 个排队任务
GATEWAY_LOAD_PROFILE=h1 scripts/compose-load-test.shgate 通过只说明并发实现和验收工具可用,不能替代 h1。生产切换前还必须取得最近
30 天现网峰值,执行 max(H1, peak × 2),保存机器规格、Compose 镜像 Commit、
PostgreSQL/Redis/对象存储指标、延迟分位、错误率、队列排空时间和管理查询结果。
完整 H1 允许创建阶段的零 Attempt Task 在 20 分钟新提交截止后以
VIDEO_RETRY_DEADLINE_EXCEEDED 终止;这不是 HTTP 创建失败。已经受理的 Provider
Task 必须继续轮询和发布。单独的 10,000 Task 积压阶段在供给恢复后必须全部成功,
且不能出现重复 Attempt 或输出。
22. 真实 Provider
每个生产 Supply 必须通过:
- 连接;
- 精确模型 ID;
- 成功请求;
- 状态查询;
- 结果下载和 URL 有效期;
- 能力边界;
- 错误分类;
- 价格和收费节点;
- 视频真人政策;
- 同步/异步模式;
- 429、5xx 或可控错误证据。
不要求为了测试主动制造高额付费或破坏 Provider 账户;无法安全制造的错误使用官方 证据和脱敏历史响应补充。
23. 验收证据
每个 P0 编号需要至少一种:
自动测试名称和 commit
组件测试日志
脱敏 Contract Fixture
真实 Provider 测试记录
负载报告
故障演练报告
UI 截图/录屏和可访问性报告
生产冒烟清单验收矩阵记录 Owner、环境、日期、版本、结果和证据路径。
24. 上线阻断
以下任一情况阻止上线:
- 存在第三次 Provider 提交;
- 内容错误触发换 Provider;
- 单个 Supply 故障错误停用整个 Channel;
- 同步图像进入异步长队列;
- 降级未披露或执行未发布变换;
- Supply 缺少价格却进入生产调度;
- Provider 成功但平台无可交付结果却显示成功;
- Redis 故障导致 Task 丢失;
- Key、Credential 或签名 URL 泄漏;
- 旧媒体入口未完成切换和回滚演练;
- 任一 P0 用例失败。