SpringCloud-Alibaba学习(十):Sentinel流控与Dashboard配置
Sentinel流控
Sentinel 通过流量控制以及熔断降级来保护系统资源
流量控制(flow control):其原理是监控应用流量的 QPS 或并发线程数等指标,当达到设置的阈值时堆流量进行控制,避免服务被瞬时的流量高峰击垮,从而保障服务高可用性。
1、QPS超过阈值直接失败
QPS:queries per second,每秒资源被访问的次数
当访问资源的 QPS 超过阈值,直接进行限流,从而保护资源
上面设置规则:当每秒 QPS 大于 1 时触发流控,多余的请求直接失败
2、线程数超过阈值直接失败
当工作线程数(并发数)超过阈值,触发限流
使用 jmeter 压测可以看到请求被拒绝效果
3、QPS超过阈值关联失败
被流控资源受到关联资源的 QPS 影响,当关联资源的 QPS 请求超过阈值时,流控资源请求会拒绝。
使用 jmeter 调用资源 /test/get2
,浏览器访问 /test/get
单独访问两个资源都不会被流控,反过来调用也不会被流控
4、线程数超过阈值关联失败
当关联资源正在工作的线程数(并发数)请求超过阈值时,流控资源请求会拒绝。
5、QPS 超过阈值链路失败
使用注解 @SentinelResource
添加监控资源
@Service
public class TestService {
@SentinelResource(value = "testServiceResource")
public String get() {
return "service resource";
}
}
调用发现流控不生效
需要添加配置项:
spring.cloud.sentinel.web-context-unify=false
流控生效抛出异常:
6、线程数超过阈值链路失败
7、Warm Up
Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
仅支持 QPS 限流
8、匀速排队
匀速排队方式会严格控制请求通过的间隔时间,即是让请求以均匀的速度通过,对应于漏桶算法。
注意:匀速排队模式暂时不支持 QPS > 1000 的场景
仅支持 QPS 限流
规则含义:QPS = 10
表示一秒内匀速通过 10 个请求,每个请求平均间隔 100ms,超时时间表示排队的请求最多等待时间,2s 超时表示排队中的请求最多 20 个,再多就会被拒绝。
简单计算方法:实际QPS / 超时时间s <= 阈值
说明请求可以全部执行,否则部分请求会被拒绝