美文网首页
[SpringCloud Alibaba] 浅析Sentinel

[SpringCloud Alibaba] 浅析Sentinel

作者: Colors_boy | 来源:发表于2021-01-13 17:10 被阅读0次

    Sentinel

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

    搭建

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

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

    搭建被监控服务

    pom

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            </dependency>
            ···部分省略依赖
    

    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

          本文链接:https://www.haomeiwen.com/subject/jfqpaktx.html