Sentinel系列-流控规则详解
Sentinel流控规则详解Sentinel的主要工作之一就是流量控制,因此对流控规则的掌握是必不可少的。Sentinel名词解释资源名:唯一名称,默认请求路径针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)阈值类型/单机阈值:1、QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流;2、线
Sentinel流控规则详解
Sentinel的主要工作之一就是流量控制,因此对流控规则的掌握是必不可少的。
Sentinel名词解释
- 资源名:唯一名称,默认请求路径
- 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)
- 阈值类型/单机阈值:
1、QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流;
2、线程数:当调用该接口的线程数达到阈值时,进行限流 - 是否集群:不需要集群
- 流控模式:
1、直接:接口达到限流条件时,直接限流
2、关联:当关联的资源达到阈值时,就限流自己
3、链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)[api级别的针对来源] - 流控效果
1、快速失败:直接失败
2、Warm Up:即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值
3、排队等待
阈值类型讲解
单机阈值比较好理解,就是每秒对QPS/线程数的控制。
QPS与线程数的区别在于:
- QPS单纯的代表每秒的访问次数,只要访问次数到达一定的阈值,这进行限流操作
- 线程数,代表的是每秒内访问改api接口的线程数,如果该接口的操作比较长,当排队的线程数到达阈值的时候,进行限流操作,相反的如果接口的操作很快,即是没秒内的操作很快,同样不会进行限流操作
- QPS可以简单的理解为访问次数,但是线程数是和接口处理的快慢有关的。
流控模式
流控模式分为直接、关联和链路
直接模式理解起来比较简单,就是单纯的对当前资源的流量控制,这里不再做过多的解释。
关联模式
定义:当关联的资源达到阈值时,限流自己。
如下图的配置,当A的QPS的阈值到达2的时候,B就会被限流。
链路模式
源码如下:
定义SentinelResource 为getOrder
import java.util.Random;
@Service
public class OrderServiceImpl implements OrderService{
@Override
@SentinelResource(value = "getOrder", blockHandler = "handleException")
public String getOrder() {
return String.valueOf(new Random().nextInt());
}
public String handleException(BlockException ex) {
System.out.println("县六中............");
return ex.getClass().getCanonicalName() + "\t服务不可用";
}
}
定义两个请求接口,调用getOrder()
@Resource
private OrderService orderService;
@GetMapping("/test1")
public String test1() {
return orderService.getOrder();
}
@GetMapping("/test2")
public String test2() {
return orderService.getOrder();
}
实际效果,应该是对配置链路的test1进行限流控制,实现更加细致化的流控,但是实际并没有什么效果。
流控效果
流控效果分为直接失败、预热和排队等待。
直接失败理解起来比较简单,就是限流的时候直接提示。
预热模式
根据codeFactor(冷加载因子,默认为3)的值,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值 ,因此上图的配置就是系统初始化的默认阈值为10 / 3,即为3,也就是刚开始的时候阈值只有3,当经过5s后,阈值才慢慢提高到10;这种情况主要是为了保护系统,例如在秒杀系统的开启瞬间,会有很多流量上来,很可能会把系统打挂,预热方式就是为了保护系统,可以慢慢的把流量放进来,慢慢的把阈值增长到设定值。
排队等待模式
/test2每秒5次请求,超过的话就排队等待,等待的超时事件为10ms,目的是为了匀速处理请求,保证服务的均匀性,而不是一会处理大量的请求,一会有没有请求可处理。
更多推荐
所有评论(0)