接口被刷,用令牌桶限流并返回 429

单机用令牌桶:桶容量决定能容忍多少突发,填充速率决定长期平均 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
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容