限流的本质是控制单位时间内进入系统的请求数量。它的目标是保证系统在处理能力范围内运行,防止突发流量压垮服务。
核心算法
关于这些算法的详细实现与对比,请参考:
- 令牌桶 (Token Bucket):允许突发流量,是最常用的算法。
- 漏桶 (Leaky Bucket):强行平滑流量,保证处理速度恒定。
- 滑动窗口 (Sliding Window):解决固定窗口的边界临界问题。
为什么需要限流?
- 保护业务资源:防止因非预期的流量激增导致 CPU、内存或数据库连接池耗尽。
- 防止恶意攻击:例如针对登录接口的暴力破解或针对搜索接口的频繁爬取。
- 服务分级:为不同的租户或接口设置不同的限流策略。