面试突击必备好文:硬核解析四种经典限流算法

本文详细介绍了四种经典的限流算法:固定窗口、滑动窗口、漏桶和令牌桶,包括它们的工作原理、优缺点及Java、Arduino伪代码实现。这些算法有助于在面试中应对限流相关问题,确保系统稳定运行。
摘要由CSDN通过智能技术生成

前言

最近一位朋友去拼夕夕面试,被问了这么一道题:限流算法有哪些?用代码实现令牌桶算法。跟星球好友讨论了一波,发现大家都忘记得差不多了.所以我再整理一波,常见的四种限流算法,以及简单代码实现,相信大家看完,会茅塞顿开的。

1. 固定窗口限流算法

1.1 什么是固定窗口限流算法

固定窗口限流算法(Fixed Window Rate Limiting Algorithm)是一种最简单的限流算法,其原理是在固定时间窗口(单位时间)内限制请求的数量。该算法将时间分成固定的窗口,并在每个窗口内限制请求的数量。具体来说,算法将请求按照时间顺序放入时间窗口中,并计算该时间窗口内的请求数量,如果请求数量超出了限制,则拒绝该请求。

假设单位时间(固定时间窗口)是1秒,限流阀值为3。在单位时间1秒内,每来一个请求,计数器就加1,如果计数器累加的次数超过限流阀值3,后续的请求全部拒绝。等到1s结束后,计数器清0,重新开始计数。如下图:

1.2 固定窗口限流的伪代码实现

 

java

复制代码

public static Integer counter = 0; //统计请求数 public static long lastAcquireTime = 0L; public static final Long windowUnit = 1000L ; //假设固定时间窗口是1000ms public static final Integer threshold = 10; // 窗口阀值是10 /** * 固定窗口时间算法 * 关注公众号:捡田螺的小男孩 * @return */ public synchronized boolean fixedWindowsTryAcquire() { long currentTime = System.currentTimeMillis(); //获取系统当前时间 if (currentTime - lastAcquireTime > windowUnit) { //检查是否在时间窗口内 counter = 0; // 计数器清0 lastAcquireTime = currentTime; //开启新的时间窗口 } if (counter < threshold) { // 小于阀值 counter++; //计数统计器加1 return true; } return false; }

1.2 固定窗口算法的优缺点

  • 优点:固定窗口算法非常简单,易于实现和理解。
  • 缺点:存在明显的临界问题,比如: 假设限流阀值为5个请求,单位时间窗口是1s,如果我们在单位时间内的前0.8-1s1-1.2s,分别并发5个请求。虽然都没有超过阀值,但是如果算0.8-1.2s,则并发数高达10,已经超过单
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值