标准答案
- 每个远程调用先定义超时和截止时间,避免无限等待占满线程、连接和队列。
- 对关键下游使用独立连接池、线程池、并发配额或队列隔离,防止一个依赖拖垮全部请求。
- 重试只用于幂等且可能短暂恢复的错误,并使用退避、抖动和总预算控制。
- 熔断在失败比例或慢调用超过阈值时快速拒绝或走降级,恢复阶段用半开探测避免瞬间回灌。
题目解析
这些机制不是越多越好。多个层级同时重试会成倍放大流量,多个层级同时降级又可能掩盖真实错误,必须定义谁负责什么。
降级必须是业务可接受的替代结果,例如显示缓存数据、延迟通知或关闭非关键推荐,不能把错误伪装成成功。
常见误区
- 所有服务都默认重试三次,导致下游故障时流量爆炸。
- 熔断打开后没有恢复探测,长期拒绝本已恢复的依赖。
- 将降级逻辑写成空数据或成功状态,误导用户和对账流程。