文档
03 平台04 媒体供应02_需求与工作包

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.sh

gate 通过只说明并发实现和验收工具可用,不能替代 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 用例失败。

On this page