SpringCloudAlibaba-Sentinel流量控制

发布于:2022-11-06 ⋅ 阅读:(399) ⋅ 点赞:(0)

概念

流量控制是指通过限制单位时间内的网络请求的数量,来维持服务正常运作。Sentinel的流量控制分两类,一类是基于QPS/并发数的流量控制,另一类是基于调用关系的流量控制。

搭建项目

搭建spring cloud项目,实现sentinel流量监控

启动Nacos注册中心,Sentinel控制台,项目

基于QPS/并发数的流量控制

流量控制主要有两种统计类型,一种是统计QPS,另外一种则是统计线程数。QPS意思是每秒发送的请求数量。

QPS流量控制

当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制的手段包括下面 3 种:

直接拒绝RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式。

该方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException

这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。

冷启动(预热)(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式。该方式主要用于系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。

 

通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮的情况。

匀速器(排队等待)RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式。这种方式严格控制了请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。当请求到来的时候,如果当前请求距离上个通过的请求通过的时间间隔不小于预设值,则让当前请求通过。否则,计算当前请求的预期通过时间,如果该请求的预期通过时间小于规则预设的 超时时间,则该请求会等待直到预设时间到来通过(排队等待处理);若预期的通过时间超出最大排队时长,则直接拒接这个请求。

并发线程数流量控制

Sentinel简单统计当前请求上下文的线程个数,如果超出阈值,新的请求会被立即拒绝。线程数限流用于保护业务线程数不被耗尽。例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加,对于调用者来说,意味着吞吐量下降和更多的线程数占用,极端情况下甚至导致线程池耗尽。为应对高线程占用的情况,可以使用隔离的方案,这种隔离方案虽然能够控制线程数量,但无法控制请求排队时间。当请求过多时排队也是无益的,直接拒绝能够迅速降低系统压力。

基于调用关系的流量控制

关联流量控制

当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。设置有逻辑关系的两个模块,当其中一个达到阈值之后,限流另一个。


网站公告

今日签到

点亮在社区的每一天
去签到