故障隔离

场景

新增 API 上线后,用户量增长。

九个月后:

  • API 数量:4 个
  • 日调用量:80 万次
  • 其中新闻 API 占:60%

问题发生

某天下午,我收到了告警:

Inbox
From: 监控系统
To: 运维值班
Time: 周三 14:30
Subject: [P1] 新闻 API 响应异常
  • 错误率:95%
  • 响应时间:超时
  • 持续时间:14:30 至今

我赶紧检查,发现:

设计流程
问题发生
  1. 步骤 1:采集健康状态并触发告警
  2. 步骤 2:识别故障信号、受影响服务和降级边界
  3. 步骤 3:根据失败率、超时和依赖状态选择保护策略
  4. 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。

新闻 API 的外部数据源挂了!

问题影响

我查了一下影响范围:

影响分析:

  • 新闻 API 调用失败:95% 的错误率
  • 其他 API(天气、股票、IP):正常
  • 用户体验:部分功能不可用
  • 用户投诉:增加了 20%

但更严重的是:

连锁反应:

  1. 新闻 API 失败
  2. 用户重试新闻 API
  3. 服务器资源被新闻 API 占用
  4. 其他 API 也变慢了
  5. 整体用户体验下降

根本原因

我梳理了一下请求路径:

设计流程
根本原因
  1. 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
  2. 步骤 2:识别故障信号、受影响服务和降级边界
  3. 步骤 3:根据失败率、超时和依赖状态选择保护策略
  4. 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。

问题:

  1. 没有设置超时时间
  2. 没有错误处理
  3. 没有降级方案
  4. 一个 API 失败影响了其他 API

解决方案

1. 超时控制

设计流程
1. 超时控制
  1. 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
  2. 步骤 2:识别故障信号、受影响服务和降级边界
  3. 步骤 3:根据失败率、超时和依赖状态选择保护策略
  4. 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。

2. 错误处理

设计流程
2. 错误处理
  1. 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
  2. 步骤 2:写入队列并异步消费
  3. 步骤 3:识别故障信号、受影响服务和降级边界
  4. 步骤 4:根据失败率、超时和依赖状态选择保护策略
关注点:故障隔离、恢复路径、用户影响和告警收敛。

3. 熔断机制

设计流程
3. 熔断机制
  1. 步骤 1:触发隔离、熔断、降级或恢复动作
  2. 步骤 2:准备健康指标、阈值、兜底方案和恢复步骤
  3. 步骤 3:确认恢复状态、告警收敛和用户影响范围
  4. 步骤 4:确认恢复状态、告警收敛和用户影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。

4. 降级方案

设计流程
4. 降级方案
  1. 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
  2. 步骤 2:更新熔断、降级或健康检查状态
  3. 步骤 3:写入队列并异步消费
  4. 步骤 4:失败重试、熔断或降级
关注点:故障隔离、恢复路径、用户影响和告警收敛。

隔离策略

资源隔离

设计流程
资源隔离
  1. 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
  2. 步骤 2:识别故障信号、受影响服务和降级边界
  3. 步骤 3:根据失败率、超时和依赖状态选择保护策略
  4. 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。

监控和告警

API 健康检查

设计流程
API 健康检查
  1. 步骤 1:按负载均衡策略选择可用实例并转发请求
  2. 步骤 2:按负载均衡策略选择可用实例并转发请求
  3. 步骤 3:采集健康状态并触发告警
关注点:实例健康、转发策略、故障摘除和扩容验证。