真实面经题目 · 原创解析
有哪些限流算法?
限流算法常见有固定窗口、滑动窗口、漏桶和令牌桶。面试回答要讲清每种算法解决什么问题、是否允许突发流量、实现复杂度和分布式一致性取舍。
出现于:腾讯 · 后端开发
真实面经题目 · 原创解析
限流算法常见有固定窗口、滑动窗口、漏桶和令牌桶。面试回答要讲清每种算法解决什么问题、是否允许突发流量、实现复杂度和分布式一致性取舍。
常见限流算法有四类。固定窗口是在一个时间窗口内计数,简单但窗口边界可能出现双倍突刺;滑动窗口按更细粒度或日志记录最近一段时间请求,边界更平滑但存储和计算成本更高;漏桶把请求按固定速率流出,能平滑流量但对突发不友好;令牌桶按固定速率生成令牌,请求拿到令牌才能通过,桶里可积累令牌,所以能限制平均速率并允许一定突发。生产中还要考虑单机还是分布式、集中式原子计数、网关限流、降级和熔断配合。
固定窗口按分钟或秒计数,请求数超过阈值就拒绝。它实现简单,适合粗粒度保护,但在窗口切换前后可能短时间放行接近两倍阈值的请求。
滑动窗口统计最近一段连续时间的请求,可以用请求日志、环形桶或加权计数实现。它比固定窗口更平滑,但需要更多存储、过期清理和并发控制。
漏桶把请求放入桶中,系统按固定速率处理,桶满则丢弃或排队。它适合保护下游稳定处理能力,但突发流量会被削平,用户侧可能感到排队或拒绝。
令牌桶按固定速率补充令牌,请求消耗令牌。桶容量决定可承受的突发量,补充速率决定长期平均流量,因此常用于网关和接口 QPS 控制。
多实例服务要避免每台机器各自放大阈值。常见做法是网关集中限流、集中式原子计数、分片限流或本地预取令牌,同时监控热点 key 和限流误伤。
漏桶强调固定速率流出,突发会被平滑;令牌桶允许令牌积累,所以能在平均速率受控的前提下放行短时突发。
多实例下每台机器都有自己的计数器,总放行量会随实例数放大,除非做流量分片、集中限流或全局计数协调。
限流是主动控制进入系统的流量,熔断是下游异常或超时后暂时停止调用,避免故障继续扩散。