4种经典限流算法详解
在高并发系统中,限流是保护服务稳定性的核心手段之一。它通过控制请求速率,防止突发流量压垮系统,但需在系统稳定性和用户体验之间找到平衡。本文将详解四种经典限流算法,涵盖原理、代码实现及适用场景,助你轻松应对面试与实际开发挑战。
1. 固定窗口算法
原理
- 将时间划分为固定窗口(如1秒),维护一个计数器统计窗口内请求数。
- 若计数器超过阈值,拒绝后续请求;窗口结束后计数器归零。
代码示例
public class FixedWindowLimiter {
private long lastResetTime = System.currentTimeMillis();
private int counter = 0;
private final int threshold = 100; // 阈值
private final long windowSize = 1000; // 窗口大小(毫秒)
public synchronized boolean tryAcquire() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastResetTime > windowSize) {
counter = 0; // 重置计数器
lastResetTime = currentTime; // 新窗口开始
}
if (counter < threshold) {