fix(acceptance): 修复线上双站压测失真

将线上压力生成器拆分为宁波、香港宿主机上的 K3s 外进程,按全局序号分片并保守合并站点报告,避免操作者本机上行带宽成为容量瓶颈。\n\n为每次负载执行生成独立幂等键和 Run 级图片变体,阻止三轮验收重放旧任务或复用历史媒体缓存,并新增直接 OSS 物化一致性门禁。\n\n验证:Go 全量测试、go vet、迁移安全检查、bash -n、ShellCheck、manual-release-test 和双宿主机 linux/amd64 启动冒烟通过。
This commit is contained in:
2026-08-01 01:02:07 +08:00
parent 9fd9c267d6
commit be6ce7f78a
5 changed files with 359 additions and 42 deletions
+13 -4
View File
@@ -8,7 +8,8 @@
验收脚本是显式生产写操作,会暂停新正式任务、调整 Worker 容量并在恢复场景删除一个
Worker Pod。它不会自动发布新版本;只能针对已经发布、完整 SHA 和 digest 固定的 manifest
执行。进入线上前必须先通过[本地三节点同构验收](local-isomorphic-acceptance.md)
执行。默认先通过[本地三节点同构验收](local-isomorphic-acceptance.md);用户明确授权在线验收时,
可以记录审计豁免并跳过本地阶段,但不能把跳过记录成通过。
## 隔离与流量门禁
@@ -61,10 +62,12 @@ WebP、合法 4K 图片和越过 Seedance 2.0 官方输入边界的 `6144x2160`
收集器。它校验参考图数量、角色、格式、尺寸与内容哈希,并统计重复上游提交和重复回调。
默认通过 `AI_GATEWAY_ACCEPTANCE_IDENTITY_SHARDS=32` 幂等准备 32 个仅属于验收用户组的
身份、API Key 和独立钱包,并按请求序号轮询使用。这样可模拟真实多租户并发,避免把 1000
身份、API Key 和独立钱包,并按全局请求序号轮询使用。每次负载执行都有独立 execution ID
它同时进入幂等键和输入图片哈希,因此三次重复验收既不会重放旧任务,也不会命中前一轮的
输入资产缓存。这样可模拟真实多租户并发,避免把 1000
个任务全部压在同一钱包行锁上;每个任务仍执行真实预留、结算和重复扣费检查。该值可在
`1..128` 内通过环境变量调整,Run 只保存 Key/User ID 对,Key Secret 仅通过 stdin 传入
集群内压测进程,不进入 Pod spec、数据库 Run 配置、报告或日志。
双站压测进程,不进入 Pod spec、数据库 Run 配置、报告或日志。
## Worker 配置
@@ -96,7 +99,7 @@ AI_GATEWAY_WORKER_REPLICAS_HONGKONG
重新编码,避免执行槽升档时把大图峰值内存同比放大。2 GiB Worker 的起始值为 `2`;它不占用
视频提交后的上游等待槽,只有实测单 Pod RSS 和节点预算允许时才单独升档。
API Pod 使用独立发布配置 `AI_GATEWAY_API_DATABASE_MAX_CONNS`,生产同构验收默认使用 `64`
API Pod 使用独立发布配置 `AI_GATEWAY_API_DATABASE_MAX_CONNS`,生产同构验收默认使用 `31`
也可通过 `AI_GATEWAY_ACCEPTANCE_API_DATABASE_MAX_CONNS` 覆盖本次验收值,无需修改 Go 代码。
所有 API/Worker Pool 的 `AI_GATEWAY_DATABASE_MIN_IDLE_CONNS` 固定为 `4`,仅预热必要连接,
`AI_GATEWAY_DATABASE_MAX_CONN_IDLE_SECONDS``30`,突发扩出的空闲连接会及时回落,
@@ -135,6 +138,12 @@ PNG 并通过验收 Key 上传到 Gateway。生产快照默认在已部署的 AP
`AI_GATEWAY_ACCEPTANCE_GATEWAY_TLS_SERVER_NAME=ai.51easyai.com`。压测器会继续校验正式
证书,并同时使用该域名作为 HTTP Host;这不是跳过 TLS 校验。
线上高负载不再由操作者本机单进程跨公网发送。脚本构建同一源码的静态 linux/amd64
压测器,校验 SHA-256 后以 `0600` 临时环境分别运行在宁波、香港宿主机的 K3s 之外;两个
进程同时只访问本站 TLS 入口,并按奇偶全局序号分担请求。这样避免本机上行带宽成为容量
瓶颈,同时仍覆盖正式 TLS/Nginx 入口。站点报告按请求数相加、耗时取较慢站点、p50/p95/p99
取两站较差值进行保守合并。进程、私有环境和远端部分报告在 Run 退出时按精确路径清理。
```bash
scripts/cluster/run-production-acceptance.sh \
--execute dist/releases/<完整SHA>.json \