先上一波github文档
https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0
下载jar包直接启动就行,官方文档里挺详细的
sentinel控制台没有指定账密的话默认都是sentinel
使用sentinel(先上依赖)默认已经引入了springCloud和springCloudAlibaba的依赖,要注意sentinel服务端的版本,可以在引入这个依赖后查看sentinel的版本,从而确定server端版本
yml配置完就ok了
spring:cloud:sentinel: transport: # 指定sentinel控制台地址 dashboard: localhost:8080 # 指定和控制台通信的IP,若不配置,会自动选择一个IP注册 client-ip: 127.0.0.1 # 指定和控制台通信的端口哦,默认值8719 # 若不配置,会自动扫猫从8719开始扫猫,依次+1,知道值找到未被占用的端口 port: 8719 # 心跳发送周期,默认值null # 但在SimpleHttpHeartbeatSender会用默认值10秒 heartbeat-interval-ms: 10000
如果想查看actuator/sentinel的信息需要引入actuator的依赖
然后在yml中配置
management: endpoints: web: exposure: include: '*'
接着访问配置上述yml的微服务,注意不是访问sentinel服务端.是访问上面配置的yml的tomcat应用
http://localhost:9005/actuator/sentinel
sentinel的流控规则介绍 规则介绍
资源名:唯一名称,默认请求路径,有可能不是路径因为其就只是一个名称而已针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)阈值类型/单机阈值:
QPS(每秒钟的请求数量):当调用该api的QPS达到阈值的时候,进行限流
线程数:当调用该api的线程数达到阈值的时候,进行限流是否集群:不需要集群,暂不研究流控模式:
直接:api达到限流条件时,直接限流 .(直接生效限流操作)
关联:当关联的资源达到阈值时,就限流自己
链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】流控效果:
快速失败:直接失败,抛异常
Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值.就是让请求逐步增长,这个时候高并发下实际请求会大于通过的请求,剩下的实际请求还是会失败的.可以看下面的warmUp的demo.
排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效 针对单个api设置QPS直接快速失败(流控模式直接)
比如设置QPS的域名为2,即每秒最大请求次数2次,用postman模拟后可以看到前2次都成功了,后面的几次都失败了
当某个服务已经满载的时候这个时候就限流自己,防止把对面的服务搞挂了.起到保护关联资源的效果.
可以针对调用同一个@SentinelResource注解声明的服务(方法)的多个api进行来源限流,细化到了api级别
在设置订预热时长内让系统慢慢的将阈值升至给定值,
阈值类型必需设置成QPS,否则无效
当单位统计时长(statIntervalMs默认1000ms)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断,然后就又要保持熔断时间,在熔断期间的所有请求都是进不来的,都会被拒绝。