滑动窗口限流 java_服务限流措施

关注公众号: 戏说码农职场, 带给你更多精彩

  • 固定时间窗口
  • 滑动时间窗口
  • 漏桶
  • 令牌桶
  • ......
  1. 固定时间窗口

定义: 基于固定时间窗口的限流算法是非常简单的。首先需要选定一个时间起点,之后每次接口请求到来都累加计数器,如果在当前时间窗口内,根据限流规则(比如每秒钟最大允许 100 次接口请求),累加访问次数超过限流值,则限流熔断拒绝接口请求。当进入下一个时间窗口之后,计数器清零重新计数

问题: 无法应对两个时间窗口临界时间内的突发流量

32d88af06a6970bb3acb3af0841c8741.png

2. 滑动时间窗口

定义: 滑动时间窗口算法是对固定时间窗口算法的一种改进,流量经过滑动时间窗口算法整形之后,可以保证任意时间窗口内,都不会超过最大允许的限流值,从流量曲线上来看会更加平滑,可以部分解决上面提到的临界突发流量问题

问题: 即便滑动时间窗口限流算法可以保证任意时间窗口内接口请求次数都不会超过最大限流值,但是仍然不能防止在细时间粒度上面访问过于集中的问题,比如上面举的例子,第一个 1s 的时间窗口内 100 次请求都集中在最后 10ms 中。也就是说,基于时间窗口的限流算法,不管是固定时间窗口还是滑动时间窗口,只能在选定的时间粒度上限流,对选定时间粒度内的更加细粒度的访问频率不做限制.

efb5d8742e864d2235668c2f5d54203d.png

上面我们讲了两种基于时间窗口的限流算法:固定时间窗口和滑动时间窗口算法,两种限流算法都无法应对细时间粒度的突发流量,对流量的整形效果在细时间粒度上不够平滑。本节介绍两种更加平滑的限流算法:令牌桶算法和漏桶算法.

3. 漏桶算法

定义:漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。 在网络中,漏桶算法可以控制端口的流量输出速率,平滑网络上的突发流量,实现流量整形,从而为网络提供一个稳定的流量

特点: 方便控制端口的输出

问题: 无法应对突发流量

伪代码:

063d0ec5dedf6d40d0eb0b325b440d40.png

4. 令牌桶

定义: 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。从原理上看,令牌桶算法和漏桶算法是相反的,一个“进水”,一个是“漏水”。

特点: 固定放入, 支持突发流量, 常用工具是Guava 的RateLimiter.

1ce991684bd8feefe1457fb2db8967e8.png

令牌桶和漏桶的区分和比较:

57cca56ced46cef982eeff825b50cd83.png

参考:

Java技术栈:接口限流算法:漏桶算法&令牌桶算法

微服务接口限流的设计、思考_一个人的Code博客-CSDN博客

https://www.bilibili.com/video/BV18s411p7kj?from=search&seid=13662725441611117033

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值