桥泰

导航

 

并发就是QPS,每秒处理请求量
1、固定窗口计数器算法
将时间划分为多个窗口,窗口时间跨度为Interval,本例中1000ms
统计每秒能处理的请求量,看我能处理多少量,再确定是否限流

 

 2、滑动窗口计数器算法

 


问题1:
1250--->2100,间隔850,放置了3个请求

切割的更细
500ms变成250ms,划分窗口更细了,限流效果越准确
因为存在临近范围内,请求的数量可能超过阈值

一般每个请求耗时在100~200ms,时间窗口设置为100~200ms也就差不多了

 

 

 

 

3、令牌桶
每秒生成5个令牌,放到令牌桶,超出就不再生成
1秒来6个请求,那么超过的那个请求,被丢弃。

存在一个问题:
“假设目前令牌桶有5个,每秒生成5个令牌,一次性1秒来了10个请求,前五个取到令牌,1秒内又快速生成了5个令牌,那么实际1秒处理10个请求”

设置阈值的建议:
如果一台机器最多处理请求5个,那么令牌桶的上限不要设置为5,避免服务器被压垮
而是设置阈值5的一半,比如3个

算法原理:
记录上一次请求来的时间,1秒内,判断桶里的令牌还剩多少(够不够)
过了n秒后,n - 1差了多少秒=2,1秒生成5个令牌,也就是说这期间2*5=10个令牌,判断当前请求令牌够不够
上一次请求到现在相差了几秒,你当前需要几个令牌,现在令牌够不够???

 

 

 

4、漏桶算法
类似一个大坝,慢慢放

好处:
应对突发请求
流量平缓(平滑100%)

而令牌桶算法,不是100%平缓

 

 

 

sentinal热点参数限流基于令牌桶
1、如果使用滑动窗口,那么需要记录时间区间,时间分段,每个段需要单独统计,一个窗口往往就是形成一个数组,每个计数器都是一个独立的数组,数组维护多个窗口去计数,比较耗时
2、如果采用令牌桶,只需要记录参数的请求时间和参数的令牌

 

posted on 2025-06-09 17:28  桥泰  阅读(21)  评论(0)    收藏  举报