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: *
流控规则
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/0e9afbff75464801b9f9a9caa1c508be.jpg)
规则选填项说明:
- 资源名:唯一名称,默认请求路径
- 针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认为default
- 阈值类型/单机阈值:
- QPS(每秒钟请求数量): 当调用该API的QPS达到阈值的时候进行限流。
- 线程数:当调用该API的线程数达到阈值后,进行限流。
- 是否集群:需不需要集群
- 流控模式:
- 直接:api达到限流条件时,直接限流。
- 关联:当关联的资源达到阈值时,就限流自己。
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值就进行限流)。
- 流控效果:
- 快速失败:直接失败,抛异常
- Warm up:根据 codeFactor(冷加载因子,默认3)的值,从阈值/codefactor,经过预热时间,才达到设置的QPS阈值
- 排队等候:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效。
进入 sentinel-dashboard -> 添加流控规则:(默认已经启动了被监控服务并已经注册到Nacos)
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/9ad2f55b30584ff79a7ece5aca3b3630.jpg)
测试:流控模式:直接。
正常访问:
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/d31299da0241420faa61cc1c55be911c.jpg)
当QPS超过阈值后,限制访问:
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/79ca7c36d6ec4b8999e0a3fc95783717.jpg)
关联
女朋友消费,男朋友买单。好比支付服务承受不住了,下单服务就开始限流。
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/e638379ad4ae4f8d85646128970e2210.jpg)
冷启动-warm up
默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/7a9c9ae18e89462ea7a258760c60d921.jpg)
解析:即请求QPS从 10/3 的访问量开始, 经过5秒后阈值恢复到到10。
降级规则
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/21e524cc864442ebb4ca557b931460f3.jpg)
- 慢调用比例:1秒内持续j进入5个请求且平均响应时间 > 阈值则触发熔断,熔断时长过后关闭降级。
- 异常比例:QPS > 5且异常比例超过阈值(秒级)
- 异常数:异常数超过阈值(分钟统计)
热点规则
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/43243b0c167c4bdf85f1207a42543f33.jpg)
参数索引:
![[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台](https://img.dunling.com/blogimg/20251213/c3d54e6d20394d969164d8eadd39e471.jpg)
那这个热点规则可以做点什么呢?第一来看我们的服务接口:
@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。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...