Spring Cloud Alibab Sentinel入门

Sentinel与Hystrix对比

(Hystrix控制台需要自建且功能少,好像支持通过线程数+队列大小进行限流) 

使用Sentinel

1.下载sentinel-dashboard.jar并启动

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

2.改pom

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>jsr305</artifactId>
                    <groupId>com.google.code.findbugs</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

3.改yaml

spring:
  application:
    name: auth-server
  cloud:
    nacos:
      server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
        clientIp: localhost

management:
  endpoints:
    web:
      exposure:
        include: '*'

4.启动访问任意接口(Sentinel有懒加载)

访问http://localhost:8080,为接口资源添加流控规则

效果:

功能介绍

1.流控规则

QPS直接失败:当每秒请求数达到阈值时直接失败

线程数直接失败:当请求线程数达到阈值时直接失败

关联模式:当关联资源达到阈值时限流自己

链路模式:只统计指定入口资源的流量数来限流

Warm Up:让资源从初始阈值(阈值 / 加载因子默认3)经过预热时长秒数后达到最终阈值来限流

排队等待:请求到达阈值时进行排队等待,毫秒时间后超时

2.降级规则(服务熔断)

(服务降级有两种方式,一是服务鉴定为不可用时直接禁止访问从而释放资源(即服务熔断(服务端)),二是服务发生某种错误时,主动调用降级逻辑进行处理从而保证服务可用(客户端))

RT:当资源平均响应时间超过毫秒时间 且 在时间窗口内通过的请求数>=5,触发熔断,窗口期过后恢复(RT毫秒时间默认最大4900)

异常比例:当QPS>=5 且 秒级统计的异常比例超过阈值时,触发熔断 ,窗口期过后恢复

异常数:分钟级统计的异常数超过阈值时,触发熔断,窗口期过后恢复

3.热点规则与自定义限流处理方法

热点规则需要结合@SentinelResource使用:当资源testApi请求携带了0下标位参数,窗口时间内QPS数达到阈值,触发限流方法(注意为public)

参数额外项:当0下标位参数值为5时,限流阈值为50

4.@SentinelResource配置与降级方法

(1)通过blockHandlerClass就可以将限流处理方法与业务类解耦

(2)上面说到,限流熔断只是降级的其中一种,而业务代码的异常也需要做降级处理,通过fallback(和fallbackClass):

 (注意!即使blockHandler和fallback同时配置,它们都是各司其职负责各自的异常。还有一个

exceptionsToIgnore配置可以忽略指定的异常类型来抛出异常)

(3)作为微服务中的一员,功能的提供通常都是由多个成员一起完成的,因此常见的接口请求异常也是需要做降级处理的 :

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

(通过fallback配置和实现类匹配降级方法) 

5.限流规则的持久化

        每当服务重启,控制台里的限流规则就会消失因为默认配置规则是存储在内存中的,因此需要配置在其他地方如Nacos。

改pom

<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

加yml

spring:
  application:
    name: auth-server
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
        clientIp: localhost
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name} #对应Nacos的配置
            groupId: DEFAULT_GROUP #对应Nacos的配置
            data-type: json
            rule-type: flow    #流控规则类型

Nacos新增配置

resource:资源名称
limitApp:来源应用
grade:阈值类型,0线程数,1QPS
count:单机阈值
strategy:流控模式,0直接,1关联,2链路
controlBehavior:流控效果,0快速失败,1Warm Up,2排队等待
clusterMode:是否集群;

注意事项

(1)resource的值要与@SentinelResource注解的value值一致,否则会导致blockHandler失效
(2)使用blockHandlerClass的话blockHandler方法要为static,否则会失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值