请解释限流的概念,并列举常见的限流算法及其适用场景。
考察说明
考查对限流概念的理解以及常见限流算法的原理、特点与选型能力。
回答思路
- 【回答框架 1】限流是控制系统在单位时间内处理的请求量不超过预设阈值,以保护后端资源、避免过载降级的一种手段。核心在于速率控制,常见于网关、API 层或微服务间调用。
- 【回答框架 2】固定窗口算法将时间划分为固定长度窗口,每个窗口内计数,超过阈值则拒绝。实现简单,但窗口边界处可能出现两倍于阈值的突发流量。
- 【回答框架 3】滑动窗口算法将时间划分为更细粒度的小格子,通过滑动窗口统计最近一个窗口内的请求数,能平滑边界突发,更精确但内存开销稍高。
- 【回答框架 4】漏桶算法以恒定速率处理请求,请求进入桶中排队,桶满则拒绝。输出速率固定,适合平滑突发流量,但无法应对突发流量提升吞吐。
- 【回答框架 5】令牌桶算法以恒定速率向桶中放入令牌,每次请求消耗一个令牌,桶有容量上限。可允许一定突发流量,是常用的限流算法,如 Guava RateLimiter 采用此思想。
- 【关键点 1】固定窗口在边界有双倍突发风险,滑动窗口优化了此问题。
- 【关键点 2】漏桶输出速率恒定,令牌桶允许突发,选择需结合业务对突发流量的容忍度。
- 【关键点 3】分布式场景下需考虑原子计数或分布式令牌桶,如 Redis 实现。
- 【易错点 1】固定窗口仅适合简单场景,对突发敏感需用滑动窗口或令牌桶。
- 【易错点 2】漏桶算法不能应对突发,若业务需要弹性吞吐需谨慎选型。
- 【易错点 3】实现限流时需考虑时钟同步和内存占用,尤其在多实例环境。