赞
踩
Sentinel的流控规则。
本章使用的Sentinel版本为1.8.4,版本之间会存在差异。
流量控制,其原理是监控应用流量的QPS(每秒查询率)或者并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
编辑规则前,需要先请求一下对应的接口,才会被加载到sentinel控制台。
点击流控,新建流控规则
这里直接演示例子:QPS, 阈值为2,然后点击新增。测试快速请求这个接口,发现部分请求会被sentinel直接限制。
流控规则有3种模式
默认的配置是直接模式,就是前面章节的基本配置。
什么是关联模式?
当关联的资源开始达到阈值开始限流的时候,本资源才开始执行限流规则,如果关联资源没有限流,则本资源即使达到阈值也不会限流。例如order的query和upate,当update过高时,我们就设置关联规则,避免query查询数据影响update的操作。
什么是链路模式?
假设A和B 都调用C 资源,那么A–>C和B–>C就构成两条链路。A和B竞争相同的资源C。
示例:
@Service
public class MySourceServiceImpl {
@SentinelResource("findById")//定义资源
public String findById(){
return "abc";
}
}
@Autowired private MySourceServiceImpl mySourceService; @GetMapping("/hello1") public String hello() { log.info("say hello------------1"); mySourceService.findById(); return "hello1"; } @GetMapping("/hello2") public String hello2() { log.info("say hello------------2"); mySourceService.findById(); return "hello2"; }
启动服务器,访问刚刚定义的两个接口,在sentinel可以看到显示两个接口访问了同一个资源。
设置流控规则
访问 http://localhost:8091/hello1,频繁请求,发现失败了。但是访问http://localhost:8091/hello2,没有任何问题。
链路模式流控失败解决方案:Sentinel链路模式规则无效
流控效果分为三种
直接失败,抛出异常,不做任何额外的处理
它从开始阈值到最大QPS阈值会有一个缓存阶段,一开始的阈值时最大QPS阈值的1/3,然后慢慢增长,直到最大阈值,适用于将突然增大的流量转换为缓慢增长的场景。
让请求以均匀的速度通过,单机阈值为每秒通过数量,其它的排队等待,它会让设置的一个超时时间,当请求超过超时时间还未处理,则会被抛弃。
这就好比有10个人同时发出买票请求,而系统处理阈值时1人/秒,如果排队等待的时间是5秒,那么有些请求在达到5秒的等待时间后,依然不会被处理,就直接拒绝了,不再处理这个请求了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。