Sentinel的使用

Sentinel下载: 下载地址
Sentinel的使用_第1张图片
最上边这个jar包,下载后找个目录放java -jar运行就可以了
Sentinel默认是8080端口

启动示例

java -jar sentinel-dashboard-1.8.5.jar --server.port=9095//以9095端口启动,默认8080

--server.port=自定义端口。默认为 8080
--auth.username=自定义账号 和 --auth.password=自定义账号密码。默认为sentinel 
--logging.file=自定义日志文件位置。默认为 ${user.home}/logs/csp/sentinel-dashboard.log

Sentinel的使用_第2张图片

springboot使用

pom

  <!--SpringCloud ailibaba sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.0.1.0</version>
        </dependency>

配置类

spring:
  cloud:
      sentinel:
      transport:
        #配置sentinel dashboard地址
        dashboard: localhost:9095
        #默认8719端口,若此端口被占用会循环+1扫描,直至找到未被占用端口
        port: 8719

配置完启动后,在后台没任何显示,只有访问一次服务后后台才会出现此服务
Sentinel的使用_第3张图片
可在蔟点链路查看访问的接口并添加流控,熔断,热点,授权

先说个注解 官网解释

@SentinelResource(value = "资源名",blockHandler = "出问题调用的方法名")
出问题调用的方法再原方法基础上加个BlockException参数就可以了

Sentinel的使用_第4张图片

不写这个接口就直接拿接口访问路径当资源名也行

流控规则(限定接口访问数量):
Sentinel的使用_第5张图片

  • 阈值:其中QPS指的是每秒钟访问的次数,线程数就是同时访问的线程数量,阈值就是设置的上限

  • 流控效果:

    1. 快速失败:超过阈值直接返回错误
    2. 预热:会出现一个输入框提示输入预热时长,会在该时间内将阈值由设定阈值的1/3倍逐渐提升至1倍
    3. 排队:顾名思义
  • 流控模式:

    1. 直接:超过阈值我返回错误
    2. 关联:我关联你,你超过我设置的阈值,我寄了
    3. 链路:只统计部分来源的阈值
      看不懂可以点击这里,描述的很详细

    熔断规则(使接口暂时无法访问): Sentinel的使用_第6张图片

  • 熔断策略:

    1. 慢调用比例:
      • RT:平均等待时间
      • 比例阈值:超时请求比例达到此阈值将对接口熔断
      • 熔断时间:设置接口无法访问的时间,时间过后接口可恢复访问
      • 最小请求数:统计时常内的请求达到此请求数,开始判断是否熔断
      • 统计时常:统计此时间段内的请求数
    2. 预异常比例:
      • 比例阈值:异常请求比例达到此阈值将对接口熔断
    3. 异常数:
      • 异常数:异常请求比例达到此数量将对接口熔断

热点规则(对接口内某个参数限流):
Sentinel的使用_第7张图片

  • 参数索引:方法中形参的索引,举个例子在这里插入图片描述在此方法中a的参数索引为0,b的参数索引为1
  • 单机阈值:访问次数上限(只统计包含热点参数的请求,如我请求这个接口,不传参数a那就不会被限制)
  • 统计窗口时长:几秒一个循环,假如设置5秒,过了三秒被限流则限流两秒,若才过一秒就限流了就会限流4秒(自己测试的,不对可留言,勿喷)
    参数例外项
  • 参数类型:几个级别数据类型加字符串(选热点限流参数数据类型)
  • 参数值:热点参数可能的值
  • 限流阈值:热点参数针对于该参数值可以访问的次数。
    额外项意思就是,本来只要查我参数a,查到阈值就限流,而我加了额外项后,假如我加了参数值xxxx阈值300,那我查a的值为xxxx的数据要到300次才限流。

系统规则(整体的,不针某个接口):
Sentinel的使用_第8张图片

  • Load:自适应(仅对 Linux/Unix-like 机器生效)并发线程数超过估算的系统容量时才会触发系统保护
  • RT:所有入口流量的平均执行时间达到阈值即触发系统保护
  • 线程数:所有入口流量的并发线程数达到阈值即触发系统保护
  • 入口 QPS:单台机器上所有入口流量的 QPS 达到阈值即触发系统保护
  • CPU使用率:当系统 CPU 使用率超过阈值即触发系统保护

授权规则:
Sentinel的使用_第9张图片
若配置白名单则只有请求来源位于白名单内时才可通过;
若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
使用参考

额外补充:
整合openfeign
yml

#配置feign对sentinel的支持
feign:
  sentinel:
    enabled: true

在@FeignClient注解添加fallback值为保底类的class
Sentinel的使用_第10张图片
Service代码

@FeignClient(name="QIESIYV-ZHUTI-TIGONG",contextId = "Ceshi",fallback = ParOpenFeignSentinelService.class)
@Component
public interface ParOpenFeignService {

    @GetMapping(value = "/ceshi/ceshi")
    String ceshi();
}

保底类代码

@Component
public class  ParOpenFeignSentinelService implements ParOpenFeignService {

    @Override
    public String ceshi() {
        return "已服务熔断";
    }
}

当关闭所有服务提供者再访问此接口
效果
Sentinel的使用_第11张图片
配置持久化到nacos
看了一圈最简单的:链接

你可能感兴趣的:(sentinel,spring,boot,java)