面试知识库

Multi-Agent AIOps V3 压测报告#

测试日期:2026-06-08
测试对象:Multi-Agent AIOps Platform V3
测试范围:API 接入、队列削峰、Webhook 洪峰、限流保护、Worker 执行并发

1. 测试结论#

当前配置下,系统可以同时接收较高并发的请求,但会把真正昂贵的诊断执行限制在一个可控范围内。

结论项结果
当前 Worker 数量3
当前真实诊断执行上限2
读接口最高测试并发200
读接口最高测试请求数3000
后台诊断提交最高测试并发100
Webhook 最高测试并发100
Webhook 最高测试请求数500
限流是否生效
Worker 真实执行槽是否被打穿
压测后队列是否恢复干净

最重要的结论:

Worker 数量 = 3
真实同时诊断数 = 2
text

也就是说,3 个 Worker 都可以领取任务,但当前配置只允许 最多 2 个诊断任务真正同时执行 LLM / RAG / MCP 工具链路。第 3 个 Worker 会等待全局执行槽释放。

2. 测试环境#

项目配置
部署方式Docker Compose
API 服务FastAPI + Uvicorn
Worker 数量3
队列Redis Streams
事实库Postgres
向量库Milvus
工具接入MCP
模型调用DeepSeek / OpenAI-compatible 接口

关键并发配置:

配置项说明
WORKER_DIAGNOSIS_CONCURRENCY2所有 Worker 合计最多同时真正执行 2 个诊断
MANUAL_DIAGNOSIS_CONCURRENCY2同步诊断全局最多 2 个
EXECUTOR_MAX_PARALLEL6单轮最多并行执行 6 个安全工具
RATE_LIMIT_MANUAL_PER_IP_PER_MIN20单 IP 每分钟手动诊断提交上限

3. 压力模型#

V3 把压力拆成多类分别治理,而不是让所有压力都进入 Agent 执行阶段。

压力来源风险V3 的处理方式
用户请求压力API 被长诊断占住高并发走后台提交,API 快速返回任务 ID
告警洪峰压力Webhook 堵塞或重复建任务入口只做归一、去重、落库、入队
队列堆积压力Worker 消费跟不上提交速度Redis Streams 保存 backlog,并暴露 depth / pending / lag
Worker 执行压力多个 Worker 同时打满 LLM / RAG / MCP全局执行槽限制真实诊断并发
LLM 成本压力多任务同时消耗 token控制真实执行并发、最大步骤、模型分层和 token 统计
RAG / 数据库压力检索、rerank、落库延迟升高后台执行限额间接保护重资源链路
MCP 工具压力工具服务被频繁调用Skill 工具白名单、只读工具并行上限、失败降级

核心模式:

请求洪峰
    -> API 快速接收
    -> Postgres 记录任务事实
    -> Redis Streams 排队削峰
    -> Worker 按优先级领取
    -> 全局执行槽限制真实诊断并发
    -> 成功 ACK / 失败重试 / 最终进入 DLQ
text

4. 测试用例总览#

编号测试项请求数并发是否触发 LLM目标
1API 读压1000100测队列状态查询读压
2API 读压3000200测更高读并发下延迟变化
3后台诊断提交200100测 API 入队、Postgres、Redis 写入
4Alertmanager Webhook500100测告警洪峰接入
5接口限流4040验证单调用方限流
6真实 Worker 执行88验证队列削峰和执行槽
7Worker 专项补测66验证最多几个 Worker 真正同时执行

说明:写入型高压测试期间临时停止 Worker,只验证接入、落库和入队能力,避免大批任务触发 LLM 消耗。测试结束后清理压测任务并恢复 Worker。

5. API 读压测试#

测试接口:

GET /api/v1/queue/status
text

该接口不创建任务、不调用 LLM,用于观察 API + Redis 状态查询链路的读压能力。

请求数并发成功率总耗时吞吐平均延迟P50P95P99Max
1000100100%2.72s367.7 req/s265ms221ms582ms645ms658ms
3000200100%22.03s136.2 req/s1421ms1163ms3795ms5046ms5388ms

结论:

  • 100 并发读压下系统响应较稳,吞吐约 367.7 req/s。
  • 200 并发读压下仍 100% 成功,但延迟明显上升。
  • 当前瓶颈主要开始出现在队列状态查询、Redis 交互和本机容器资源上。

6. 写入接入压力测试#

测试期间临时停止 Worker,只测试 API 入队、Postgres 落库、Redis 队列写入,不触发大批 LLM 执行。

6.1 后台诊断提交#

测试接口:

