展开本页目录
开始前准备什么
- 下载本题完整练习包,区分待实现 starter 与作者完成 reference。
- 按README准备本题原生依赖;所有输入均为原创或明确标注的本地fixture。
- 本地练习不需要付费模型Key;真实模型调用未执行,MiniLM题另有明确实际推理说明。
- 设定容量补速
- 实现原子扣减
- 发起真实突发
- 读取429响应
- 隔离用户桶
- 按时间补充
- 核对令牌不负
原创输入、待完成starter、作者reference及实际运行产物,依README本地准备依赖。
环境要求、具体操作、产物核对与未运行范围。
1. 设定容量补速
容量为3,每秒补充2个令牌,起始桶满。先用可控时钟验证同一时刻只能消费三次,0.49秒不足一次,0.5秒可再消费一次。
2. 实现原子扣减
服务器在同一把锁内完成时间补充、容量上限和扣减。先检查后异步扣减会在并发时多放行,必须把状态变更作为完整临界区。
本地启动与复现
cd reference
python3 server.py --port 87873. 发起真实突发
点击Alice并发10次,真实本机HTTP请求中只有3次200、7次429。输入是短暂突发,允许容量内请求不会被一律拒绝。
4. 读取429响应
429带Retry-After,由当前令牌缺口与补充速度计算并向上取整。表里同时保留剩余令牌,不能拿固定等待时间冒充算法结果。
5. 隔离用户桶
Bob使用自己的桶,Alice耗尽后Bob的首个请求仍能200。这验证的是按用户隔离,不是所有用户共享一个全局配额。
6. 按时间补充
等待响应中的Retry-After再请求Alice,真实返回200。客户端等待只是演示;后端仍要在每次请求独立验证令牌。
7. 核对令牌不负
保存虚拟时钟与真实并发两侧记录,检查没有负令牌或超额放行。本文为本机单进程原子桶,没有接AWS账号,也不重复上游429客户端重试教程。
怎样确认已经完成
- 容量3满桶的十次并发恰三次200、七次429,无负令牌。
- Alice耗尽不影响Bob独立桶。
- 429返回计算后的Retry-After,等待后重新验证放行。
常见问题
AI做的接口怎么限流,又不把正常短暂突发全拦掉?
令牌桶允许容量内短暂突发,随后按补速限制。本题容量3、每秒2令牌,10次并发只放行3次。
返回429以后,到底要等多久才能再试?
后端按令牌缺口返回Retry-After并向上取整,客户端等待后仍由后端重新验证。本题等待后真实返回200。
哪些部分实际运行,哪些需要独立验证?
真实HTTP并发10次只放行3次,返回7次429;按用户隔离、等待Retry-After后放行,虚拟时钟边界也核对。 目标AI助手账号生成、云平台部署和生产环境不在本次执行范围。




