微服务SpringCloudAlibaba组件sentinel教程【详解sentinel的使用以及流量控制、熔断降级、热点参数限流等,附有示例+代码】

文章目录

  • 四.Sentinel限流熔断
    • 4.1 sentinel介绍
    • 4.2 Sentinel 的历史
    • 4.3 Sentinel 基本概念
      • 资源
      • 规则
    • 4.4 Sentinel 功能和设计理念
      • 4.4.1 流量控制
      • 4.4.2熔断降级
        • 什么是熔断降级
        • 熔断降级设计理念
        • 系统负载保护
    • 4.5 Sentinel 是如何工作的
    • 4.6 Sentinel使用
    • 4.7 Sentinel 控制台
    • 4.8 SpringBoot 整合 sentinel-dashboard
      • 基础搭建
      • 流量控制
      • 流控模式与流控效果
      • 熔断降级
        • 响应时间比例
        • 异常比例
        • 其他解释
      • 热点参数限流
        • @SentinelResource注解
        • fallback属性
        • blockHandler属性
    • 4.9 基于nacos配置中心进行规则持久化
      • 基本使用配置
      • 流量控制参数:
      • 熔断降级配置:
      • 热点参数配置:
      • 另:

四.Sentinel限流熔断

官网:https://sentinelguard.io/zh-cn/docs/introduction.html

github文档:https://github.com/alibaba/Sentinel/wiki

学习参考地址:
https://www.cnblogs.com/21CHS/p/18528825
https://developer.aliyun.com/article/1392703

4.1 sentinel介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素。在并发流量比较高的情况下,由于网络调用之间存在一定的超时时间,链路中的某个服务出现宕机都会大大增加整个调用链路的响应时间,而瞬间的流量洪峰则会导致这条链路上所有服务的可用线程资源被打满,从而造成整体服务的不可用,这也就是我们常说的 “雪崩效应”。而在微服务系统设计的过程中,为了应对这样的糟糕情况,最常用的手段就是进行 ”流量控制“ 以及对网络服务的调用实现“熔断降级”。因此,Sentinel 就因运而生了。

Sentinel 是一款面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来保障服务的稳定性,核心思想是:根据对应资源配置的规则来为资源执行相应的流控/降级/系统保护策略

4.2 Sentinel 的历史

  • 2012 年,Sentinel 诞生,主要功能为入口流量控制。
  • 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。
  • 2018 年,Sentinel 开源,并持续演进。
  • 2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。
  • 2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。
  • 2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。
  • 2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 OpenSergo 标准中,Sentinel 作为流量治理标准实现。

4.3 Sentinel 基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

4.4 Sentinel 功能和设计理念

4.4.1 流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状。

其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

在这里插入图片描述

流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

4.4.2熔断降级

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。

在这里插入图片描述

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段:

  1. 通过并发线程数进行限制:

和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

  1. 通过响应时间对资源进行降级:

除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

系统负载保护

Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

4.5 Sentinel 是如何工作的

Sentinel 的主要工作机制如下:

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

4.6 Sentinel使用

Sentinel 的使用可以分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。

4.7 Sentinel 控制台

下载jar sentinel-dashboard-1.8.0.jar

使用以下命令直接运行 jar 包(JDK 版本必须≥ 1.8):

cmd运行java -jar -Dserver.port=9999 sentinel-dashboard-1.8.0.jar

java -jar -Dserver.port=9999 sentinel-dashboard-1.8.0.jar

控制台访问地址:http://localhost:9999,默认账号密码都为 sentinel/sentinel

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.8 SpringBoot 整合 sentinel-dashboard

基础搭建

【1.引入依赖】

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

2.在bill-provider-consumer-7790项目的application.yml编写代码

在这里插入图片描述

server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullusername: rootpassword: sa123456application:name: bill-consumercloud:sentinel: # sentinel看板的地址transport:dashboard: 127.0.0.1:9999 #sentinel控制台地址  连接dashboardport: 8719 #TCP协议 与dashboard通信的端口enable: true #开启sentinel 默认trueearly: true #取消控制台懒加载 立即初始化dashboard与sentinelnacos:discovery:server-addr: 127.0.0.1:8848feign: #开启熔断处理circuitbreaker:enabled: true

(增加个方法,为了方便测试)

在这里插入图片描述

启动bill-consumer-7790

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

流量控制

