diff --git a/cloud-demo/ReadMe.md b/cloud-demo/ReadMe.md index bb42088..7ebf9f4 100644 --- a/cloud-demo/ReadMe.md +++ b/cloud-demo/ReadMe.md @@ -669,6 +669,8 @@ public class GlobalExceptionHandler { #### blockHandler vs fallback区别 +有block先走block。 + | 特性 | blockHandler | fallback | | -------- | ------------------------ | ------------------- | | 触发条件 | 流量控制/熔断时触发 | 业务异常时触发 | @@ -784,3 +786,71 @@ graph TD - 需配置超时时间(毫秒) - 不支持QPS>1000的场景 +## 熔断降级 + +1. **熔断恢复**:系统会在熔断时间结束后自动尝试恢复,进入半开状态 +2. **监控建议**:建议配合Dashboard监控熔断事件,设置合理的告警机制 +3. **阈值设置**:需要根据实际业务场景调整阈值,过高会导致保护不足,过低可能误熔断 +4. **降级策略**:应准备有意义的降级响应,如缓存数据、默认值或友好提示 + +熔断降级是分布式系统中重要的稳定性保障手段,主要功能包括: + +- **切断不稳定调用**:自动识别并隔离故障服务 +- **快速返回不积压**:避免请求堆积导致资源耗尽 +- **避免雪崩效应**:防止故障在系统中级联扩散 + +### 典型场景 + +在分布式系统中,如果A服务调用G服务,G服务调用D服务,当D服务出现性能问题时,会导致整个调用链路响应变慢。通过熔断机制,G服务可以快速识别D服务的异常状态,直接返回预设的降级响应,避免无效等待和资源浪费。 + +### 断路器工作原理 + +1. **关闭状态**:初始状态,所有请求正常通过 +2. **熔断状态**:当触发熔断条件时,直接拒绝请求,快速失败 +3. **半开状态**:熔断时间结束后,尝试放行少量请求测试服务是否恢复 + - 成功则关闭熔断,恢复正常 + - 失败则继续保持熔断状态 + +### 最佳实践 + +熔断降级作为自身保护手段,通常在客户端(调用端)进行配置: + +- 针对关键依赖服务配置熔断规则 +- 设置合理的熔断阈值和恢复时间 +- 配合降级逻辑提供有意义的fallback响应 +- 监控熔断事件,及时预警 + +### 实际示例 + +#### 慢调用比例 + +配置参数: + +- **最大RT**:1000ms(超过此响应时间的请求视为慢调用) +- **比例阈值**:0.8(当慢调用比例超过80%时触发熔断) +- **熔断时长**:30s(触发熔断后持续30秒) +- **最小请求数**:5(统计窗口内至少需要5个请求才进行熔断判断) +- **统计时长**:5000ms(滑动窗口统计的时间长度为5秒) + +![熔断机制示意图](./images/image-20250527122236682.png) + +#### 异常比例 + +配置参数: + +- **比例阈值**:0.5(当异常比例超过50%时触发熔断) +- **熔断时长**:10s +- **最小请求数**:10 +- **统计时长**:10000ms + +适用场景:适用于服务依赖不稳定,可能出现大量异常的情况。 + +#### 异常数 + +配置参数: + +- **异常数阈值**:5(当异常数量达到5次时触发熔断) +- **熔断时长**:60s +- **统计时长**:60000ms + +适用场景:适用于低流量但要求高可用的服务,可以快速响应偶发异常。 diff --git a/cloud-demo/images/image-20250527122236682.png b/cloud-demo/images/image-20250527122236682.png new file mode 100644 index 0000000..7ba93fd Binary files /dev/null and b/cloud-demo/images/image-20250527122236682.png differ