2. 状态机核心三态:Closed、Open、Half-Open 状态的定义与转换条件
Circuit Breaker(断路器)状态机是分布式系统中防止级联故障的核心机制。从性能调优视角看,理解三个核心状态的定义及其转换条件,是设计压测场景、分析吞吐拐点、配置熔断阈值的前提。本章将逐一拆解 Closed、Open、Half-Open 三态的行为特征与转换触发条件。
2.1 三态定义与行为特征
| 状态 | 定义 | 请求行为 | 性能影响 |
|---|---|---|---|
| Closed(关闭) | 断路器处于正常通行状态,所有请求直接通过,调用下游服务。 | 正常转发请求,统计失败率/超时率。 | 无额外延迟,吞吐量由下游服务能力决定。 |
| Open(打开) | 断路器已熔断,拒绝所有请求,快速失败返回。 | 直接返回降级响应或抛出异常,不发起实际调用。 | 请求延迟极低(毫秒级),但吞吐量骤降为降级处理能力。 |
| Half-Open(半开) | 熔断后进入试探期,允许有限数量的探测请求通过。 | 仅放行预设数量的探测请求,其余仍快速失败。 | 探测请求延迟恢复正常,非探测请求延迟极低。 |
性能调优提示: 在压测中,Closed 状态下的失败率统计窗口大小(如滑动窗口 10s/100 次请求)直接影响熔断触发的灵敏度。窗口过小易误判,窗口过大则熔断滞后,导致下游雪崩。
2.2 状态转换条件与触发机制
状态转换由三个核心条件驱动:失败计数器阈值、超时阈值、探测请求成功率。下图展示了完整的状态转换路径:
2.3 转换条件详细说明
2.3.1 Closed → Open
- 触发条件:在滑动时间窗口内,请求失败率或超时率达到预设阈值。
- 典型配置:最近 10 秒内,失败次数 ≥ 5 次 或 失败率 ≥ 50%。
- 性能调优关注点:
- 窗口大小:窗口过短(如 1s)易受瞬时抖动影响误熔断;窗口过长(如 60s)导致熔断滞后,下游压力持续累积。
- 最小请求数:设置
minimumNumberOfCalls(如 5),避免在低流量下因少量失败触发熔断。
2.3.2 Open → Half-Open
- 触发条件:熔断状态持续达到预设的
waitDurationInOpenState(如 5 秒)。 - 行为:断路器自动进入半开状态,允许有限探测请求通过。
- 性能调优关注点:
- 等待时长:过短(如 1s)可能导致下游尚未恢复就再次熔断;过长(如 30s)浪费恢复时间,降低系统可用性。
- 压测中应测试不同等待时长下的吞吐恢复曲线。
2.3.3 Half-Open → Closed / Open
- → Closed 条件:所有探测请求成功(成功率 100%),断路器认为下游已恢复,关闭熔断。
- → Open 条件:任一探测请求失败,断路器立即回到 Open 状态,重新计时。
- 性能调优关注点:
- 探测请求数量:通常为 1~3 个。数量过少可能采样不足;数量过多则增加下游压力。
- 探测请求应使用真实业务流量,而非健康检查,以反映真实恢复情况。
压测陷阱: 在 Half-Open 状态下,如果探测请求数量设置过大(如 10 个),且下游服务仅部分恢复,可能导致大量请求涌入再次压垮下游,形成“熔断-半开-熔断”震荡。建议压测时重点观察此场景下的吞吐抖动幅度。
2.4 状态转换参数配置清单
| 参数名称 | 默认值(以 Resilience4j 为例) | 性能调优建议 |
|---|---|---|
failureRateThreshold |
50% | 高并发场景建议 60%~80%,避免瞬时毛刺触发熔断 |
waitDurationInOpenState |
60s | 快速恢复场景可降至 5~10s,需配合下游健康检查 |
permittedNumberOfCallsInHalfOpenState |
10 | 建议 2~5,减少探测压力 |
slidingWindowSize |
100 | 高 QPS 场景可增大至 200~500,低 QPS 场景减小至 20 |
minimumNumberOfCalls |
10 | 低流量服务建议设为 3~5,避免统计样本不足 |
2.5 压测场景设计建议
- 场景一:Closed → Open 触发验证 —— 逐步增加下游服务延迟/错误率,观察熔断触发点是否与配置阈值一致。
- 场景二:Open → Half-Open 恢复验证 —— 模拟下游恢复,观察等待时长后是否自动进入半开状态。
- 场景三:Half-Open 震荡测试 —— 在下游部分恢复时,观察探测请求成功率与状态切换稳定性。
- 场景四:高并发下状态转换性能 —— 在 1000+ QPS 下反复触发熔断/恢复,观察断路器状态机本身的 CPU 和内存开销。
核心结论: 三态转换的本质是 失败检测 → 快速隔离 → 自动恢复 的闭环。性能调优的目标是在“避免误熔断”和“快速保护下游”之间找到平衡点,压测数据是调整阈值的唯一依据。