一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource :资源名,即限流规则的作用对象 (访问路径,即controller中的访问路径)
  • count : 限流阈值(最大接受数,超过阈值拒绝访问)
  • grade : 限流阈值类型(QPS 或并发线程数)
  • limitApp : 流控针对的调用来源,若为 default 则不区分调用来源(哪个服务调用资源名时进行限流,default不区分。)
  • strategy : 调用关系限流策略
  • controlBehavior : 流量控制效果(直接拒绝、Warm Up、匀速排队)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

当每秒钟请求两次及以上会失败,如图:

在这里插入图片描述

注意:除了设置QPS外,也可以设置线程数。(可让业务代码进行休眠,或使用压力测试工具就
jmeter)

当设置线程数为1时,jmeter测试,5个线程同一时刻发送。

在这里插入图片描述

流控模式与流控效果

在这里插入图片描述

关联:(反向关联)】

在这里插入图片描述

当/bill/getId的阈值超过到1时,/bill/show不可用,也就是给限流。(把/bill/show的资源节省出来给/bill/getId)

快速失败:抛异常

  • 方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出 FlowException 。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时

WarmUp:慢慢增加到阈值

  • 即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮

排队等待:匀速排队处理

  • 这种方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法 。这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。注意:匀速排队模式暂时不支持 QPS > 1000 的场景。

    在这里插入图片描述

熔断降级

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。

熔断分为两种情况:

  1. 当目标接口的响应时间较差(慢调用的比例、数量超过阈值),
  2. 基于异常比例、异常数量
响应时间比例

在这里插入图片描述

在这里插入图片描述

当对指定的资源接口进行访问时,1秒(统计时长)内至少5个请求(最小请求数)。其中80%(比例阈值)的请求对应响应时间超过800ms(最大RT,response time),此时就开始熔断,熔断的时间1Os(熔断时长)。在被熔断的期间,是不允许访问目标接口,此时可以指定降级方案(兜底方法,返回固定的结果)

当熔断时长到达后(时间到了),放行一个请求去访问目标接口,如果此时RT(响应)时间依然超过800s(最大RT),此时就继续熔断(10s);如果放行的一个请求,响应时间没有超过800s(最大RT),则熔断结束;接下来开始进行下一轮的统计。

注意:熔断规则和流量控制的链路模式不能一起使用

异常比例

在这里插入图片描述

1s之内,至少5个请求,其中80%的请求抛出异常,此时熔断就开启。熔断时长10s到达之后,此时熔断器变成”半开启"状态。放行一个请求,如果这个请求依然抛出异常,此时就继续熔断。否则熔断关闭。

其他解释

在这里插入图片描述

  • 慢调用比例 ( SLOW_REQUEST_RATIO ):选择以慢调用比例作为阈值,需要设置允许的慢调用RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长( statIntervalMs )内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用RT 则会再次被熔断。

  • 异常比例 ( ERROR_RATIO ):当单位统计时长( statIntervalMs )内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0] ,代表 0% - 100%。

  • 异常数 ( ERROR_COUNT ):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

  • 最大RT:默认毫秒,请求超出时长

  • 熔断时长:降级多久后再次打开

  • 比例阈值: 当每秒请求量>=N(可配置),并且每秒异常总数占通过量的比值超过阈值之后,进入降级状态。取值范围[0.0,1.0] 代表0%-100%(如:设置为0.2,如果请求异常数超过20%则进入降级)

  • 最小请求数:请求数小于该值时即使异常比率超出阈值也不会熔断

热点参数限流

热点参数限流是分别统计参数值不相同的请求,判断是否超过QPS阈值,同一个资源接口,针对不同的参数指,执行不同的QPS阈值。

【例1】:userid=1为普通VIP用户,此时对该资源接口的调用每秒最多只允许调用5次。userid=3为超级VIP用户,每秒对该资源接口的访问可以访问8次。其他的普通用户,每秒只允许访问2次。

在这里插入图片描述

【例2:】访问资源参数索引(取第1个参数)为0,类型为int,值为1,达到阈值10时进行限流。

需要在bill-consumer-7790中设置@SentinelResource注解

在这里插入图片描述

在这里插入图片描述

  • 单击阈值:单机阈值是指在单个机器上针对某个热点参数设置的阈值,用于控制该参数的访问量。当热点参数的访问量达到或超过设定的阈值时,流控机制将生效,拦截对该资源的访问。单机阈值在 Sentinel 中是用于指定在单个机器上某个热点参数的阈值,即当该参数的访问量达到或超过阈值时触发流控。
  • 统计窗口时长:是 Sentinel 中热点规则的一个重要参数,它用于指定在多长时间内统计热点参数的访问量。窗口时长的选择直接影响热点规则的灵敏度和对流量变化的响应速度。
