安装控制台
-
下载对应 sentinel 版本的控制台 jar 包
地址:官方下载地址 -
在下载的路径下执行 cmd 命令 ,启动该jar包
java -jar sentinel-dashboard-1.7.1.jar
看到启动成功后
不要关闭命令窗口 -
访问 dashboard 默认端口为 8080 ,http://localhost:8080 这样就可以看到我们对应的 dashboard 页面,账号密码都是 sentinel 就可以登录进去啦
功能演示
- 首先要启动 nacos
- pom 文件中引入 sentinel 的坐标
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
- 配置 yaml 文件
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel dashboard地址
# 应用与sentinel交互的默认端口是8719,如果该端口被占用则会自动+1 变成 8720 ,直到找到未被占用的端口
port: 8719
- 创建 Controller 就写最基本的controller就可以,为演示功能暂时只写controller
@GetMapping("/testA")
public String testA() {
return "-----testA";
}
@GetMapping("/testB")
public String testB() {
return "----testB";
}
配置流控内容
sentinel 的 dashboard 打开默认是空白的,它的监控是懒加载模式,所以先去访问服务连接后再刷新 dashboard 就能够看到监视的服务了
簇点链路中会看到我们访问过的资源地址,点击后边的流控,即可以配置流控规则
对于流控中的流控模式和流控效果解释如下
流控模式:
- 直接:访问达到限流条件时,直接限流
比如上图中阈值为 QPS=1 那么如果在一秒内访问刷新多次这个路径,则会被限流 - 关联:当关联的资源达到阈值时,就限流自己
比如下图中 testB 关联 testA,那么如果访问 A 达到了 QPS=1 这个阈值,那么再访问 B 时会被限流
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
假设有两个服务C和D 同时调用testA 这个服务的话,那么如果C 调用testA 达到阈值被限流后,D服务仍然可以调用testA 服务
流控效果:
- 快速失败:直接失败,抛异常
- Warm Up:根据 codeFactor (冷加载因子,默认 3) 的值,从阈值/codeFactor ,经过预热时长,才达到设置的QPS阈值
举例如下图:起始阈值为10/3 经过5秒后阈值逐渐升值到10
- 排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设成QPS 否则无效,设置的含义: /testA 每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒
这样我们对于sentinel流控的基本实现算是结束了。