4. 健康检查指标:响应时间、状态码、负载等

健康检查到底查什么?说白了,就是问三个问题:快不快?对不对?扛不扛得住?

这三个问题分别对应三个核心指标:响应时间、状态码、负载。我做了这么多年接口运维,踩过的坑大多跟这三个指标没设好有关。今天咱们一个一个说透。

4.1 响应时间——接口的“心跳”

响应时间,就是从发起请求到收到完整响应所花的时间。我习惯把它拆成三段看:

  • 网络延迟:数据在链路上跑的时间。跨机房、跨区域时尤其明显。
  • 处理时间:服务端真正干活的时间。业务逻辑、数据库查询、外部调用都算在内。
  • 传输时间:响应体从服务器回到客户端的时间。返回数据量越大,这个值越吓人。

我在项目中遇到过一件事。有个密码验证接口,响应时间偶尔飙到 5 秒以上。一开始以为是业务代码慢,查了一圈才发现,是返回的加密证书序列化后太大,挤占了带宽。你看,不同阶段的瓶颈,表现可能完全一样,但根因截然不同。

经验值参考:内部密码接口的响应时间,P99 建议控制在 200ms 以内。超出 500ms 就属于亚健康,得立即排查。

4.2 状态码——接口的“表情”

状态码是服务端给客户端的表情信号。但我发现很多人只看 200 和 500,中间那一大片“灰色地带”全忽略了。

我一般把状态码分成四个等级来判断健康度:

等级 状态码范围 健康判定 我的处理方式
健康 2xx ✅ 正常 计数通过,不做额外动作
警告 3xx, 4xx(除 429) ⚠️ 轻微异常 记录日志,不触发切换;连续 N 次才告警
过载 429, 503 🔶 限流或超载 立即标记为“风险”,降低权重但不摘除
故障 5xx(除 503) ❌ 服务不可用 立即摘除,触发故障转移

曾经我负责的一个支付密码接口,连续返回了 6 次 502。按当时的策略,直接摘除并切到了备用集群。结果发现是网关层临时配置错误,业务本身完全正常。那次之后我加了一个规则:状态码异常必须结合连续次数和响应时间一起判断,单一条件太容易误伤了。

注意:429(Too Many Requests)和503(Service Unavailable)有时是限流机制的正常反馈,不代表服务挂了。直接摘除可能导致“假故障雪崩”——A 集群刚摘完,流量全压到 B,B 也跟着 503,全线崩溃。

4.3 负载指标——接口的“承重墙”

响应时间和状态码反映的是“现在怎么样”,而负载指标告诉你“还能撑多久”。

我通常关注以下四个负载维度:

  1. 并发连接数:当前正在处理的请求量。超过线程池上限就开始排队了。
  2. CPU 使用率:计算密集型接口(比如加解密)这个值很敏感。我见过一个 RSA 验签接口,并发一上来 CPU 直接飙到 95%。
  3. 内存占用:尤其注意 GC 频率和堆内存压力。频繁 Full GC 比 CPU 高更危险。
  4. 排队深度:请求在队列里等待的数量。这个值一旦上涨,响应时间会跟着剧烈抖动。

核心原则:负载指标不做“值判断”,而是做趋势判断。CPU 到 80% 不一定有问题,但从 40% 在 30 秒内直线升到 80%,这才是警报信号。

我个人习惯把负载指标和响应时间做交叉对比。举个例子,有一次某个密码重置接口的响应时间从 150ms 涨到 800ms,但 CPU 和内存都很平稳。最后查出来是下游的短信通道变慢了。如果只看负载指标,根本发现不了问题。

4.4 综合评分与阈值设定

单一指标不足以做故障转移决策。我一般用一个综合健康评分来算:

健康分 = w₁ × 响应时间分 + w₂ × 状态码分 + w₃ × 负载分

三个维度的分数都是 0–100,权重 w₁、w₂、w₃ 根据业务场景调整。举个例子,密码接口对响应时间敏感,我会给 w₁ 设 0.5,w₂ 设 0.3,w₃ 设 0.2。

阈值怎么定?我的经验是分两档:

  • 警告阈值:健康分 < 70,记录日志,通知值班人员,但不做切换。
  • 切换阈值:健康分 < 40,持续 10 秒以上,立即触发故障转移。

下面是我画的一张综合决策流程图,把三个指标的关系串起来了:

健康检查指标综合评估流程 响应时间 P99 < 200ms → 100分 状态码 2xx → 100分 / 5xx → 0分 负载指标 CPU/内存/连接数趋势 加权综合评分 w₁×响应分 + w₂×状态分 + w₃×负载分 健康分 ≥ 70? 持续观察 ✅ 正常 ⚠️ 触发告警/切换 故障转移 连续 3 次检查健康分 < 40 才触发切换,避免偶发抖动导致误切换

上图中,三个维度的分数先加权融合,然后进入决策分支。这里有个细节我要强调:不要连续两次都做切换决策。我见过一个系统,每次检查发现分低就立刻切,结果两个集群之间来回倒腾,比不切换还糟糕。我的做法是:连续 3 次检查都低于 40 分,才真正执行切换。

阈值设定小技巧:先收集两周的数据,画出 P50、P90、P99 三条曲线。阈值卡在 P90 和 P99 之间,既能覆盖绝大多数正常波动,又不会让异常漏过去。