文章目录
控制台部署
首先需要下载控制台jar包并在本地启动
官方文档 , 下载地址,注意版本需要和maven引入的版本一致
第二步,启动
java -jar sentinel-dashboard.jar
# 这些参数 -D 是固定写法,后面再跟一些配置参数
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
其中 -Dserver.port=8080
用于指定 Sentinel 控制台端口为 8080
,默认就是8080,我们可以修改。
从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel
。可以参考 鉴权模块文档 配置用户名和密码。
注:若您的应用为 Spring Boot 或 Spring Cloud 应用,您可以通过 Spring 配置文件来指定配置,详情请参考 Spring Cloud Alibaba Sentinel 文档。
然后在浏览器中进行访问
用户名密码默认都是sentinel,登录进去是没有东西的,之后sentinel客户端结合使用之后就会有内容了
客户端接入控制台
-
引入坐标
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>x.y.z</version> </dependency>
-
配置启动参数
启动时加入 JVM 参数
-Dcsp.sentinel.dashboard.server=consoleIp:port
指定控制台地址和端口。若启动多个应用,则需要通过-Dcsp.sentinel.api.port=xxxx
指定客户端监控 API 的端口(默认是 8719)。除了修改 JVM 参数,也可以通过配置文件取得同样的效果。更详细的信息可以参考 启动配置项。
优先级顺序:JVM -D 参数的优先级最高。若 properties 和 JVM 参数中有相同项的配置,以 JVM 参数配置的为准。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAxodfzw-1658027726248)(E:\Java笔记\image\springcloud_alibaba\image-20220622223542947.png)]
服务启动成功之后,还需要请求一下接口,sentinel控制台才能有显示。也就是接下来的触发访问量
- 触发客户端初始化
确保客户端有访问量,Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包。
注意:您还需要根据您的应用类型和接入方式引入对应的 适配依赖,否则即使有访问量也不能被 Sentinel 统计。
我们现在在代码中写了一些资源的服务容错规则,所以现在这些菜单中就会有我们配置的内容,到时候和SpringCloud Alibaba整合之后,刚进来肯定是没有的,我们需要为每一个资源设置对应的规则,还有就是我们结合SpringCloud Alibaba之后,我们在控制台配置了规则之后,各个微服务重启之后,我们配置的东西也就消失了
整合SpringCloud Alibaba
第一步,引入场景启动器,这里就不需要引入上面那么多的依赖了
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
第二步,配置文件中设置控制台地址
server:
port: 8092
spring:
application:
name: order-sentinel
cloud:
sentinel:
transport:
# 设置sentinel控制台的地址
dashboard: 127.0.0.1:8080
第三步,创建rest接口,启动服务,调用测试
控制台详解
实时监控
监控接口通过的QPS 和 拒绝的QPS。
显示了每秒钟通过的QPS 、拒绝的QPS、响应时间
每一个接口都有一个实时监控界面,我们可以通过右上角进行搜索关键字
簇点链路
用来显示微服务所有可以进行设置容错规则的资源,我们也可以在此界面为各个资源设置对应的容错规则,然后再相应的菜单下就能看到了
服务中的接口如果没有使用@SentinelResource
注解来指定资源名的话默认就会根据@RequestMapper
注解指定的访问uri路径来命名
流控规则
流量控制(flow control) ,原理是监控应用流量的QPS或并发线程数等指标,当达到指定的阀值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保证应用的高可用。
普遍的场景:
- 在服务提供方控制脉冲流量
- 针对不同调用来源进行流控
- web接口流控
添加流控步骤:
在簇点链路菜单下,选择要进行流控的资源,然后点击右侧的流控按钮
QPS流控
QPS(Query Per Second):每秒请求树,就是服务器再一秒钟内处理了多少个请求
然后选择阀值类型并输入阀值
接下来进行测试,1秒钟之内发送请求超过设定的阀值后就会被拒绝,这里是sentinel被流控之后的响应信息,如果我们想要自定义流控拒绝之后的响应信息就可以使用@SentinelResource
注解
@RestController
@RequestMapping("/order")
public class OrderController {
@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
return "下单成功!";
}
// value 指定资源名
@RequestMapping("/flow")
@SentinelResource(value = "flow", blockHandler = "flowBlockHandler")
public String flow(){
System.out.println("正常访问");
return "正常访问!";
}
/**
* 返回值 请求参数要和源方法一致,注意添加的是BlockException 不是BlockedException
*/
public String flowBlockHandler(BlockException e){
System.out.println("flow 流控了");
return "flow 流控了!";
}
}
然后重启服务,就会发现我们之前设置的规则都没了,没有暂时还没有持久化,我们现在需要重新为flow接口添加流控规则
添加完流控规则后进行访问测试
并发线程数
并发线程数控制用于保护业务线程池不被慢调用耗尽。
比如调用下游服务由于某种原因迟迟得不到响应,所有的请求都会堆积在调用方这边,也就会占用更多的线程,最终撑爆线程池,拖垮服务。
sentinel并发控制不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目(正在执行的调用数目),如果超出阀值,新的请求就会立即拒绝,效果类似于信号量隔离。并发数控通常在调用端进行配置。
我们一般会使用压测,测试接口的瓶颈,然后再设置线程数的阀值,这里进行测试就暂时想阀值设置为很小。
接下来进行测试,我们需要修改一下这个rest接口,不能让它请求就立刻响应,加一个睡眠几秒。
@RequestMapping("/flow")
@SentinelResource