Sentinel服务限流降级熔断——基础概念+实操

——下载安装

——概念

流控
  • 流控:流量控制;单机阈值设为1,表示1秒钟内查询1次就ok,若超过次数1就直接快速失败,报默认错误
  • 线程数:当调用该api的线程数达到阈值时开始限流
  • QPS:每秒请求数
  • 关联:当关联的资源达到阈值时,就限流自己(当与A关联的资源B达到阈值时,就限流A自己)
  • 预热(直接,Warm up)
    • 应用场景:秒杀系统在开启的瞬间,会有很多流量进入,很有可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值
    • 公式:阈值除以coldFactor(冷加载因子,默认为3),经过预热时长后才会达到阈值
  • 排队等待(必须是QPS):请求以匀速通过,阈值必须设为QPS,否则无效
降级

Sentinel断路器没有半开的状态

  • RT(秒级):平均响应时间,超出阈值且在窗口内通过的请求>=5,两个条件同时满足后触发降级
  • 异常比例(秒级):当资源的每秒请求量>=5,并且每秒异常数占通过量的比例超过阈值之后,进入降级状态;异常比例的阈值为【0.0-1.0】
  • 异常数(分钟级):当资源近1分钟的异常数目超过阈值之后会进行熔断;时间窗口一定要大于60秒
热点限流

分为系统默认和自定义,限流出问题后,都是sentinel系统默认的提示:Block by sentinel(flow limiting)

  • @SentinelResource和@HystrixCommand一样,value 为Sentinel配置中的资源名,blockHandler 为自定义处理方法名,超过配置中的QPS,立即执行降级处理,只负责@SentinelResource中的限流规则,不处理代码中的异常报错
    @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")

  • 参数例外项:可在满足热点限流的情况下,添加额外的参数,使其不被限流,能够进行正常访问;只支持8种数据类型和String
  • 流控规则资源名区别:加“/”走系统默认,不加“/”为SentinelResource中的自定义处理方法
  • 关闭微服务,流控规则也消失,说明规则是临时
  • 代码异常处理(fallback)和限流异常处理(blockHandler)同时进行配置,只会优先选择限流异常处理
持久化
  • 思路:将限流配置规则持久化进Nacos保存,只要刷新端口上的某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos里面的配置不删除,针对端口上Sentinel上的流控规则持续有效
		<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        # nacos服务注册地址
        server-addr: localhost:8848
    sentinel:
      transport:
        # 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直到知道找到未占用端口
        port: 8719
        # 配置sentinel dashboard地址
        dashboard: localhost:8080
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: cloudalibaba-sentinel-service
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
  • Nacos业务规则
[
    {
         "resource": "/retaLimit/byUrl",
         "limitApp": "default",`
         "grade":   1,
         "count":   1,
         "strategy": 0,
         "controlBehavior": 0,
         "clusterMode": false    
    }
]
resource:资源名称;
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接, 1表示关联,2表示链路; 
controlBehavior:流控效果,0表示快速失败,1表示Warm Up, 2表示排队等待;
clusterMode:是否集群。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序少年不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值