单机用令牌桶:桶容量决定能容忍多少突发,填充速率决定长期平均 QPS。
多实例部署就得把令牌放进 Redis,用 Lua 脚本把取令牌和回填做成一步原子操作,否则并发下必然超发。
超限不要静默丢包,返回 429 Too Many Requests,并在响应头带 Retry-After 告诉调用方多久后重试。
登录、短信这类接口按用户或手机号维度限流,只按 IP 会被写字楼和运营商出口的 NAT 大面积误伤。
# Nginx 先扛一层:按 IP,10r/s,允许突发 20
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
# 超限响应
HTTP/1.1 429 Too Many Requests
Retry-After: 3
THE END






暂无评论内容