熔断(Circuit Breaker):当某个服务的错误率或响应时间超过阈值时,熔断器自动「断开」,后续请求直接返回降级响应而不调用故障服务。熔断器会定期尝试「半开」状态以检测服务是否恢复。
降级(Degradation):当服务不可用或资源紧张时,主动关闭非核心功能或提供简化的备用响应,保障核心业务链路的可用性。
银行场景:当支付网关超时时,熔断器断开后可降级为「支付处理中,请稍后查询」的友好提示,而非白屏或超时错误,保护用户体验。
Resilience4jSentinelHystrix熔断降级限流| 状态转换 | 触发条件 | 验证点 |
|---|---|---|
| CLOSED → OPEN | 错误率超过阈值(如 50%) | 熔断器在指定时间窗口内正确统计失败次数,超阈值后立即断开 |
| OPEN → HALF_OPEN | 等待时间到期(如 30s) | 熔断器在等待时间后自动进入半开状态,允许部分请求探测服务 |
| HALF_OPEN → CLOSED | 探测请求全部成功 | 探测请求成功后熔断器完全关闭,恢复正常调用 |
| HALF_OPEN → OPEN | 探测请求再次失败 | 探测失败后立即重新断开,重新计时等待周期 |
| 滑动窗口统计 | 持续调用 | 基于时间或基于计数的滑动窗口统计准确性 |
第三方依赖故障模拟:银行系统依赖大量第三方服务(人行征信、银联支付、公安身份验证等)。通过劫持 DNS 或网络延迟注入模拟第三方故障,验证熔断和降级响应。
级联故障防护:当核心服务熔断后,依赖该服务的上游服务能否正确处理。例如:账户服务熔断 → 交易服务降级为仅展示缓存数据 → 前端提示「账户查询繁忙」。
资金安全测试:熔断和降级策略绝不应导致资金丢失或重复扣款。需验证:熔断时的转账请求是否被正确拒绝(而非部分执行),降级返回的缓存余额是否明确标注「非实时」。
| 工具 | 熔断 | 限流 | 降级 | 控制台 | 适用场景 |
|---|---|---|---|---|---|
| Resilience4j | ✅ | ✅ | ✅ | 无 | 轻量级、Java 原生应用 |
| Sentinel | ✅ | ✅ | ✅ | ✅ Dashboard | 大规模集群、实时监控需求 |
| Hystrix | ✅ | ✅ | ✅ | ✅ Dashboard | 已停维护,仅遗留系统 |
| Istio | ✅ | ✅ | ❌ | ✅ Kiali/Jaeger | 服务网格架构下的流量管控 |
推荐方案:新项目建议使用 Sentinel(阿里开源,经双 11 验证)或 Resilience4j(轻量无侵入),已有服务网格可复用 Istio 的熔断能力。