某接口使用令牌桶限流:桶容量为20个令牌,每个请求消耗1个令牌,补充速率为每秒5个。系统空闲足够长时间后,某一瞬间同时到达30个请求。忽略处理耗时,立即最多可放行()。
空闲足够久后令牌桶最多积累到容量20,不能无限累积。瞬间到达时最多立即消耗20个令牌;每秒5个描述后续持续补充速率。
选项分析
错误。5个是每秒补充速率,不是桶已满时的瞬间容量。
正确。满桶20个令牌可支持最多20个请求同时通过。
错误。不能把当前满桶20和未来一秒补充5机械相加为瞬间值。
错误。30个请求超过当前令牌数,不能全部立即放行。
本题为什么容易错
令牌桶有两个数字,考试常故意让你相加。先判断问题问“瞬间突发”还是“持续一段时间”,再决定看桶容量还是补充速率。
简短答案
令牌桶有20个令牌、每秒补充5个,空闲后瞬间最多放行多少请求,正确答案是 B(20个)。空闲足够久后令牌桶最多积累到容量20,不能无限累积。瞬间到达时最多立即消耗20个令牌;每秒5个描述后续持续补充速率。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 5个 | 本题干扰项 | 错误。5个是每秒补充速率,不是桶已满时的瞬间容量。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 20个 | 本题正确答案 | 正确。满桶20个令牌可支持最多20个请求同时通过。 | 看到题干核心场景时优先联想到它 |
| 25个 | 本题干扰项 | 错误。不能把当前满桶20和未来一秒补充5机械相加为瞬间值。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 30个 | 本题干扰项 | 错误。30个请求超过当前令牌数,不能全部立即放行。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 5个:错误。5个是每秒补充速率,不是桶已满时的瞬间容量。
- 25个:错误。不能把当前满桶20和未来一秒补充5机械相加为瞬间值。
- 30个:错误。30个请求超过当前令牌数,不能全部立即放行。
知识点详解
令牌桶按固定速率补充令牌,桶内令牌不超过容量,请求需取得令牌才能通过。它允许积攒的令牌承接短时突发,同时把长期平均速率限制在补充速率附近。实现时还要确定超限请求是拒绝、排队还是降级,并考虑分布式实例间配额一致性、时钟和客户端退避。
备考速记
桶能存多少决定突发,水龙头多快决定长期;本题满桶20,瞬间放20。
速率控制在速率控制场景中的作用
若剩余10个请求允许排队,2秒内可再补充约10个令牌并陆续放行;若策略是不排队,则应立即返回限流响应。题目问“立即”,答案只看当前20个。
同类题怎么考
- 根据桶容量计算瞬间最大放行量。
- 根据补充速率和时间计算持续窗口内可获得令牌数。
速率控制在系统架构设计师软考中的考法
先圈出桶容量、补充速率、每请求消耗和时间窗口。瞬间问题先看现存令牌,持续问题再加时间内新增令牌,并受容量和请求到达方式约束。
解题思路
这是一道很适合口算的题。先不看每秒5个,题目问的是同一瞬间;此时能用的是桶里已经存好的令牌。桶最多装20个,所以先放20个。剩下10个能否等待后续令牌,要看队列和拒绝策略,但不能算作立即放行。
考点定位
桶容量控制可容忍的最大突发,补充速率控制长期平均放行速度。空闲时间再长,令牌也不会超过桶容量。
易错提醒
- 把桶容量当成每秒请求数。
- 多个网关各自限流,却没有考虑全局配额被实例数放大。
- 返回429后客户端立即同步重试,形成新的请求尖峰。
备考提示
- 一句话记:容量管突发,速率管长期。
- 再练一个10秒窗口题,注意起始时桶内是否已有令牌。
你可能还想了解
- 令牌桶为什么允许突发流量?
- 令牌桶容量20每秒5个怎么计算?
- 令牌桶和漏桶有什么区别?
本文小结
令牌桶空闲后最多积累20个令牌,因此30个请求同时到达时最多立即放行20个;每秒5个控制后续补充速度。