3. 压力测试场景:高并发请求、突发流量、下游依赖故障、资源耗尽
在金融压力测试中,模型服务(Model Serving)系统面临的核心挑战可归纳为四类典型场景。理解这些场景的流量特征与故障模式,是设计限流熔断方案的前提。本章逐一拆解每种场景下的系统行为、风险指标与应对策略。
3.1 高并发请求
高并发场景指在短时间内,模型服务接收到远超正常峰值的请求数量。常见于市场开盘、财报发布、宏观数据公布等事件驱动型时刻。
| 指标 | 正常状态 | 高并发状态 | 风险阈值 |
|---|---|---|---|
| QPS(每秒查询数) | 5,000 | 50,000 | ≥ 30,000 |
| P99 延迟 | 50 ms | 800 ms | ≥ 500 ms |
| CPU 使用率 | 40% | 95% | ≥ 85% |
| 内存使用率 | 60% | 90% | ≥ 80% |
关键观察: 高并发下,延迟增长往往早于 CPU/内存饱和。限流策略应优先基于 延迟指标 触发,而非仅依赖资源利用率。
3.2 突发流量
突发流量与高并发的区别在于 上升斜率。突发流量在极短时间内(秒级)从低负载飙升至峰值,对限流器的自适应能力要求更高。
- 特征: 流量在 1-3 秒内增长 10-20 倍。
- 典型来源: 量化交易策略同时触发、API 网关重试风暴、外部数据源回调洪峰。
- 风险: 固定阈值限流器来不及响应,导致系统瞬时过载。
- 应对: 采用 自适应限流算法(如 TCP BBR 启发式、PID 控制器),动态调整限流阈值。
实践建议: 在网关层部署 令牌桶 + 滑动窗口 双限流器。令牌桶应对平均速率,滑动窗口应对突发峰值,两者配合可覆盖 95% 的突发场景。
3.3 下游依赖故障
模型服务通常依赖多个下游组件:特征存储、模型推理引擎、数据库、外部 API。任一依赖故障都可能引发级联效应。
避坑指南: 不要对所有下游依赖设置相同的超时时间。特征存储通常可容忍 200ms,而外部 API 应设置更短超时(如 50ms),避免慢依赖拖垮整个请求链路。
3.4 资源耗尽
资源耗尽包括 CPU、内存、网络带宽、文件句柄、连接池等。在容器化部署环境中,资源耗尽往往表现为 服务质量降级 而非直接崩溃。
| 资源类型 | 耗尽表现 | 限流熔断关联指标 | 推荐熔断阈值 |
|---|---|---|---|
| CPU | 请求延迟飙升、GC 频繁 | CPU 使用率 > 85% | 熔断 30% 流量 |
| 内存 | OOM Killer、频繁 Full GC | 堆内存使用率 > 80% | 熔断 50% 流量 |
| 连接池 | 连接超时、获取连接阻塞 | 活跃连接数 > 80% 池大小 | 熔断 40% 流量 |
| 文件句柄 | 无法创建新线程/文件 | 已用句柄数 > 70% 上限 | 熔断 60% 流量 |
3.5 四类场景的限流熔断策略矩阵
针对上述四类场景,限流熔断策略需要差异化配置。下表给出推荐策略组合:
| 场景 | 限流算法 | 熔断触发条件 | 恢复策略 | 优先级 |
|---|---|---|---|---|
| 高并发请求 | 令牌桶 + 漏桶 | QPS > 阈值 × 1.2 | 半开探测,逐步恢复 | P0 |
| 突发流量 | 自适应限流(PID) | 延迟 P99 > 500ms | 快速降级,缓存兜底 | P0 |
| 下游依赖故障 | 熔断器(状态机) | 错误率 > 50% 或超时率 > 30% | 静默失败,异步重试 | P1 |
| 资源耗尽 | 动态阈值限流 | 资源利用率 > 80% | 主动降级,弹性扩容 | P1 |
架构原则: 限流熔断策略应遵循 分层防御 模型——网关层做全局限流,服务层做业务限流,实例层做资源限流。三层协同,避免单点失效。
3.6 场景组合下的混沌工程验证
单一场景测试不足以覆盖生产环境的复杂性。建议在压力测试中构造 组合故障场景:
- 高并发 + 下游故障: 模拟 10 倍流量同时注入,并随机杀死一个下游特征服务实例。
- 突发流量 + 资源耗尽: 在内存使用率 75% 时注入 5 倍突发流量,观察限流器是否提前介入。
- 级联熔断: 触发一个服务的熔断后,验证上游服务是否感知并调整自身限流阈值。
工程落地: 建议在预发环境搭建 故障注入平台,使用 Chaos Mesh 或 Litmus 工具,将上述组合场景编排为自动化测试用例,纳入 CI/CD 流水线。每次模型服务发布前,必须通过至少 3 个组合故障场景的验证。