熔断的灵感源自物理电路。当系统发现调用的下游服务(如数据库、第三方 API)频繁出错或响应极慢时,会暂时中断对该服务的调用,直接返回错误,从而保护调用方不被故障蔓延拖垮。

熔断器状态机

熔断器通常有三种状态:

  1. Closed (关闭状态)

    • 正常运行。所有的请求都能正常访问下游服务。
    • 熔断器会统计请求的失败率或超时率。
  2. Open (开启状态)

    • 故障触发。当失败率达到预设阈值时,熔断器跳闸。
    • 所有请求会直接失败回退(Fail Fast),不再发往已经故障的下游服务,给下游腾出恢复时间。
  3. Half-Open (半开状态)

    • 尝试恢复。经过一段冷却期(Sleep Window)后,熔断器进入半开状态。
    • 允许少量请求尝试通过:
      • 如果这些请求成功,说明服务已恢复,状态回到 Closed
      • 如果依然失败,则重新进入 Open 状态,再次开始冷却倒计时。

为什么需要熔断?

  • 防止雪崩效应:当一个下游服务变慢时,上游服务的线程可能会被挂住,导致资源耗尽,熔断可以及时切断这种连锁反应。
  • 提升容错性:系统不再死等一个注定会失败或超时的请求,而是快速返回一个降级后的结果,提升用户体验。