Sentinel 通过线程隔离与熔断降级协同实现故障隔离:一、用并发数限流实现信号量隔离;二、配置熔断规则切断故障传播;三、Feign 中整合 fallback 提供降级兜底;四、对重型依赖可结合线程池手动实现物理隔离。

要实现故障隔离,Sentinel 主要靠线程隔离和熔断降级两个机制配合使用,不是单靠限流。限流是预防过载,而隔离与熔断才是应对已发生的故障、防止雪崩的核心手段。
一、用并发线程数限流做轻量级线程隔离
适用于同步调用(如 Feign RPC),不创建新线程池,仅用计数器控制并发数,开销极低:
- 在 Sentinel 控制台或代码中为资源(如接口名、Feign 方法)配置 流控规则,阈值类型选“并发数”
- 设置合理并发上限(例如 10),超出的请求直接被
FlowException拦截 - 该方式本质是信号量隔离(Semaphore),每个服务调用独占一组并发配额,互不影响
- 适合调用链短、响应快的下游依赖;不适合长耗时任务(应改用物理线程池隔离)
二、用熔断规则切断故障传播路径
当某个下游服务开始变慢或频繁出错,就主动“跳闸”,避免持续消耗本服务资源:
- 配置 降级规则(DegradeRule),推荐三种策略之一:
- 慢调用比例:比如 5 秒内响应 >500ms 的请求占比超 50%,立即熔断 10 秒
- 异常比例:5 秒内抛出业务异常/超时异常的比例超过阈值(如 0.4)
- 异常数:单位时间(如 60 秒)内异常调用次数达到阈值(如 5 次)
- 熔断后进入 OPEN 状态,所有对该资源的请求直接走 fallback,不发真实调用
- 熔断窗口结束后自动进入 HALF-OPEN 状态,试探性放行少量请求验证是否恢复
三、Feign 调用中整合 fallback 实现降级兜底
熔断只是“不调”,降级才是“给什么”。必须配合 fallback 才算完整隔离:
- 为 FeignClient 编写
FallbackFactory,返回带默认逻辑的代理对象(如返回空列表、缓存数据、静态提示) - 在
@FeignClient注解中通过fallbackFactory属性指定该类 - 确保 fallback 方法不依赖外部服务,也不抛异常,否则可能触发二次熔断
- 示例场景:用户中心不可用时,订单服务 fallback 返回“游客身份”,而非报错中断下单流程
四、高级隔离:为关键下游分配独立线程池(物理隔离)
对耗时长、不可控的重型依赖(如报表导出、大文件上传回调),建议启用 Hystrix 风格的线程池隔离:
- Spring Cloud Alibaba Sentinel 目前不原生支持自定义线程池,需结合
ThreadPoolTaskExecutor+@Async手动封装调用 - 或切换至 Resilience4j,其
ThreadPoolBulkhead提供更标准的线程池级隔离能力 - 若坚持用 Sentinel,可将重任务抽象为独立资源,用并发数限流 + 熔断双重保护,并设置较宽松的 timeout

















