分布式限流面试题:窗口、令牌桶、Lua、并发与故障策略
| 问题 | 标准回答 | 原理页 |
|---|---|---|
| 限流限制什么 | 在昂贵资源前按身份和业务维度分配速率、并发、突发或排队预算,保护可持续服务能力。 | 定义 |
| QPS不高为什么线程池满 | Little定律近似并发=QPS×耗时;20QPS、5秒就是约100个在途请求。 | 容量 |
| 固定窗口问题 | 实现简单,但窗口边界前后可短时间放过接近双倍流量。 | 固定窗口 |
| 滑动日志和滑动计数区别 | 日志保存每次时间戳更精确但成本高;滑动计数按小桶近似,在精度和存储间折中。 | 滑动日志、滑动计数 |
| 令牌桶和漏桶区别 | 令牌桶按速率补充并允许桶容量内突发;漏桶通过有界队列按较稳定速率流出,偏流量整形。 | 令牌桶、漏桶 |
| 速率限制和并发限制区别 | 速率限制单位时间到达量;并发限制当前in-flight,慢接口即使QPS低也需要并发保护。 | 并发限制 |
| 本地和分布式限流怎么选 | 本地低延迟但多实例总配额不精确;集中状态接近全局额度但增加网络依赖和热点,可用全局预算+本地子配额。 | 对比 |
| Redis Lua为什么原子 | 读取、判断、递增/扣令牌和TTL在Redis一次脚本执行,不被其他命令穿插;不保证后续业务成功。 | Redis窗口 |
| Redis Cluster限流要注意什么 | 多Key脚本必须同Slot,热点Key会集中到一个分片,迁移、超时和故障切换影响精确性。 | Cluster |
| 多层限流怎么设计 | 全局、租户、接口和资源分别保护不同预算,并定义扣减顺序、可信身份与指标,避免相同阈值重复拒绝。 | 分层限流 |
| Sentinel怎样限流 | 以资源为入口统计QPS、线程数等,根据规则在调用链前拒绝;集群、热点参数和系统规则有各自边界。 | Sentinel |
| 限流器挂了放行还是拒绝 | 按风险选择Fail-open或Fail-closed,并配本地保守上限、短超时和告警;支付、登录比普通查询更偏保守。 | 故障策略 |
| 返回429后客户端怎么办 | 返回稳定错误码和可选Retry-After,客户端退避加抖动;立即重试会制造限流重试风暴。 | 响应契约 |
| 阈值怎样得到 | 从SLO和被保护资源压测容量曲线确定拐点,保留故障安全余量,灰度上线后按生产指标校准。 | 容量、指标 |
| 明明限流为什么仍崩 | 保护点可能在昂贵操作后、只限QPS没限并发、突发桶太大、本地阈值随实例倍增,或瓶颈是数据库锁/热点。 | Runbook |
本章小结
限流面试要从容量证据、算法状态、分布式原子性、故障策略和客户端行为完整回答。
