zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba Sentinel

    一、介绍(sentinel 1.7.0)

    1,官网地址

      https://github.com/alibaba/Sentinel

      中文地址:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

    2,主要特征

    Sentinel 具有以下特征:

    • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
    • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
    • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

      

    3,安装使用

      下载:https://github.com/alibaba/Sentinel/tags (选择对应的版本下载jar包这里以1.7.0为例)

      启动:java -jar sentinel-dashboard-1.7.0.jar (默认启动8080端口)

      访问:http://localhost:8080

    二、项目示例

    源码:cloudalibaba-sentinel-service8401

    三、流控规则

               

      注:Sentinel的监控页面一开始是没有东西,需要对监控的服务发起请求后才会出现

      • 资源名:唯一名称,默认请求路径

      • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)

      • 阈值类型/单机阈值:

        • QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流;

        • 线程数:当调用该接口的线程数达到阈值时,进行限流

      • 是否集群:不需要集群

      • 流控模式:

        • 直接:接口达到限流条件时,直接限流

        • 关联:当关联的资源达到阈值时,就限流自己

        • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)[api级别的针对来源]

      • 流控效果

      详细使用参考:https://www.cnblogs.com/coder-zyc/p/12926644.html

      注意:针对url制定的流控规则会走系统默认的规则,而针对SentinelResource中的资源value制定的流控规则会走自定义的blockHandler方法。

    四、降级规则

    1,基本介绍

      Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其他的资源而导致级联错误。Sentinel的断路器不存在半开状态,当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出DegradeException)。

            

    2,RT

                  

      平均响应时间(DEGRADE_GRADE_RT):当1s内持续进入5个请求,对应时刻的平均响应时间(秒级)均超过阈值(以ms为单位),那么接下来的时间窗口(DegradeRule中的timeWindow,以s为单位)之,对这个方法的调用都会出现熔断(抛出DegradeException)。注意Sentinel默认统计的RT上限为4900ms超出此阈值的都会算作4900ms,若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=xxx来配置。

    3,异常比例

                   

       异常比例(DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量>=5,并且每秒异常总数占通过量的比值超过阈值(DegradeRule中的count)之后,资源进入降级状态,即在接下来的时间窗口(DegradeRule中的timeWindow,以s为单位)之内,对这个方法的调用都会自动地返回。异常比例的阈值范围是[0.0,1.0],代表0%~100%。

    4,异常数

                  

       异常数(DEGRADE_GRADE_EXCEPTION_COUNT):当资源近1分钟的异常数目超过阈值之后,会进行熔断。注意通过时间窗口是分钟级别的,若timeWindow小于60s,则结束熔断状态后仍可能再进入熔断状态。

    五、热点规则

     何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

    热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

                                  

    1,代码

    @GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
    public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                             @RequestParam(value = "p2",required = false) String p2) {
        //int age = 10/0;
        return "------testHotKey";
    }
    
    //备用方法
    public String deal_testHotKey (String p1, String p2, BlockException exception){
        return "------deal_testHotKey,o(╥﹏╥)o";
    }

    2,参数

                                 

    #只要含有p1参数且阈值达到了之后就会进行限流
    http://localhost:8401/testHotKey?p1=abc&p2=33
    #当不含有p2参数时就不会被限流
    http://localhost:8401/testHotKey?p2=abc

    3,参数例外项

                               

    #当参数为p1=abc时此时的阈值为10
    http://localhost:8401/testHotKey?p1=abc&p2=33
    #当参数为p1不为abc时此时的阈值为1
    http://localhost:8401/testHotKey?p1=xyz&p2=33

    六、系统规则

    文档:https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81

      系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

      系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。

    系统规则支持以下的模式:

    • Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5
    • CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
    • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
    • 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
    • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

    七、feign和ribbon应用

      启动nacos

      sentinel服务端:cloudalibaba-sentinel-dashboard8081

      服务提供者:cloudalibaba-provider-payment9004cloudalibaba-provider-payment9005

      服务消费者:cloudalibaba-consumer-nacos-order84

    八、规则持久化

      启动nacos

      sentinel服务端:cloudalibaba-sentinel-dashboard8081

      服务消费客户端:cloudalibaba-sentinel-dashboard-client8402

  • 相关阅读:
    E小press框架之第三步(参数接收)
    Express框架之第二步(路由)
    Express框架之第一步(创建工程)
    【排序】基数排序
    【数学】平方和公式$$sum_{i=1}^{n}i^2=frac{n(n+1)(2n+1)}{6}$$
    【博弈论】Nim游戏
    【搜索】对抗搜索【CF】J. Situation
    【图论】Kruskal算法
    dijkstra算法+堆优化 + 链式前向星版本
    【DP】【数位DP】
  • 原文地址:https://www.cnblogs.com/bbgs-xc/p/13844976.html
Copyright © 2011-2022 走看看