[SpringCloud Alibaba] 浅析Sentinel-dashboard控制台

Sentinel

面向云原生微服务的流量控制、熔断降级组件。

搭建

官网下载Sentinel 仪表盘jar包。编译后,访问默认端口 http://localhost:8080 即可。

这一步后就可以开始搭建我们的微服务实现sentinel给我们提供强大的功能。

搭建被监控服务

pom

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        
        ···部分省略依赖

yml:

server:
  port: 8401
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
management:
  endpoints:
    web:
      exposure:
        include: '*'

流控规则

sentinel流控.png

规则选填项说明:

  1. 资源名:唯一名称,默认请求路径
  2. 针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认为default
  3. 阈值类型/单机阈值:
    • QPS(每秒钟请求数量): 当调用该API的QPS达到阈值的时候进行限流。
    • 线程数:当调用该API的线程数达到阈值后,进行限流。
  4. 是否集群:需不需要集群
  5. 流控模式:
    • 直接:api达到限流条件时,直接限流。
    • 关联:当关联的资源达到阈值时,就限流自己。
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值就进行限流)。
  6. 流控效果:
    • 快速失败:直接失败,抛异常
    • Warm up:根据 codeFactor(冷加载因子,默认3)的值,从阈值/codefactor,经过预热时间,才达到设置的QPS阈值
    • 排队等候:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效。

进入 sentinel-dashboard -> 添加流控规则:(默认已经启动了被监控服务并已经注册到Nacos)

sentinel流控.png

测试:流控模式:直接。

正常访问:

sentinel.png

当QPS超过阈值后,限制访问:

sentinel.png

关联

女朋友消费,男朋友买单。好比支付服务承受不住了,下单服务就开始限流。

sentinel关联.png

冷启动-warm up

默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值

sentinel-warm up.png

解析:即请求QPS从 10/3 的访问量开始, 经过5秒后阈值恢复到到10。

降级规则

sentinel降级.png
  • 慢调用比例:1秒内持续j进入5个请求且平均响应时间 > 阈值则触发熔断,熔断时长过后关闭降级。
  • 异常比例:QPS > 5且异常比例超过阈值(秒级)
  • 异常数:异常数超过阈值(分钟统计)

热点规则

sentinel热点规则.png

参数索引:


参数索引.png

那这个热点规则可以做点什么呢?首先来看我们的服务接口:

    @GetMapping("/hotkey")
    @SentinelResource(value = "hotkey", blockHandler = "deal_hotkey")
    public String hotKey(@RequestParam(value = "p1", required = false) String p1,@RequestParam(value = "p2", required = false) String p2) {
        return "----hotkey";
    }

    public String deal_hotkey(String p1, String p2, BlockException exception) {
        return "----deal_hotkey";
    }

当我们请求带参数索引为0的参数(即p1)时,超过阈值就会走@SentinelResourse 注解中blockHandler中的方法,返回----deal_hotkey。

你可能感兴趣的:([SpringCloud Alibaba] 浅析Sentinel-dashboard控制台)