Spring Cloud Alibaba 的 Sentinel 是一个功能强大、灵活的流量控制、熔断降级、系统保护组件,主要用于保护微服务系统的稳定性。它在熔断和限流方面有显著优势,以下是详细解析:
Sentinel 是如何实现熔断和限流的?
1. 限流(Flow Control)
Sentinel 使用 滑动窗口 + 令牌桶/漏桶变种算法 来实现限流,主要支持以下几种策略:
- QPS 模式:每秒请求数(最多多少次/秒)。
- 线程数模式:控制某个资源最多同时并发的线程数量。
- 关联限流:如果访问资源 A 时依赖资源 B,可以根据 B 的 QPS 来限流 A。
- 链路限流:根据调用链的入口不同来限流,例如同一个方法被不同接口调用时分开限流。
- 集群限流:多个实例共同控制总 QPS 上限。
限流处理方式包括:
- 直接拒绝(默认)
- 排队等待(Warm Up 模式)
- 慢启动(渐进增加阈值)
2. 熔断降级(Degrade)
Sentinel 熔断是基于资源调用的异常比例、异常数、响应时间等进行判断:
- 响应时间(RT)熔断:当资源的平均响应时间超过阈值,进入熔断状态。
- 异常比例熔断:一段时间内,异常比例超过阈值则熔断。
- 异常数熔断:异常数超过设定阈值即熔断(适用于低并发系统)。
熔断后资源会进入“冷却期”,期间请求会被快速失败;冷却期后尝试恢复(半开状态)。
Sentinel vs Hystrix 的区别
特性 | Sentinel | Hystrix(已停止维护) |
---|---|---|
熔断机制 | 支持多种规则(RT、异常比例/数) | 主要是异常比例熔断 |
限流能力 | 强,支持多维度限流 | 基本不支持限流 |
系统自适应保护 | 支持(如 CPU、RT、线程等) | 不支持 |
控制台 | 提供强大控制台,动态配置规则 | 配置基本靠代码或配置文件 |
性能 | 更轻量,低开销,适合大规模系统 | 较重,线程隔离成本高 |
状态 | 活跃维护,被阿里生态广泛使用 | 已停止维护(2020年) |
总结一句话:
Sentinel 更适合现代微服务系统,功能更丰富,支持细粒度的限流与熔断控制,性能更优,是 Hystrix 的升级替代方案。
如需使用,请结合:
@SentinelResource
注解- 配合控制台动态配置
- 可结合 Nacos 实现规则的持久化与推送