启动后 使用用户密码sentinel登录即可
sentinel是懒加载的 需要有请求才能够显示对应的服务
流控演示
流控模式:
直接:接口达到限流条件时,直接限流
关联:当关联的资源达到阈值时,就限流自己
直接快速失败
这里要区分一下QPS和线程数
QPS可以理解为 每秒请求的次数 当每秒单机阈值超过1 则失败
线程数多次刷新是没有失败效果的 但如果加了延时 再打开不同的页面 再次刷新 则失败
关联快速失败
要测试最好加上延时和postman等模拟工具 这里就不演示了
postman发多个请求
但还是提一下怎样开多个请求
链路快速失败
这是重点讲的内容 毕竟在这里踩过坑
这里说一下 我用的版本是springCloud-alibab 是2.2.0.RELEASE sentinel1.7.0 所以会造成流控链路失效
给出解决办法
这里举个例子
新增service接口
@Service
public class SentinelService {
/**
* @SentinelResource: 可以理解就是一个资源名
*/
@SentinelResource("myresource")
public String sentinelChain() {
return "调用该资源成功!!!!!";
}
}
controller
@RestController
public class FlowLimitController {
@Autowired
private SentinelService sentinelService;
@GetMapping("/testC")
public String testC() {
return "testC"+sentinelService.sentinelChain();
}
@GetMapping("/testD")
public String testD() {
return "testD"+sentinelService.sentinelChain();
}
}
如果单单是这样的配置 是不起效果的 还需要新增配置
1.7.0 版本开始(对应Spring Cloud Alibaba的2.1.1.RELEASE) 需要新增依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-web-servlet</artifactId>
</dependency>
配置spring.cloud.sentinel.web-context-unify=false
配置类
@Configuration
public class FilterContextConfig {
@Bean
public FilterRegistrationBean sentinelFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new CommonFilter());
registration.addUrlPatterns("/*");
// 入口资源关闭聚合
registration.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false");
registration.setName("sentinelFilter");
registration.setOrder(1);
return registration;
}
}
接下来就起效果了
Warm Up 预热
当流量突然增大的时候,我们常常会希望系统从空闲状态到繁忙状态的切换的时间长一些。即如果系统在此之前长期处于空闲的状态,我们希望处理请求的数量是缓步的增多,经过预期的时间以后,到达系统处理请求个数的最大值。Warm Up(冷启动,预热)模式就是为了实现这个目的的。
默认 coldFactor 为 3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。
看图
上面的是官方说法 说人话就是 10/3=3
你一开始请求超过每秒3次
则报错 等预热5秒钟
除非超过每秒10次
否则系统正常运行
好比你要跑100米 得先热热身 让身体适应一下 不然抽筋猝死就完蛋了
排队等待
这里等待时间为1秒钟 如超过 一秒 则报错