Skip to content

🧩 Hystrix 风格熔断器的核心理念

  1. 隔离依赖服务(通常通过线程池或信号量)
  2. 快速失败:当服务不可用时,不等待,立刻返回 fallback。
  3. 熔断机制:当某个服务的失败率高于阈值,则断路器打开,短路后续请求。
  4. 自动恢复:断路器在一段时间后尝试“半开”,如果成功则关闭熔断器,恢复正常请求。
  5. Fallback 机制:服务降级逻辑,如返回默认值或提示稍后重试。
  6. 实时监控与统计:记录调用次数、成功/失败率、响应时间等。

🛠 状态机模型

Hystrix 熔断器通常实现为有限状态机,有三个状态:

  • Closed:正常工作状态,允许请求通过。
  • Open:熔断状态,阻止请求并走 fallback。
  • Half-Open:试探恢复状态,允许部分请求通过进行健康检查。

⏱ 状态切换示意图

       +---------+        fail ratio↑
       | Closed  | -----------------+
       +----+----+                  |
            |                       v
      success↓              +---------------+
       +------------------->|     Open      |
       |                   +-------+-------+
       |                           |
       |   after cool-down period  |
       |                           v
       |                    +------v------+
       +--------------------|  Half-Open  |
                            +-------------+

⚙️ 参数示例(可配置)

参数名说明示例值
requestVolumeThreshold熔断判断的请求数窗口20
errorThresholdPercentage熔断的失败率百分比阈值50%
sleepWindowInMilliseconds熔断后尝试恢复的时间间隔5000ms
timeoutInMilliseconds单次请求超时时间1000ms

✅ Hystrix 风格的实现选型(语言相关)

C# 实现库

  • Polly:最常用的 .NET 弹性策略库,支持 Retry、Circuit Breaker、Fallback、Timeout 等,推荐用它实现 Hystrix 风格熔断器。 示例:

    csharp
    var circuitBreakerPolicy = Policy
        .Handle<Exception>()
        .CircuitBreakerAsync(
            exceptionsAllowedBeforeBreaking: 3,
            durationOfBreak: TimeSpan.FromSeconds(10),
            onBreak: (ex, ts) => { Console.WriteLine("Circuit broken!"); },
            onReset: () => { Console.WriteLine("Circuit reset."); },
            onHalfOpen: () => { Console.WriteLine("Circuit is half-open."); }
        );

🔚 总结

Hystrix 风格熔断器是一种可靠的服务保护机制,适合应用在依赖多个外部服务的系统中。通过熔断器可以有效控制故障传播,提升系统的可用性和用户体验。

是否需要一个基于 Polly 的熔断器完整实现示例?