熔断器
熔断如何阻止下游故障扩散?
- 熔断器: 包装远程调用,观察近期失败,达到阈值后暂时停止请求该依赖;
- 故障链: 下游不响应时,上游连接、线程或并发槽被长期占用,可能把局部失败扩大成整个系统失败;
- 作用: 快速拒绝或降级,让资源留给可完成的工作,并给故障依赖恢复空间;
- 告警: 熔断是系统异常信号,应记录发生时间、依赖和触发依据;
关闭状态怎样监测正常调用?
- Closed: 正常放行请求,并记录成功、失败及必要的超时信息;
- 阈值: 依据统计窗口中的失败次数或比例判断,而不是被偶发单次失败任意触发;
- 语义: 应区分依赖故障与正常业务拒绝,参数错误不一定说明下游不可用;
打开状态怎样快速失败?
- Open: 直接返回失败或执行规定的降级,不再继续调用受保护依赖;
- 冷却时间: 保持一段时间后允许探测,但固定计时不能替代实际恢复判断;
- 降级结果: 可以返回缓存或部分结果,但必须符合业务允许的陈旧和缺失范围;
半开状态怎样探测恢复?
- Half-open: 只放行少量探测请求,避免所有积压流量同时冲向刚恢复的依赖;
- 探测成功: 满足恢复条件后回到关闭状态,逐步恢复正常调用;
- 探测失败: 再次进入打开状态,继续隔离;
Closed --失败达到阈值--> Open
Open --等待后探测--> Half-open
Half-open --成功--> Closed
Half-open --失败--> Open
熔断为什么仍需配合超时和限流?
- 超时: 限制单次调用最多占用多久,熔断依赖超时等信号才能识别无响应;
- 限流: 限制正常或恶意流量强度,熔断侧重依赖已经表现出的失败,两者职责不同;
- 重试: 没有上限的重试可能绕过保护并放大负载,应尊重熔断状态和总体请求预算;