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

原文地址:https://www.cnblogs.com/bbgs-xc/p/13844976.html