限流算法相关

1、计数器算法

在一定时间内,对处理的请求数进行计数,每次到达时间临界点则计数器清零。在一定时间间隔内,若计数器数字超限,则进行限流

缺点:该算法的问题是,在两端临界点附加可能出现两倍的流速。

2、滑动窗口算法

基于计数器算法,把时间间隔分片。例如服务限流每秒处理10000个请求,把1秒分为10个窗口。每100毫秒移动一次,内存中保留每次的请求次数。每次移动判断一下总次数是否超出10000限制。

当滑动窗口的格子划分的越多,滑动窗口的滚动就越平滑,限流的统计就会越精确。

滑动窗口算法可以有效规避计数器算法中时间临界点问题。但实现起来相对比较复杂。

netflix的Hystrix和阿里的sentinel的限流都是基于滑动窗口算法实现。

3、令牌桶算法

系统已一个恒定的速率往桶放入令牌。若有请求需要处理,则从令牌桶里获取令牌,当桶里没有令牌,则拒绝服务

令牌桶算法并不能实际的控制速率。比如,10秒往桶里放入10000个令牌桶,即10秒内只能处理10000个请求,那么qps就是1000。但这种模型可以出现1秒内把10000个令牌全部消费完,即qps为10000。所以令牌桶算法实际是限制的平均流速。具体控制的粒度以放令牌的间隔和每次的量来决定。若想要把流速控制的更加稳定,就要缩短间隔时间。

Google Guava中的RateLimter就是利用的令牌桶原理。

漏桶算法

水滴先进入漏桶,漏桶以一定速度向外出水。当水流入速度过大,桶会直接溢出。

即Request进入一个固定容量的Queue,若Queue满,则拒绝新的Request,可以阻塞,也可以抛异常。

这种模型其实非常类似MQ的思想,利用漏桶削峰填谷,使得Queue的下游具有一个稳定流量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值