固定窗口算法
简单粗暴,但有临界问题:
滑动窗口算法
滑动窗口通俗来讲是一种流量控制技术,描述接收方TCP数据报缓冲区大小的数据。发送方根据这个数据计算最大可发送的数据量。滑动窗口协议是TCP使用的一种流量控制方法,允许发送方在停止并等待确认前连续发送多个分组。
漏桶算法
定义:
- 桶容量固定,任意速率流入水滴,桶满则溢出(被丢弃)。
- 桶底有个洞,固定速率流出水滴。
特点:
- 漏桶核心是:请求来了直接进桶,桶根据漏洞大小慢慢漏出。
令牌桶算法
定义:
- 桶容量固定,用于放令牌,固定速率放令牌,桶满则不放。
- 处理请求需先拿令牌,拿不到令牌则限流。
特点:
- 突发情况下可一次拿多个令牌处理。
每种算法都有其适用场景:
- 固定窗口算法适合对时间敏感度不高的场景。
- 滑动窗口算法适合需要更平滑流量控制的场景。
- 漏桶算法适合需要强制恒定速率处理请求的场景。
- 令牌桶算法适合需要应对突发流量,但平均速率可控的场景。
在实际应用中,可以根据业务需求和系统特点选择合适的限流算法。例如,在Redis中实现限流时,可以使用Redis的原子命令和Lua脚本功能来实现这些算法,确保限流逻辑的原子性和高效执行。