Skip to content

Traefik CircuitBreaker 中间件文档

Circuit Breaker(熔断器)

HTTP 熔断器可以防止请求堆叠到不健康的服务上,从而避免级联故障。

  • 当系统健康时,熔断器关闭(正常操作)。
  • 当系统变得不健康时,熔断器打开,请求不再被转发,而是由回退机制处理。

为了评估系统是否健康,熔断器会持续监控服务。

熔断器分析其在中间件链中位置之后发生的事情。在此之前发生的事情对其状态没有影响。

每个路由器都有自己的熔断器实例。一个实例的熔断器可以处于打开状态,而另一个则保持关闭:它们的状态不共享。

这是预期行为,我们希望你可以独立定义什么使服务健康,而不必为每个路由声明一个熔断器。

配置示例

YAML 格式:

yaml
# 延迟检查
http:
  middlewares:
    latency-check:
      circuitBreaker:
        expression: "LatencyAtQuantileMS(50.0) > 100"

Kubernetes 格式:

yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: latency-check
spec:
  circuitBreaker:
    expression: LatencyAtQuantileMS(50.0) > 100

配置选项

字段描述默认值必填
expression熔断器条件表达式。基于 sony/gobreaker 库中的 ReadyToTrip 字段,使用 Counts 进行检查。可用的指标包括 RequestsTotalSuccessesTotalFailuresConsecutiveFailuresConsecutiveSuccessesLatencyAtQuantileMS(50.0) > 100
checkPeriod熔断器检查周期。100ms
fallbackDuration跳闸状态持续时间,即熔断器从打开变为半打开之前等待的时间。10s
recoveryDuration熔断器再次跳闸的最小持续时间。10s

在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布