Spring Cloud Sentinel
文章目录
1. Sentinel Dashboard 启动
- 下载sentinel dashboard jar包
- sentinel dashboard启动在8889端口上
java -jar -Dserver.port=8889 sentinel-dashboard-1.8.8.jar
- 打开dashboard页面
http://localhost:8889
默认用户名密码都是sentinel
2. Spring Cloud 客户端配置
- 引入sentinel客户端
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- application.yaml文件添加sentinel客户端配置
spring:
application:
name: stock-service
cloud:
sentinel:
transport:
dashboard: localhost:8889 # dashboard服务所在的地址跟ip
client-ip: 192.168.0.5 # 这里是程序所在的客户端ip,使用ipconfig命令查看,不配置无法再dashboard上显示当前服务
- 打开dashboard页面,由于Sentinel Dashboard是惰性加载,此时簇点链路不会有服务的信息跟服务的接口信息,需要我们调用接口,才会在上面显示
- 调用order-service的/order/add接口后可以看到比上图增加了一个/order/add接口.
3. Sentinel Dashboard 限流配置
流控模式
流控模式有三种,直连,关联跟链路
直连
限制并发过高问题,防止当前程序崩溃,限制当前接口的qps,设置为5,可以在流控规则中看到
发起压测,并发10个,只能通过5个,不限流的话10个请求时都可以通过的
关联
关联用于两个接口间的资源竞争
这里有两个接口/order/{productId}跟/order/add接口,一个接口是订单查询,一个接口是订单新增后,因为两者都要去操作数据库的订单表,所以可能存在数据库资源抢占问题,一般认为订单的新增接口优先级比订单查询接口高,所以当/order/add的QPS达到某个阈值时,对优先级低的/order/{productId}接口进行限流,这里设置当/order/add的QPS达到5时(只是一个监控,不会限制add接口的QPS),/order/{productId}接口进行限流
同时发起/order/add接口跟/order/{productId}接口的压测,add接口都成功,QPS是8,不会被上图设置的QPS=5限制住,/order/{productId}则是因为add接口的QPS达到8,直接限制了接口,拒绝请求
/order/add并发:
/order/{productId}并发:
链路
链路主要是资源分配,对同一个资源有多个入口的情况下,限制该资源的访问
- Service类通过@SentinelResource定义一个方法为资源,/order/add接口跟/order/{productId}接口都会调用到这个服务,add是新增后查询,/order/{productId}是直接查询
@Override
@SentinelResource(value = "order")
public TProduct getProduct(String productId) {
return productMapper.selectById(productId);