首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

限流算法之滑动窗口法

限流算法之滑动窗口法(Java实现)

上文简单介绍过限流中的计数器法,详情参考:限流算法之计数器算法(Java实现)

解决上面问题可以用滑动窗口,令牌桶或者漏桶算法,今天先用滑动窗口算法实现。

如果对滑动窗口不熟悉可以先了解下TCP的滑动窗口协议。限流中的滑动窗口可以简单理解为,设定的单位时间就是一个窗口,窗口可以分割多个更小的时间单元,随着时间的推移,窗口会向右移动。比如一个接口一分钟限制调用1000次,1分钟就可以理解为一个窗口,可以把1分钟分割为10个单元格,每个单元格就是6秒。

滑动窗口

光说不练等不白干,下面就用一个简单的链表来简单实现,

1、定义一个Node,Node中需要记录起始时间和调用计数器,并且有个指向下一个Node的变量,把所有的Node组成一个环

2、用lastNode记录上次窗口的移动位置,再次访问时,先确定窗口滑动的位置,让窗口滑动到指定位置

3、获取当前窗口的计数器的总数,如果不大于限制,当前的Node的计数器加一

下面就是具体的实现代码,如果需要源码请私信。

简单解释其中的几个变量的作用

1、slot单位时间分割的数据

2、limit单位时间限制的数量

3、timeUnit自定义的枚举类,为单位时间

4、slotTime最小单元格的时间长度,单位是毫秒

滑动窗口实现

Node

用滑动窗口来限流时,设置的单位时间越小,分割的时间越多,统计就会越准确。

后续介绍令牌桶或者漏桶算法

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200516A0CSKH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券