perf(acceptance): 使用多钱包身份分片模拟并发
单一验收钱包会把预留和结算串行化,掩盖双节点 Worker 的真实吞吐。验收现在幂等准备 32 个隔离身份和钱包,按请求轮询 API Key,并在 Run 配置中登记允许的 Key/User 身份对;密钥仅经 stdin 传给集群内压测进程。\n\n仍保留真实账务、候选权限、回调、重复扣费和强杀恢复校验。\n\n验证:Go 全量测试、临时 PostgreSQL 集成测试、go vet、OpenAPI 生成、迁移安全检查、bash -n、ShellCheck。
This commit is contained in:
@@ -16,7 +16,8 @@ Gateway 流量模式保存在数据库中,支持 `live` 和 `validation`:
|
||||
|
||||
- `live`:正常接收正式任务,带验收 Header 的请求被拒绝。
|
||||
- `validation`:普通新任务返回 `503 validation_in_progress`;已有正式任务继续排空。
|
||||
- 验收请求必须同时匹配当前 Run ID、随机 Run Token、专属 API Key ID 和专属用户 ID。
|
||||
- 验收请求必须同时匹配当前 Run ID、随机 Run Token,以及 Run 中登记的专属 API Key/User
|
||||
身份对;任意错配都被拒绝。
|
||||
- 普通生产请求体不能打开 `simulation`。
|
||||
- `X-EasyAI-Acceptance-Upstream: real` 只对已授权验收身份有效,用于最后两条真实小流量请求。
|
||||
|
||||
@@ -57,6 +58,12 @@ WebP 和 4K 图片。128 组输入组合避免只命中相同缓存;每四个
|
||||
`/contents/generations/tasks` 提交、查询、取消协议,还提供格式混合的图片池和独立回调
|
||||
收集器。它校验参考图数量、角色、格式、尺寸与内容哈希,并统计重复上游提交和重复回调。
|
||||
|
||||
默认通过 `AI_GATEWAY_ACCEPTANCE_IDENTITY_SHARDS=32` 幂等准备 32 个仅属于验收用户组的
|
||||
身份、API Key 和独立钱包,并按请求序号轮询使用。这样可模拟真实多租户并发,避免把 1000
|
||||
个任务全部压在同一钱包行锁上;每个任务仍执行真实预留、结算和重复扣费检查。该值可在
|
||||
`1..128` 内通过环境变量调整,Run 只保存 Key/User ID 对,Key Secret 仅通过 stdin 传入
|
||||
集群内压测进程,不进入 Pod spec、数据库 Run 配置、报告或日志。
|
||||
|
||||
## Worker 配置
|
||||
|
||||
执行槽、连接池和媒体并发进入 Pod 环境变量,副本数由发布工具更新 Deployment:
|
||||
@@ -101,9 +108,10 @@ easyai-ai-gateway-cluster-release capacity
|
||||
|
||||
## 执行
|
||||
|
||||
先把专属验收用户、钱包、API Key、管理员 Token、两个 Gateway 地址和三张真实小流量
|
||||
参考图写入本地私有环境。模型变量可省略,脚本会从当前启用候选中选择 Gemini 图片编辑
|
||||
模型,以及 `omni_video.max_images >= 9` 的视频模型并优先 Seedance 2.0/fast。
|
||||
先把主验收用户、钱包、API Key、管理员 Token、两个 Gateway 地址和三张真实小流量参考图
|
||||
写入本地私有环境。脚本会以主身份为模板幂等准备其余隔离身份;模型变量可省略,脚本会从
|
||||
当前启用候选中选择 Gemini 图片编辑模型,以及 `omni_video.max_images >= 9` 的视频模型
|
||||
并优先 Seedance 2.0/fast。
|
||||
|
||||
为保证请求严格各有一半命中宁波和香港,可以把两个 Gateway URL 配成两个节点的
|
||||
`https://<节点IP>`,并设置
|
||||
@@ -118,13 +126,14 @@ scripts/cluster/run-production-acceptance.sh \
|
||||
脚本依次执行:
|
||||
|
||||
1. 校验工作区、manifest、线上 release SHA、digest、双站点镜像和副本数。
|
||||
2. 部署 digest 固定且仅集群内可访问的协议模拟器。
|
||||
3. 创建 Run、切换 `validation`、等待已有正式任务排空。
|
||||
4. 按 P24、P28、P32 执行三轮负载和 Worker 强杀。
|
||||
5. 执行两条真实小流量请求。
|
||||
6. 校验任务、账务、回调、队列、连接池、RSS、节点内存、数据库同步、六向 WireGuard 和
|
||||
2. 准备专属验收用户组、身份分片、独立钱包与候选访问规则。
|
||||
3. 部署 digest 固定且仅集群内可访问的协议模拟器。
|
||||
4. 创建 Run、切换 `validation`、等待已有正式任务排空。
|
||||
5. 按 P24、P28、P32 执行三轮负载和 Worker 强杀。
|
||||
6. 执行两条真实小流量请求。
|
||||
7. 校验任务、账务、回调、队列、连接池、RSS、节点内存、数据库同步、六向 WireGuard 和
|
||||
公网健康。
|
||||
7. 重新校验 SHA/digest/revision 后切回 `live`。
|
||||
8. 重新校验 SHA/digest/revision 后切回 `live`。
|
||||
|
||||
报告保存在 `dist/acceptance/<run-id>/`,包含每阶段吞吐、p50/p95/p99、队列和资源 CSV、
|
||||
协议模拟器统计及最终摘要。报告不包含图片原文、Base64、Token、密码或连接串。
|
||||
|
||||
Reference in New Issue
Block a user