跳到主要内容

熔断器

熔断如何阻止下游故障扩散?​

  • 熔断器: 包装远程调用,观察近期失败,达到阈值后暂时停止请求该依赖;
  • 故障链: 下游不响应时,上游连接、线程或并发槽被长期占用,可能把局部失败扩大成整个系统失败;
  • 作用: 快速拒绝或降级,让资源留给可完成的工作,并给故障依赖恢复空间;
  • 告警: 熔断是系统异常信号,应记录发生时间、依赖和触发依据;

关闭状态怎样监测正常调用?​

  • Closed: 正常放行请求,并记录成功、失败及必要的超时信息;
  • 阈值: 依据统计窗口中的失败次数或比例判断,而不是被偶发单次失败任意触发;
  • 语义: 应区分依赖故障与正常业务拒绝,参数错误不一定说明下游不可用;

打开状态怎样快速失败?​

  • Open: 直接返回失败或执行规定的降级,不再继续调用受保护依赖;
  • 冷却时间: 保持一段时间后允许探测,但固定计时不能替代实际恢复判断;
  • 降级结果: 可以返回缓存或部分结果,但必须符合业务允许的陈旧和缺失范围;

半开状态怎样探测恢复?​

  • Half-open: 只放行少量探测请求,避免所有积压流量同时冲向刚恢复的依赖;
  • 探测成功: 满足恢复条件后回到关闭状态,逐步恢复正常调用;
  • 探测失败: 再次进入打开状态,继续隔离;
Closed --失败达到阈值--> Open
Open --等待后探测--> Half-open
Half-open --成功--> Closed
Half-open --失败--> Open

熔断为什么仍需配合超时和限流?​

  • 超时: 限制单次调用最多占用多久,熔断依赖超时等信号才能识别无响应;
  • 限流: 限制正常或恶意流量强度,熔断侧重依赖已经表现出的失败,两者职责不同;
  • 重试: 没有上限的重试可能绕过保护并放大负载,应尊重熔断状态和总体请求预算;