@SentinelResource注解

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource注解包含以下属性:

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

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

  • blockHandler / blockHandlerClass:blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockExceptionblockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的

    类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

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

    fallback 函数签名和位置要求:

    返回值类型必须与原函数返回值类型一致;

    方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。

    fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定

    fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

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

    返回值类型必须与原函数返回值类型一致;

    方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。

    defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定

    fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

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

fallback属性
 blockHandler 使用sentinel进行不同规则控制时的默认处理方案fallback:自定义业务出错时默认处理方案defaultFallback 指定一个业务错误时默认方案

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

blockHandler属性
 /*** blockHandler 使用sentinel进行不同规则控制时的默认处理方案*  fallback:自定义业务出错时默认处理方案* defaultFallback 指定一个业务错误时默认方案**/@GetMapping("/find")@SentinelResource(value = "find",blockHandler = "blockHandler")//,fallback = "findFallBack"public ResultAJAX find(Integer id){System.out.println("id==="+id);// ParamFlowException  热点参数异常// DegradeException  熔断降级异常// FlowException  流控异常return ResultAJAX.success();}public ResultAJAX blockHandler(Integer id, BlockException e){//异常类型判断if(e instanceof FlowException){return ResultAJAX.error("流量异常处理..."+id);}if(e instanceof ParamFlowException){return ResultAJAX.error("热点参数异常处理..."+id);}if(e instanceof DegradeException){return ResultAJAX.error("熔断降级异常处理..."+id);}return ResultAJAX.error("系统未知异常处理..."+id);}// public ResultAJAX findFallBack(Integer id){//     return ResultAJAX.error("findFallBack=="+id);// }

在这里插入图片描述

热点规则:

在这里插入图片描述

在这里插入图片描述

降级规则:

在这里插入图片描述

在这里插入图片描述

4.9 基于nacos配置中心进行规则持久化

基本使用配置

【引入依赖】

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

【在配置中心创建文件:】

[{
"resource": "find",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false}
]

在这里插入图片描述

resource:资源名称

limitApp:来源应用

grade:阈值类型,0表示线程数,1表示QPS

count:单机阈值

strategy:流控模式,0表示直接,1表示关联,2表示链路

controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待

clusterMode:是否集群

在这里插入图片描述

【yml配置:】

在这里插入图片描述

server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullusername: rootpassword: sa123456application:name: bill-consumercloud:sentinel: # sentinel看板的地址transport:dashboard: 127.0.0.1:9999 #sentinel控制台地址  连接dashboardport: 8719 #TCP协议 与dashboard通信的端口enable: true #开启sentinel 默认trueearly: true #取消控制台懒加载 立即初始化dashboard与sentineldatasource:ds1:nacos:server-addr: 127.0.0.1:8848 #nacos地址data-id: ${spring.application.name}-flow #naocs中配置文件名称,对应服务名,可随意填写(和配置中文文件一致即可)group-id: DEFAULT_GROUP #nacos中配置文件分组,data-type: json #使用json格式rule-type: flow #使用flow限流nacos:discovery:server-addr: 127.0.0.1:8848feign: #开启熔断处理circuitbreaker:enabled: true

再次启动bill-consumer,进入sentinel中的流控规则,这里会根据nacos中的配置文件自动配置好,nacos中文件更新,sentiel这里也会更新。

在这里插入图片描述

流量控制参数:

Field说明默认值
resource资源名,资源名是限流规则的作用对象
count限流阈值
grade限流阈值类型,QPS 或线程数模式QPS 模式
limitApp流控针对的调用来源default,代表不区分调用来源
strategy调用关系限流策略:直接、链路、关联根据资源本身(直接)
controlBehavior流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流直接拒绝

同一个资源可以同时有多个限流规则。

熔断降级配置:

0慢调用比例 1异常比例 2异常数

熔断降级规则(DegradeRule)包含下面几个重要的属性:

Field说明默认值
resource资源名,即规则的作用对象
grade熔断策略,支持慢调用比例/异常比例/异常数策略慢调用比例
count慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值
timeWindow熔断时长,单位为 s
minRequestAmount熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入)5
statIntervalMs统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入)1000 ms
slowRatioThreshold慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)

热点参数配置:

热点参数规则(ParamFlowRule)类似于流量控制规则(FlowRule):

