Sentinel是什么?
一句话:无限接近Hystrix
Sentinel分为两个部分:
- 核心库:(JAVA客户端)不依赖任何框架,能够运行于所有JAVA环境,
- 控制台:(Dashboard)基于Springboot开发,打包后可以直接运行,不需要额外的Tomcat等应用。
启动方法:
![截屏2020-10-18 下午5.59.00.png](https://img.haomeiwen.com/i15333334/5883e8f6d562c8a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)java -jar sentinel-dashboard-1.8.0.jar
访问80端口即可,默认账号密码都是sentinel
Spring集成
pom
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
yml
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery: #nacos服务注册中心地址
server-addr: www.cjlly.com:8848
sentinel: #Sentinel注册地址
transport:
dashboard: www.cjlly.com:8080
port: 8719
此时启动项目后登陆sentinel控制台界面会发现空空如也,因为sentinel是懒加载机制,执行一次访问即可
Sentinel流控模式
默认情况下是快速失败,即新增流控规则,阀值类型选择QPS(每秒钟访问多少次),在单机阀值那里填写数字即可。当访问超过阀值的时候接口就会停止访问。
名词:
- 资源名:唯一名称,默认请求路径
- 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认Default(不区分来源)
- 阀值类型/单机阀值
- QPS(每秒钟的请求数量):当调用该api的QPS达到阀值的时候,进行限流
- 线程数:当调用该API的线程数达到阀值的时候,进行限流
- 是否集群:不需要集群
- 流控模式:
- 直接:当api达到限流条件的时候,直接限流
- 关联:当关联的资源达到阀值的时候,就限流自己
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阀值,就进行限流)【api级别的针对来源】
- 流控效果:
- 快速失败:直接失败,报异常
- Warm Up:根据codeFactor(冷加载因子,默认为3)的值,从阀值/codeFactor,经过预热时常,才达到设置的QPS阀值
- 排队等待:匀速排队,让请求以匀速的速度通过,阀值类型必须设置为QPS,否则无效。
流控模式:
- 直接失败
当访问超过设定的阀值直接失败。 - 关联
当关联的资源达到阀值的时候就限流自己,比如controller中含有两个方法A和B,当与A关联的资源B达到阀值后,就限流A,B惹事,A挂了。
设置A的流控规则,QPS为1,关联B,那么当B的访问超过阀值的时候A就无法访问。
流控效果:
-
预热(Warm Up)
公式:阀值除以coldFactor(默认为3),经过预热时长后才会发到阀值。
解读:Warm Up即预热/冷启动方式。当系统长期处于低水位的情况下,流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过“冷启动”,让通过的流量缓慢增加,在一定时间内逐渐增加到阀值上限,给冷启动一个预热时间,避免冷启动被压垮。
比如说设置A的QPS阀值为10,warm up时间为5s,那么最开始阀值就是3,5秒后慢慢增加到预设的10.
应用场景:秒杀系统在开启瞬间,会有很多流量上来,很有可能把系统打死。预热方式就是为了保护系统,慢慢的把流量放进来。 -
排队等待
匀速排队,让请求以均匀的速度通过,阀值类型必须设置成QPS,否则无效。对应的是漏桶算法.
设置含义:/A每秒1次请求,超过的话就排队等待,等待的超时时间为2000毫秒。
应用场景:主要用于处理间隔性突发流量,比如在某一秒内有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。
网友评论