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 进行检查。可用的指标包括 Requests、TotalSuccesses、TotalFailures、ConsecutiveFailures、ConsecutiveSuccesses。 | LatencyAtQuantileMS(50.0) > 100 | 否 |
checkPeriod | 熔断器检查周期。 | 100ms | 否 |
fallbackDuration | 跳闸状态持续时间,即熔断器从打开变为半打开之前等待的时间。 | 10s | 否 |
recoveryDuration | 熔断器再次跳闸的最小持续时间。 | 10s | 否 |
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。