这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
故障隔离
场景
新增 API 上线后,用户量增长。
九个月后:
- API 数量:4 个
- 日调用量:80 万次
- 其中新闻 API 占:60%
问题发生
某天下午,我收到了告警:
Inbox
From: 监控系统
To: 运维值班
Time: 周三 14:30
Subject: [P1] 新闻 API 响应异常
- 错误率:95%
- 响应时间:超时
- 持续时间:14:30 至今
我赶紧检查,发现:
设计流程
问题发生
- 步骤 1:采集健康状态并触发告警
- 步骤 2:识别故障信号、受影响服务和降级边界
- 步骤 3:根据失败率、超时和依赖状态选择保护策略
- 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。
新闻 API 的外部数据源挂了!
问题影响
我查了一下影响范围:
影响分析:
- 新闻 API 调用失败:95% 的错误率
- 其他 API(天气、股票、IP):正常
- 用户体验:部分功能不可用
- 用户投诉:增加了 20%
但更严重的是:
连锁反应:
- 新闻 API 失败
- 用户重试新闻 API
- 服务器资源被新闻 API 占用
- 其他 API 也变慢了
- 整体用户体验下降
根本原因
我梳理了一下请求路径:
设计流程
根本原因
- 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
- 步骤 2:识别故障信号、受影响服务和降级边界
- 步骤 3:根据失败率、超时和依赖状态选择保护策略
- 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。
问题:
- 没有设置超时时间
- 没有错误处理
- 没有降级方案
- 一个 API 失败影响了其他 API
解决方案
1. 超时控制
设计流程
1. 超时控制
- 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
- 步骤 2:识别故障信号、受影响服务和降级边界
- 步骤 3:根据失败率、超时和依赖状态选择保护策略
- 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。
2. 错误处理
设计流程
2. 错误处理
- 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
- 步骤 2:写入队列并异步消费
- 步骤 3:识别故障信号、受影响服务和降级边界
- 步骤 4:根据失败率、超时和依赖状态选择保护策略
关注点:故障隔离、恢复路径、用户影响和告警收敛。
3. 熔断机制
设计流程
3. 熔断机制
- 步骤 1:触发隔离、熔断、降级或恢复动作
- 步骤 2:准备健康指标、阈值、兜底方案和恢复步骤
- 步骤 3:确认恢复状态、告警收敛和用户影响范围
- 步骤 4:确认恢复状态、告警收敛和用户影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。
4. 降级方案
设计流程
4. 降级方案
- 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
- 步骤 2:更新熔断、降级或健康检查状态
- 步骤 3:写入队列并异步消费
- 步骤 4:失败重试、熔断或降级
关注点:故障隔离、恢复路径、用户影响和告警收敛。
隔离策略
资源隔离
设计流程
资源隔离
- 步骤 1:检测异常并执行隔离、熔断、降级或恢复动作
- 步骤 2:识别故障信号、受影响服务和降级边界
- 步骤 3:根据失败率、超时和依赖状态选择保护策略
- 步骤 4:返回降级或恢复结果,并记录告警和影响范围
关注点:故障隔离、恢复路径、用户影响和告警收敛。
监控和告警
API 健康检查
设计流程
API 健康检查
- 步骤 1:按负载均衡策略选择可用实例并转发请求
- 步骤 2:按负载均衡策略选择可用实例并转发请求
- 步骤 3:采集健康状态并触发告警
关注点:实例健康、转发策略、故障摘除和扩容验证。