Sentinel
面向云原生微服务的流量控制、熔断降级组件。
搭建
官网下载Sentinel 仪表盘jar包。编译后,访问默认端口 http://localhost:8080 即可。
这一步后就可以开始搭建我们的微服务实现sentinel给我们提供强大的功能。
搭建被监控服务
pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
···部分省略依赖
yml:
server:
port: 8401
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080
port: 8719
management:
endpoints:
web:
exposure:
include: '*'
流控规则
sentinel流控.png规则选填项说明:
- 资源名:唯一名称,默认请求路径
- 针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认为default
- 阈值类型/单机阈值:
- QPS(每秒钟请求数量): 当调用该API的QPS达到阈值的时候进行限流。
- 线程数:当调用该API的线程数达到阈值后,进行限流。
- 是否集群:需不需要集群
- 流控模式:
- 直接:api达到限流条件时,直接限流。
- 关联:当关联的资源达到阈值时,就限流自己。
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值就进行限流)。
- 流控效果:
- 快速失败:直接失败,抛异常
- Warm up:根据 codeFactor(冷加载因子,默认3)的值,从阈值/codefactor,经过预热时间,才达到设置的QPS阈值
- 排队等候:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效。
进入 sentinel-dashboard -> 添加流控规则:(默认已经启动了被监控服务并已经注册到Nacos)
sentinel流控.png测试:流控模式:直接。
正常访问:
sentinel.png当QPS超过阈值后,限制访问:
sentinel.png关联
女朋友消费,男朋友买单。好比支付服务承受不住了,下单服务就开始限流。
sentinel关联.png冷启动-warm up
默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值
sentinel-warm up.png解析:即请求QPS从 10/3 的访问量开始, 经过5秒后阈值恢复到到10。
降级规则
sentinel降级.png- 慢调用比例:1秒内持续j进入5个请求且平均响应时间 > 阈值则触发熔断,熔断时长过后关闭降级。
- 异常比例:QPS > 5且异常比例超过阈值(秒级)
- 异常数:异常数超过阈值(分钟统计)
热点规则
sentinel热点规则.png参数索引:
参数索引.png
那这个热点规则可以做点什么呢?首先来看我们的服务接口:
@GetMapping("/hotkey")
@SentinelResource(value = "hotkey", blockHandler = "deal_hotkey")
public String hotKey(@RequestParam(value = "p1", required = false) String p1,@RequestParam(value = "p2", required = false) String p2) {
return "----hotkey";
}
public String deal_hotkey(String p1, String p2, BlockException exception) {
return "----deal_hotkey";
}
当我们请求带参数索引为0的参数(即p1)时,超过阈值就会走@SentinelResourse 注解中blockHandler中的方法,返回----deal_hotkey。
网友评论