百度不收录手机网站吗,深圳龙岗建网站公司,o2o营销,开发网站的流程步骤文章目录 四.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 Sp… 文章目录 四.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/13927034.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 对这个问题采取了两种手段:
通过并发线程数进行限制
和资源池隔离的方法不同Sentinel 通过限制资源并发线程的数量来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下例如响应时间变长对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。
通过响应时间对资源进行降级
除了对并发线程数进行控制以外Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后所有对该资源的访问都会被直接拒绝直到过了指定的时间窗口之后才重新恢复。
系统负载保护
Sentinel 同时提供系统维度的自适应保护能力。防止雪崩是系统防护中重要的一环。当系统负载较高的时候如果还持续让请求进入可能会导致系统崩溃无法响应。在集群环境下网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候这个增加的流量就会导致这台机器也崩溃最后导致整个集群不可用。
针对这个情况Sentinel 提供了对应的保护机制让系统的入口流量和系统的负载达到一个平衡保证系统在能力范围之内处理最多的请求。
4.5 Sentinel 是如何工作的
Sentinel 的主要工作机制如下
对主流框架提供适配或者显示的 API来定义需要保护的资源并提供设施对资源进行实时统计和调用链路分析。根据预设的规则结合对资源的实时统计信息对流量进行控制。同时Sentinel 提供开放的接口方便您定义及改变规则。Sentinel 提供实时的监控系统方便您快速了解目前系统的状态。
4.6 Sentinel使用
Sentinel 的使用可以分为两个部分:
核心库Java 客户端不依赖任何框架/库能够运行于 Java 8 及以上的版本的运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台DashboardDashboard 主要负责管理推送规则、监控、管理机器信息等。
4.7 Sentinel 控制台
下载jar sentinel-dashboard-1.8.0.jar
使用以下命令直接运行 jar 包JDK 版本必须≥ 1.8
cmd运行java -jar -Dserver.port9999 sentinel-dashboard-1.8.0.jar
java -jar -Dserver.port9999 sentinel-dashboard-1.8.0.jar
控制台访问地址http://localhost:9999默认账号密码都为 sentinel/sentinel 4.8 SpringBoot 整合 sentinel-dashboard
基础搭建
【1.引入依赖】
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency2.在bill-provider-consumer-7790项目的application.yml编写代码 server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNullusername: 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秒(统计时长)内至少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】userid1为普通VIP用户此时对该资源接口的调用每秒最多只允许调用5次。userid3为超级VIP用户每秒对该资源接口的访问可以访问8次。其他的普通用户每秒只允许访问2次。 【例2】访问资源参数索引取第1个参数为0类型为int值为1达到阈值10时进行限流。
需要在bill-consumer-7790中设置SentinelResource注解 单击阈值单机阈值是指在单个机器上针对某个热点参数设置的阈值用于控制该参数的访问量。当热点参数的访问量达到或超过设定的阈值时流控机制将生效拦截对该资源的访问。单机阈值在 Sentinel 中是用于指定在单个机器上某个热点参数的阈值即当该参数的访问量达到或超过阈值时触发流控。统计窗口时长是 Sentinel 中热点规则的一个重要参数它用于指定在多长时间内统计热点参数的访问量。窗口时长的选择直接影响热点规则的灵敏度和对流量变化的响应速度。
SentinelResource注解
SentinelResource 用于定义资源并提供可选的异常处理和 fallback 配置项。 SentinelResource注解包含以下属性 value资源名称必需项不能为空 entryTypeentry 类型可选项默认为 EntryType.OUT blockHandler / blockHandlerClass:blockHandler 对应处理 BlockException 的函数名称可选项。blockHandler 函数访问范围需要是 public返回类型需要与原方法相匹配参数类型需要和原方法相匹配并且最后加一个额外的参数类型为 BlockExceptionblockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数则可以指定 blockHandlerClass 为对应的 类的 Class 对象注意对应的函数必需为 static 函数否则无法解析。 fallbackfallback 函数名称可选项用于在抛出异常的时候提供 fallback 处理逻辑。fallback函数可以针对所有类型的异常除了 exceptionsToIgnore 里面排除掉的异常类型进行处理。 fallback 函数签名和位置要求 返回值类型必须与原函数返回值类型一致 方法参数列表需要和原函数一致或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。 fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数则可以指定 fallbackClass 为对应的类的 Class 对象注意对应的函数必需为 static 函数否则无法解析。 defaultFallbacksince 1.6.0:默认的 fallback 函数名称可选项通常用于通用的 fallback逻辑即可以用于很多服务或方法。默认 fallback 函数可以针对所以类型的异常除了exceptionsToIgnore 里面排除掉的异常类型进行处理。若同时配置了 fallback 和defaultFallback则只有 fallback 会生效。defaultFallback 函数签名要求 返回值类型必须与原函数返回值类型一致 方法参数列表需要为空或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。 defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数则可以指定 fallbackClass 为对应的类的 Class 对象注意对应的函数必需为 static 函数否则无法解析。 exceptionsToIgnoresince 1.6.0用于指定哪些异常被排除掉不会计入异常统计中也不会进入 fallback 逻辑中而是会原样抛出。
fallback属性 blockHandler 使用sentinel进行不同规则控制时的默认处理方案fallback:自定义业务出错时默认处理方案defaultFallback 指定一个业务错误时默认方案blockHandler属性 /*** blockHandler 使用sentinel进行不同规则控制时的默认处理方案* fallback:自定义业务出错时默认处理方案* defaultFallback 指定一个业务错误时默认方案**/GetMapping(/find)SentinelResource(value find,blockHandler blockHandler)//,fallback findFallBackpublic ResultAJAX find(Integer id){System.out.println(idid);// 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(findFallBackid);// }热点规则 降级规则: 4.9 基于nacos配置中心进行规则持久化
基本使用配置
【引入依赖】
!--sentinel利用nacos做持久化--dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-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 Up2表示排队等待 clusterMode是否集群 【yml配置】 server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNullusername: 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熔断时长单位为 sminRequestAmount熔断触发的最小请求数请求数小于该值时即使异常比率超出阈值也不会熔断1.7.0 引入5statIntervalMs统计时长单位为 ms如 60*1000 代表分钟级1.8.0 引入1000 msslowRatioThreshold慢调用比例阈值仅慢调用比例模式有效1.8.0 引入
热点参数配置
热点参数规则ParamFlowRule类似于流量控制规则FlowRule
属性说明默认值resource资源名必填count限流阈值必填grade限流模式QPS 模式durationInSec统计窗口时间长度单位为秒1.6.0 版本开始支持1scontrolBehavior流控效果支持快速失败和匀速排队模式1.6.0 版本开始支持快速失败maxQueueingTimeMs最大排队等待时长仅在匀速排队模式生效1.6.0 版本开始支持0msparamIdx热点参数的索引必填对应 SphU.entry(xxx, args) 中的参数索引位置paramFlowItemList参数例外项可以针对指定的参数值单独设置限流阈值不受前面 count 阈值的限制。仅支持基本类型和字符串类型clusterMode是否是集群参数流控规则falseclusterConfig集群流控相关配置
另
nacos可以创建多个配置文件flow流控 degrade 降级param-flow热点 【yml配置】 server:port: 7790spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/smbms?useUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNullusername: 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 最大排队等待时间毫秒当使用匀速排队等流控策略时生效指定请求在排队等待通过限流时的最大等待时长。