Skip to content

服务容错保护

Spring Cloud Hystrix

核心功能

  • 熔断(Circuit Breaker): 当某个服务连续失败达到阈值时,自动“熔断”(停止调用),避免故障级联。
  • 服务降级(Fallback):在服务不可用或响应超时时,自动切换到预定义的降级逻辑(如返回缓存数据、默认值或友好提示)
  • 线程隔离(Thread Isolation):将不同服务的调用分配到独立线程池,避免单个服务故障耗尽主线程资源。
  • 限流与流量控制: 通过 maxConcurrentRequests 限制单线程池内最大并发请求数, 通过滑动时间窗口统计, 可动态调整
  • 实时监控与指标: 收集请求成功/失败率、响应时间、熔断状态等指标, 可集成第三方可视化工具
  • 请求合并(Request Collapsing):一般用不到

熔断 vs. 降级的区别

场景Feign Fallback(降级)Hystrix 熔断
触发条件任何单次调用失败(超时、HTTP 错误等)连续多次失败(如 50% 错误率,持续 10 次请求)
执行动作立即返回兜底数据,不阻断后续请求当触发熔断后,阻断后续请求 ,直到半开状态重试
目的保证客户端快速响应,避免阻塞防止故障级联,保护系统稳定性
状态机无状态,每次失败直接触发有状态(CLOSED → OPEN → HALF-OPEN)
适用场景服务短暂不可用(如数据库连接池耗尽)服务持续不可用(如下游服务宕机)

Hystrix 熔断后自动执行降级

Hystrix 的熔断机制会在服务连续失败达到阈值后, 自动阻断后续请求 ,并在此时执行降级逻辑(即 Feign 的 Fallback 方法)。这是两者的协同工作流程。

工作流程:

  1. 正常调用 :Feign 客户端调用服务,Hystrix 监控请求状态。
  2. 第一次失败 :服务返回异常(如 500 Internal Server Error),Hystrix 记录失败次数。
  3. 连续失败 :当失败次数达到阈值(如 errorThresholdPercentage=50%),Hystrix 触发熔断,将状态从 CLOSEDOPEN
  4. 熔断期间 :所有新请求直接走 Fallback 方法(即降级逻辑),不再实际调用服务。
  5. 半开状态 :熔断后等待 sleepWindowMillis(默认 5 秒),尝试一次新请求:
  • 成功:状态恢复为 CLOSED,继续正常调用。
  • 失败:再次熔断,延长熔断时间。