文章目录
安装Sentinel
sentinel组件由两个部分组成:
- 核心库(Java客户端),不依赖任何框架和库,能够运行于Java运行时环境,同时对SpringCloud等框架也有较好的支持。
- 控制台(DashBoard)基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器
下载
https://github.com/alibaba/Sentinel/releases
运行命令
java -jar sentinel-dashboard-1.7.2.jar
注意:8080端口不能被占用
访问sentinel管理界面
http://localhost:8080
账号密码:sentinel
流控规则
基本介绍
- 资源名:唯一名称,默认请求路径
- 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
- 阈值类型/单机阈值
- QPS(每秒请求数量):当调用该api的QPS达到阈值的时候,进行限流
- 线程数:当调用该api的线程数达到阈值的时候,进行限流
- 是否集群:不需要集群
- 流控模式:
- 直接:api达到限流条件时,直接限流
- 关联:当关联的资源达到阈值时,就限流自己
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)
- 直接:api达到限流条件时,直接限流
- 流控效果
- 快速失败:直接失败。抛异常
- Warm up:根据coldfactor(冷加载因子,默认3)的值,从阈值/coldfactor,经过预热时长,才达到设置的QPS阈值
如:秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。 - 排队等待:匀速排队,让请求以匀速通过,阈值类型必须设置为QPS,否则无效
降级规则
RT
异常比例
异常数
热点key限流
配置
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2)
{
//int age = 10/0;
return "------testHotKey";
}
返回异常不友好界面,blocked by sentinel
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2)
{
//int age = 10/0;
return "------testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception)
{
return "------deal_testHotKey,o(╥﹏╥)o"; //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
}
自定义blockHandler,处理异常。
参数例外项
假如当p1的值等于5时,它的阈值可以达到200:
参数类型仅限于基本数据类型或者String
系统规则
系统配置管辖太宽泛,可能引起全局范围内的问题,不使用,危险。
@SentinelResource
按照资源名称+流控规则限流+后续处理
@GetMapping("/byResource")
@SentinelResource(value <