POST /api/v1/aiops/diagnose/submit
text
请求数并发成功率状态码总耗时吞吐平均延迟P50P95P99Max
200100100%200: 2002.03s98.3 req/s725ms980ms1068ms1094ms1099ms

观察结果:

  • 200 个后台诊断任务全部成功入队。
  • 压测时 Worker 停止,因此任务只进入队列,不会被执行。
  • 系统可以在较短时间内完成任务落库和队列写入。

6.2 Alertmanager Webhook 洪峰#

测试接口:

POST /api/v1/webhook/alertmanager
text
请求数并发成功率状态码总耗时吞吐平均延迟P50P95P99Max
500100100%200: 5002.54s197.0 req/s480ms359ms1633ms1864ms2011ms

观察结果:

  • 500 条 Webhook 告警全部成功接收。
  • 告警完成归一、落库,并进入优先级队列。
  • Webhook 接入吞吐高于后台诊断提交,原因是请求体和业务路径更适合批量入口。

7. 接口限流测试#

测试目标:验证单调用方固定窗口限流是否生效。

测试方式:同一调用方并发提交 40 个后台诊断请求。

请求数并发2xx429总耗时吞吐平均延迟P50P95P99Max
404020200.94s42.5 req/s643ms770ms928ms930ms930ms

结论:

  • 前 20 个请求成功进入队列。
  • 超过单 IP 窗口上限的请求返回 429。
  • 限流触发后 API 保持健康,没有出现异常状态码。

8. 真实 Worker 执行验证#

测试命令:

python scripts/loadtest.py submit --n 8 --concurrency 8 --severity mix
bash

该测试会让 Worker 真实消费任务并调用诊断链路,用来验证队列削峰和全局执行槽。

指标结果
总请求8
成功请求8 / 8
429 限流0
总耗时0.87s
吞吐9.1 req/s
平均延迟680ms
P50747ms
P95874ms
P99874ms

队列与 Worker 观察:

观察项结果
压测前队列depth=0 pending=0 lag=0 dlq=0
压测后瞬时队列depth=8 pending=3 lag=5 dlq=0
活跃 Worker3
诊断执行槽最高保持 worker_diagnosis=2/2
排空结果depth=0 pending=0 lag=0 dlq=0
任务落库结果8 个任务全部 succeeded

结论:

  • API 可以并发接收任务并快速返回。
  • 任务会进入队列削峰。
  • 即使 3 个 Worker 同时存活,真实诊断执行并发也被限制在 2。

9. Worker 专项补测#

测试目标:确认当前最多有几个 Worker 真正同时执行诊断。

测试方式:提交 6 个真实诊断任务,连续采样队列状态、数据库任务状态和全局执行槽。

测试项结果
提交任务数6
成功任务数6
活跃 Worker3
参与执行的 Worker3
任务状态 running 峰值3
真实执行槽峰值2/2
队列最终状态depth=0 pending=0 dlq=0
首个任务创建到最后任务完成约 98s

关键解释:

Worker 领取任务数 != 真正同时跑诊断数
text

压测中出现了 running=3,表示 3 个 Worker 都领取了任务并进入执行流程,包含正在等待全局执行槽的任务;但真实执行槽始终不超过 2/2。因此当前配置下:

最多同时真正执行诊断 = 2
text

第 3 个 Worker 会等待执行槽释放,不会同时打满 LLM / RAG / MCP。

10. 压测后状态#

压测结束后已清理未执行的压力测试任务,并恢复 Worker。

最终队列状态:

状态项结果
depth0
pending0
dlq0
alive_workers3
worker_diagnosis0/2

11. 风险与说明#

  • 读压测试不代表真实诊断吞吐,只代表 API + Redis 状态查询链路能力。
  • 写入接入测试期间 Worker 被临时停止,因此不消耗大批 LLM,但可以验证削峰入口能力。
  • 真实执行测试规模较小,目的是验证执行槽和 Worker 行为,不建议用大批真实 LLM 任务做暴力压测。
  • 当前最大真实诊断并发由全局执行槽决定,不由 Worker 容器数量直接决定。

12. 调参建议#

当前推荐配置适合本地演示和中小规模压测:

Worker 数量 = 3
真实诊断执行并发 = 2
text

如果模型配额和机器资源更充足,可以逐步调整为:

场景Worker 数量真实诊断执行并发
本地演示32
小团队测试43
更高吞吐试验64

调大前建议同时观察:

  • LLM RPM / TPM
  • API P95 / P99
  • 队列 depth / lag
  • Postgres 连接池
  • Milvus 检索延迟
  • MCP 工具响应时间
  • DLQ 是否增长