属性说明默认值
resource资源名,必填
count限流阈值,必填
grade限流模式QPS 模式
durationInSec统计窗口时间长度(单位为秒),1.6.0 版本开始支持1s
controlBehavior流控效果(支持快速失败和匀速排队模式),1.6.0 版本开始支持快速失败
maxQueueingTimeMs最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持0ms
paramIdx热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置
paramFlowItemList参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。仅支持基本类型和字符串类型
clusterMode是否是集群参数流控规则false
clusterConfig集群流控相关配置

另:

nacos可以创建多个配置文件,flow流控, degrade 降级,param-flow热点

在这里插入图片描述

【yml配置】

在这里插入图片描述

server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullusername: rootpassword: sa123456application:name: bill-consumercloud:sentinel: # sentinel看板的地址transport:dashboard: 127.0.0.1:9999 #sentinel控制台地址  连接dashboardport: 8719 #TCP协议 与dashboard通信的端口enable: true #开启sentinel 默认trueearly: true #取消控制台懒加载 立即初始化dashboard与sentineldatasource:ds1:nacos:server-addr: 127.0.0.1:8848 #nacos地址data-id: ${spring.application.name}-flow #naocs中配置文件名称,对应服务名,可随意填写(和配置中文文件一致即可)group-id: DEFAULT_GROUP #nacos中配置文件分组,data-type: json #使用json格式rule-type: flow #使用flow限流ds2:nacos:server-addr: 127.0.0.1:8848 #nacos地址data-id: ${spring.application.name}-degrade #naocs中配置文件名称,对应服务名,可随意填写(和配置中文文件一致即可)group-id: DEFAULT_GROUP #nacos中配置文件分组,data-type: json #使用json格式rule-type: degrade #熔断降级规则nacos:discovery:server-addr: 127.0.0.1:8848feign: #开启熔断处理circuitbreaker:enabled: true

【bill-consumer-flow配置】

在这里插入图片描述

[{
"resource": "find",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false}
]

【bill-consumer-degrade配置】

在这里插入图片描述

[
{
"resource": "find",
"grade": 0,
"count": 2,
"timeWindow": 1,
"minRequestAmount": 1,
"statIntervalMs": 5
}
]

上述 JSON 示例中的各项含义如下:

  • resource :资源名称,对应到你在代码中要进行热点参数限流保护的业务逻辑方法或接口等的标识,可以自定义,但要和代码中的设置一致。
  • paramIdx :热点参数的索引位置,从 0 开始计数,表示要基于哪个参数进行热点参数限流判断。比如你的业务方法有多个参数,这里指定要关注哪个参数的热点情况。
  • count :限流阈值,即单位时间内允许通过的请求次数。
  • burst :突发量,允许在短时间内超过限流阈值的额外请求数量。
  • duration :统计的时间窗口单位,这里设置为 1 表示以秒为单位(也可以根据需要设置为其他时间单位,如分钟等,对应的参数值不同)。
  • controlBehavior :流控效果,0 表示快速失败(达到限流阈值直接拒绝后续请求),还有其他可选值对应不同的流控策略(比如匀速排队等)。
  • maxQueueingTimeMs :最大排队等待时间(毫秒),当使用匀速排队等流控策略时生效,指定请求在排队等待通过限流时的最大等待时长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21968.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webmin配置终端显示样式,模仿UbuntuDesktop终端

webmin配置终端显示样式&#xff0c;模仿UbuntuDesktop终端 在webmin中&#xff0c;默认情况下是没有图形化桌面的&#xff0c;因此终端界面也不会像 Ubuntu Desktop 那样有预设的紫色背景和颜色主题。不过&#xff0c;你可以通过修改 ~/.bashrc 文件&#xff0c;并结合安装和…

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…

AWS-SAA中文版题库

一家公司收集多大洲城市的温度、湿度和大气压数据。该公司每天从每个站点收集的平均数据量为500GB。每个站点都有高速互联网连接。该公司希望尽快将所有这些全球站点的数据聚合到一个AmazonS3存储桶中。解决方案必须将操作复杂性降至最低。哪种解决方案满足这些要求&#xff1f…

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/&#xff0c;登录个人账号&#xff0c;右上角加号…

微相E316实现FM电台监听

前面介绍了基于Matlab、矢量信号器或微相E316、HackRF One实现AM和FM调制解调&#xff0c;今天分享的内容是用微相E316、上位机和Matlab实现FM电台信号监听。注意本文仅用于科研和学习&#xff0c;私自搭建电台属于违法行为。 1.概述 微相E316、上位机和Matlab实现FM电台信号…

【总结】GraphRAG与传统RAG的深度对比及主流项目分析

