🛡️ 服务降级与熔断测试

Degradation & Circuit Breaker Testing · 系统韧性验证 | 更新时间:2025-05

1. 核心概念

熔断(Circuit Breaker):当某个服务的错误率或响应时间超过阈值时,熔断器自动「断开」,后续请求直接返回降级响应而不调用故障服务。熔断器会定期尝试「半开」状态以检测服务是否恢复。

降级(Degradation):当服务不可用或资源紧张时,主动关闭非核心功能或提供简化的备用响应,保障核心业务链路的可用性。

银行场景:当支付网关超时时,熔断器断开后可降级为「支付处理中,请稍后查询」的友好提示,而非白屏或超时错误,保护用户体验。

Resilience4jSentinelHystrix熔断降级限流

2. 熔断器状态机测试

状态转换触发条件验证点
CLOSED → OPEN错误率超过阈值(如 50%)熔断器在指定时间窗口内正确统计失败次数,超阈值后立即断开
OPEN → HALF_OPEN等待时间到期(如 30s)熔断器在等待时间后自动进入半开状态,允许部分请求探测服务
HALF_OPEN → CLOSED探测请求全部成功探测请求成功后熔断器完全关闭,恢复正常调用
HALF_OPEN → OPEN探测请求再次失败探测失败后立即重新断开,重新计时等待周期
滑动窗口统计持续调用基于时间或基于计数的滑动窗口统计准确性

3. 降级策略测试

4. 金融系统韧性测试

第三方依赖故障模拟:银行系统依赖大量第三方服务(人行征信、银联支付、公安身份验证等)。通过劫持 DNS 或网络延迟注入模拟第三方故障,验证熔断和降级响应。

级联故障防护:当核心服务熔断后,依赖该服务的上游服务能否正确处理。例如:账户服务熔断 → 交易服务降级为仅展示缓存数据 → 前端提示「账户查询繁忙」。

资金安全测试:熔断和降级策略绝不应导致资金丢失或重复扣款。需验证:熔断时的转账请求是否被正确拒绝(而非部分执行),降级返回的缓存余额是否明确标注「非实时」。

5. 主流工具对比

工具熔断限流降级控制台适用场景
Resilience4j✅✅✅无轻量级、Java 原生应用
Sentinel✅✅✅✅ Dashboard大规模集群、实时监控需求
Hystrix✅✅✅✅ Dashboard已停维护,仅遗留系统
Istio✅✅❌✅ Kiali/Jaeger服务网格架构下的流量管控

推荐方案:新项目建议使用 Sentinel(阿里开源,经双 11 验证)或 Resilience4j(轻量无侵入),已有服务网格可复用 Istio 的熔断能力。