4. 流量信号详解:QPS/RPS的测量、流量突增的识别、流量与容量规划的关系
流量(Traffic)是Golden Signals中第一个也是最具实时性的信号。它直接反映用户请求对系统的压力,是触发告警和弹性伸缩的最快依据。本节将深入QPS/RPS的测量方法、流量突增的识别策略,以及如何将流量数据转化为容量规划的决策依据。
4.1 QPS与RPS:定义与测量粒度
在微服务和API网关场景中,QPS(Queries Per Second)和RPS(Requests Per Second)通常混用,但严格区分时:
| 指标 | 适用场景 | 典型测量对象 | 注意事项 |
|---|---|---|---|
| QPS | 数据库、缓存、搜索引擎 | SELECT / GET 操作 | 可能包含内部重试,需去重 |
| RPS | HTTP API、网关、负载均衡 | HTTP Request(含4xx/5xx) | 区分成功请求与错误请求 |
在SRE实践中,我们通常使用速率(Rate)而非原始计数器来测量流量。推荐使用PromQL中的 rate() 或 irate() 函数,避免因计数器重置导致的尖刺。
测量黄金公式:
rate(http_requests_total[1m]) —— 1分钟平均RPS,适合告警。irate(http_requests_total[20s]) —— 瞬时RPS,适合仪表盘实时展示。
4.2 流量突增的识别:从基线到异常
流量突增不一定是坏事(例如促销活动),但非预期的突增往往是故障的前兆。识别突增需要建立动态基线。
4.2.1 基线建立方法
- 时间窗口基线:取过去7天同一时刻的P50/P95值作为参考。
- 同比/环比基线:对比上周同日或前一小时流量。
- 预测基线:使用ARIMA或Prophet模型预测未来流量。
4.2.2 突增检测算法
| 方法 | 原理 | 适用场景 | 误报率 |
|---|---|---|---|
| 固定阈值 | 超过值(如>10000 QPS) | 已知容量上限 | 高(业务波动大时) |
| 百分比突增 | 相比前一分钟增长>200% | 突发流量 | 中 |
| 3-sigma异常检测 | 偏离均值超过3个标准差 | 周期性流量 | 低 |
| 移动平均+偏差 | EWMA(指数加权移动平均) | 趋势变化检测 | 低 |
避坑提示:不要仅依赖“流量突增”一个维度告警。流量突增+错误率上升才是真正的故障信号;流量突增+延迟下降可能是缓存命中率提高的正常现象。
4.3 流量与容量规划的关系
流量信号是容量规划的输入源头。没有准确的流量预测,容量规划就是盲人摸象。以下是流量驱动容量规划的核心链路:
- 历史流量分析:提取过去N个月的QPS/RPS趋势,识别季节性规律(如双11、月末结算)。
- 流量模型建立:将流量分解为“基线流量 + 增长趋势 + 周期性波动 + 突发余量”。
- 容量映射:将QPS转换为资源需求(CPU/内存/连接数)。例如:单实例可承载2000 QPS,目标利用率60%,则预留余量。
- 规划输出:生成未来1-6个月的实例数/集群规模建议。
容量规划经验公式:
例如:预测峰值 50000 QPS,单实例承载 2000 QPS,目标利用率 60%,则需
所需实例数 = ceil( 预测峰值QPS / (单实例承载QPS × 目标利用率) )例如:预测峰值 50000 QPS,单实例承载 2000 QPS,目标利用率 60%,则需
ceil(50000 / (2000 × 0.6)) = 42 个实例。
4.3.1 流量与容量映射矩阵
| 流量特征 | 对容量的影响 | 规划策略 |
|---|---|---|
| 平稳增长(5-10%/月) | 线性扩容 | 提前2周扩容,预留20% buffer |
| 突发脉冲(秒级翻倍) | 瞬时压力巨大 | HPA + 队列缓冲 + 限流 |
| 周期性波峰(每日/每周) | 可预测的峰值 | 定时弹性伸缩(Cron HPA) |
| 促销活动(计划内突增) | 10-50倍流量 | 提前压测 + 资源预留 + 降级预案 |
4.4 实战:从流量突增到MTTR优化
当流量突增导致故障时,MTTR的优化体现在以下环节:
- 检测(MTTD):流量突增告警应在10秒内触发,避免依赖人工巡检。
- 定位:通过流量拓扑图快速判断突增来源(哪个API、哪个客户端、哪个地域)。
- 响应:自动触发弹性伸缩或限流,无需人工审批。
- 恢复:流量回归基线后自动缩容,释放资源。
最佳实践:在仪表盘上同时展示“当前RPS / 容量上限 / 预测RPS”三条曲线。当当前RPS接近容量上限时,提前告警,而不是等到超限后才响应。这能将MTTR从“被动救火”转变为“主动预防”。