a6-recipe-circuit-breaker
概览
熔断器通过检测不健康的上游并暂时停止向其发送请求,避免故障在服务之间级联。当上游返回过多错误时,熔断器进入“开启”状态,APISIX 会立即返回错误而不再转发请求。冷却期结束后,熔断器进入“半开”状态,用少量请求测试上游是否已经恢复。
APISIX 通过 api-breaker 插件实现熔断。该插件会跟踪响应状态码,并自动管理熔断状态。
适用场景
- 当上游发生故障时,保护您的API免受级联故障的影响
- 自动停止向出现故障的后端发送流量
- 为故障服务预留恢复时间,再尝试发送请求
- 返回快速错误响应,而不是等待超时
熔断器状态
┌─────────┐
│ CLOSED │ ← Normal operation: requests flow through
│(healthy) │
└────┬─────┘
│ Error count exceeds threshold
▼
┌─────────┐
│ OPEN │ ← Breaker tripped: returns 502 immediately
│(tripped) │
└────┬─────┘
│ After cooldown period
▼
┌──────────┐
│HALF-OPEN │ ← Test: allows one request through
│ (testing) │
└─────┬────┘
│
┌───────┴───────┐
│ │
Success Failure
│ │
▼ ▼
CLOSED OPEN (longer cooldown)
插件配置参考
| 字段 | 是否必填 | 说明 |
|---|---|---|
break_response_code | 是 | 熔断开启时返回的 HTTP 状态码 |
break_response_body | 否 | 熔断开启时返回的响应体 |
break_response_headers | 否 | 熔断开启时返回的响应头 |
unhealthy.http_statuses | 否 | 计为不健康的上游状态码 |
unhealthy.failures | 否 | 开启熔断前所需的连续不健康响应次数 |
healthy.http_statuses | 否 | 用于恢复的健康状态码 |
healthy.successes | 否 | 关闭熔断前所需的连续健康响应次数 |
max_breaker_sec | 否 | 熔断开启的最长时间 |