当前位置:   article > 正文

限流算法-固定时间窗口_固定时间窗口限流算法

固定时间窗口限流算法

本文介绍了固定时间窗口限流算法。

前言

首先限流的算法有很多种,比如固定时间窗口限流算法、滑动时间窗口算法、漏桶算法、令牌桶算法,其余的算法后续我们会一一介绍。

一、限流场景

站在服务调用方的角度来说,限流的场景大体分为两类。

  • 对外提供服务

    用户通过某种形式调用到了我们的服务,比如提供了web服务。

    (1)用户增长速度太快。请求量一下子上来了,接口扛不住压力

    (2)爬虫

    (3)热点事件。比如公司上市成功曝光度增加,从而导致访问用户量增加。

    (4)刷单。有的公司甚至主动为用户提供刷单工具,就会导致服务的请求量暴增。

  • 对内提供服务

    当前存在A、B、C、D四个服务,A服务同时被B、C、D服务调用,如果B服务的请求量暴增,导致A服务宕机,同时就会导致C、D服务也无法使用,这种情况就不太合适。
    在这里插入图片描述

二、固定时间窗口限流算法原理

固定时间内只允许通过一定数据量请求,超出的请求数则会被拦截。
在这里插入图片描述

缺点:

这种方式下我们假定的是请求均匀分布,如果请求数据只集中在时间窗口内的某一个时间段,那么就可能超出承受范围,如下图所示。
在这里插入图片描述

三、代码实现

public class FixedTimeWindow {

    public static final Integer DURATION = 1 * 1000; // 时间窗口大小,单位毫秒

    public static final Integer MAX_COUNT = 100; // 允许的最大请求次数

    public static Integer curCount = 0; // 当前请求次数

    public static Long endTime = new Date().getTime(); // 当前时间窗口的开始时间

    public boolean limit() {
        long currentTime = new Date().getTime();

        // 是否已经不在当前时间窗口范围内了
        if (currentTime > endTime) {
            endTime = currentTime + DURATION;
            curCount = 1;
            return true;
        } else { // 处于当前时间窗口
            curCount = curCount + 1;
            return curCount < MAX_COUNT;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/543986
推荐阅读
相关标签
  

闽ICP备14008679号