【SpringCloudAlibaba系列】分布式限流框架Sentinel限流类型| 8月更文挑战

250 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看: 8月更文挑战

Sentinel限流类型

Sentinel流量控制统计有两种类型,通过感染的属性来控制:

  • 并发线程数(FLOW_GRADE_THREAD)
  • QPS(FLOW_GRADE_QPS)

并发线程数

并发线程数限流用来保护业务线程不被耗尽。比如:服务A调用服务B,而B服务因为某个原因导致服务不稳定或者响应延迟,对于服务A,它的吞吐量会下降,占用更多的线程,极端情况下会造成线程池的耗尽。

针对这种情况,通过不同的业务逻辑应用不同的线程池来隔离业务自身的资源争抢的问题,但是这个解决方案同样会造成线程数量过多带来的上下文切换问题。

Sentinel并发线程数限流是统计请求的上下文线程数,如果超出阈值,新请求会被拒绝

QPS表示每秒的请求数,一台服务器每秒能够响应的查询次数,当QPS超过阈值时,会触发限流策略

QPS流量控制行为有以下几种
  • 直接拒绝:是默认流量控制的方式,请求流量超过阈值,直接抛出一FlowException

  • warn up(预热、冷启动):流量突然增加,系统从空闲状态转为繁忙状态,有可能把系统搞宕机,预期请求处理的数量逐步递增,并在一个预时间内达到允许处理请求的最大值时,Warn Up可达到这个目的

    系统所能够处理的最大并发数是240,系统处于空闲状态,接着请求量突然直线升高,而不是直接将QPS拉到最大值,而在一定时间内逐步增加阈值,而中间有一个系统逐步预热的过程。

  • 匀速排队

    匀速排队的方式会严格控制请求通过的间隔时间,让请求以均匀的速度通过,相当于之前的漏桶限流算法

    当QPS=1时,意味着每隔500ms才允许通过下一个请求,好处是以处理间隔性突发流量

  • 冷启动+匀速排队