Spring Cloud Alibaba Sentinel

SpringCloudAlibabaSentinel到底能干嘛

官方解释: 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性

Sentinel = ribbon + openFeign + fallback

Sentinel 具有以下特征:

丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

下载使用
下载jar包 java -jar 启动可访问 http://127.0.0.1:8080/#/dashboard/home

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

启动服务注册到Nacos和Sentinel中

spring:
  application:
    name: name
  cloud:
    #向nacos中心注册服务
    nacos:
      discovery:
        server-addr: localhost:8848
    #向sentinel控制台注册服务
    sentinel:
      transport:
        dashboard: localhost:8080
      #取消控制台懒加载
      eager: true
management:
  endpoints:
    web:
      exposure:
        include: '*'
feign:
  sentinel:
    enabled: true # 激活Sentinel对Feign的支持

server:
  port: 1111

流控规则

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

针对来源:Sentinel可以根据调用者进行限流,填写微服务名,默认default(不区分来源)

阈值类型/单击阈值
        QPS(每秒请求数量):当调用该api的QPS达到阈值时,进行限流
        线程数:当调用该api的线程数达到阈值时,进行限流
        是否集群:勾选则是集群

流控模式
        直接:达到限流条件直接限流
        管理:关联资源达到阈值,限流自己
        链路:指定链路上的流量达到阈值,进行限流

流控效果(仅QPS)
        快速失败:直接失败,抛异常
        Warn Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值
        排队等待:匀速排队,让请求匀速通过

降级规则

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

降级策略
        RT(平均响应时间,秒级):平均响应时间超出阈值(以 ms 为单位),那么在接下的时间窗口(以 s 为单位)之内,对这个方法的调用都会自动地熔断
        异常比例(秒级):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态,即在接下的时间窗口(以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%
        异常数(分钟级):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。,若 时间窗口小于 60s,则结束熔断状态后仍可能再进入熔断状态

热点规则

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

限流模式:QPS模式

参数索引:对应url参数索引位置

单机阈值:当调用该api的QPS达到阈值时,进行限流

统计窗口时长:统计窗口时间长度(单位为秒),1.6.0 版本开始支持

参数例外项(可以针对指定的参数值单独设置限流阈值,不受前面阈值的限制)
        参数类型:仅支持基本类型和字符串类型
        参数值:指定任意满足参数类型的参数值
        限流阈值:针对指定的参数值的QPS达到阈值时,进行限流

系统规则(不建议)

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

持久化规则

重启应用,Sentinel规则会消失,生产环境需要将配置规则进行持久

1.依赖

<!--  持久化进nacos  -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

2.yaml

spring:
  application:
    name: sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: ip:8848
    sentinel:
      transport:
        dashboard: ip:8080
        port: 8719
      datasource:
        ds1:
          nacos:
            server-addr: ip:8848
            dataId: sentinel-service
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow #流控规则

3.nacos配置

"resource":"myResource", #资源名称
"limitApp":"default",    #针对来源
"grade":1,               #阈值类型,0表示线程数,1表示QPS
"count":1,               #单机阈值
"strategy":0,            #流控模式,0表示直接,1表示关联,2表示链路
"controlBehavior":0,     #流控效果,0表示快速失败,1表示Warn Up,2表示排队等待
"clusterMode":false      #是否集群
 

Sentinel vs Hystrix区别

技术选型:Sentinel vs Hystrix-阿里云开发者社区

@SentinelResource

value:资源名称,必需项(不能为空)

entryType:entry 类型,可选项(默认为 EntryType.OUT)

blockHandler / blockHandlerClass:主管配置违规。blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

fallback / fallbackClass:管运行异常。fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。

defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。

exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出

服务熔断

fallback只熔断java代码异常
blockHandler 负责Sentinel配置异常
都配置 则被限流降级而抛出BlockException时只会进入BlockHandler处理逻辑
exceptionsTolgnore  配置的异常 fallback失效

@SentinelResource(value = "testA")//没有配置
@SentinelResource(value = "testA",fallback = "handlerFallback")//fallback只负责业务异常
@SentinelResource(value = "testA",blockHandler = "blockHandler")//blockHandler只负责sentinel控制台配置违规
@SentinelResource(value = "testA",fallback = "handlerFallback",blockHandler = "blockHandler")
@SentinelResource(value = "testA",fallback = "handlerFallback",blockHandler = "blockHandler",exceptionsTolgnore - {异常类型})


OpenFeign 配置打开Sentinel对Feign的支持

feign:
  sentinel:
    enabled: true # 激活Sentinel对Feign的支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值