GraphRAG和传统RAG的区别 GraphRAG和传统RAG都是为了增强大语言模型&#xff08;LLMs&#xff09;在特定领域的能力而发展出的技术&#xff0c;但它们在多个方面存在明显区别。 1. 知识组织方式 传统RAG&#xff1a;通常将大规模文本语料库分割成文本块&#xff0c;再利用嵌入…

SessionBox同一浏览器登录多账号独立IP教程

对于多账号运营的跨境营销人员来说&#xff0c;SessionBox提供了同一浏览器登录多账号的解决方案&#xff0c;但是很多人不仅需要多账号登录&#xff0c;对于登录Facebook、Instagram等账号来说&#xff0c;如何SessionBox与代理配合使用以确保真正的帐户分离更为重要&#xff…

图论 之 迪斯科特拉算法求解最短路径

文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题&#xff0c;分为使用BFS和使用迪斯科特拉算法&#xff0c;这两种算法求解的范围是有区别的 BFS适合求解&#xff0c;边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…

Docker+Dify部署DeepSeek-r1本地知识库

安装配置Docker Desktop 软件下载 Docker Desktop版本:4.38.0.181591 Docker Desktop下载地址:Docker: Accelerated Container Application Development 或者从这里下载:DockerDesktop-4.38.0.181591资源-CSDN文库 点击图下所示位置,下载windows-AMD64版本软件 启用Hy…

ubuntu ffmpeg 安装踩坑

ffmpeg 安装踩坑 安装命令: sudo apt update sudo apt install ffmpeg如果以上命令没有报错&#xff0c;那么恭喜你很幸运&#xff0c;可以关闭这篇文章了&#xff01; 如果跟我一样&#xff0c;遇到如下报错&#xff0c;可以接着往下看&#xff1a; 报错信息&#xff1a; …

如何通过Windows环境远程控制MusicGPT在线生成高质量AI音乐

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 在这个快节奏的时代&#xff0c;音乐不仅是心灵的慰藉&#xff0c;更是创意的源泉。试想一下&#xff0c;在忙碌的工作间隙或悠闲的周末午后&#xff0c;只需轻敲几行…

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)

Paimon的下载及安装&#xff0c;并且了解了主键表的引擎以及changelog-producer的含义参考&#xff1a; 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join&#xff0c;集成mysql cdc等参考&#xff1a; 大数据组件(四)快速入门实时数据…

Spring面试题2

1、compareable和compactor区别 定义与包位置:Comparable是一个接口&#xff0c;位于java.lang包,需要类去实现接口&#xff1b;而Compactor是一个外部比较器&#xff0c;位于java.util包 用法&#xff1a;Comparable只需要实现int compareTo(T o) 方法&#xff0c;比较当前对…

react(9)-redux

使用CRA快速创建react项目 npx create-react-app react-redux 安装配套工具 npm i reduxjs/toolkit react-redux 启动项目 在创建项目时候会出现一个问题 You are running create-react-app 5.0.0, which is behind the latest release (5.0.1). We no longer support…

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)

目录 一、B2121 最长最短单词 - 洛谷 算法代码&#xff1a; 代码分析 变量定义 输入处理 单词长度计算 更新最长和最短单词的长度 输出最长单词 输出最短单词 评测记录&#xff1a;​编辑 二、B2122 单词翻转 - 洛谷 算法代码&#xff1a; 代码分析 引入头文件和定…

74. 搜索二维矩阵(LeetCode 热题 100)

题目来源; 74. 搜索二维矩阵 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &am…

JUC并发—9.并发安全集合四

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 4.JUC的各种阻塞队列介绍 (1)基于数组的阻塞…

SQL Server导出和导入可选的数据库表和数据,以sql脚本形式

一、导出 1. 打开SQL Server Management Studio&#xff0c;在需要导出表的数据库上单击右键 → 任务 → 生成脚本 2. 在生成脚本的窗口中单击进入下一步 3. 如果只需要导出部分表&#xff0c;则选择第二项**“选择具体的数据库对象(Select specific database objects)”**&am…

DDoCT:形态保持的双域联合优化用于快速稀疏视角低剂量CT成像|文献速递-医学影像人工智能进展

Title 题目 DDoCT: Morphology preserved dual-domain joint optimization for fast sparse-view low-dose CT imaging DDoCT&#xff1a;形态保持的双域联合优化用于快速稀疏视角低剂量CT成像 01 文献速递介绍 计算机断层扫描&#xff08;CT&#xff09;是当今广泛应用的…