标准答案

  1. 每个远程调用先定义超时和截止时间,避免无限等待占满线程、连接和队列。
  2. 对关键下游使用独立连接池、线程池、并发配额或队列隔离,防止一个依赖拖垮全部请求。
  3. 重试只用于幂等且可能短暂恢复的错误,并使用退避、抖动和总预算控制。
  4. 熔断在失败比例或慢调用超过阈值时快速拒绝或走降级,恢复阶段用半开探测避免瞬间回灌。

题目解析

这些机制不是越多越好。多个层级同时重试会成倍放大流量,多个层级同时降级又可能掩盖真实错误,必须定义谁负责什么。

降级必须是业务可接受的替代结果,例如显示缓存数据、延迟通知或关闭非关键推荐,不能把错误伪装成成功。

常见误区

  • 所有服务都默认重试三次,导致下游故障时流量爆炸。
  • 熔断打开后没有恢复探测,长期拒绝本已恢复的依赖。
  • 将降级逻辑写成空数据或成功状态,误导用户和对账流程。

作者信息