
模型压缩四剑客:量化、剪枝、蒸馏、二值化
> 核心关键词:API 速率限制、流控算法、令牌桶、漏桶、滑动窗口、分布式限流、Redis 限流
算法 | 突发支持 | 实现难度 | 平滑输出 | 适用场景 |
---|---|---|---|---|
固定窗口 | ❌ | ⭐️ | ❌ | 简单限流、低并发场景 |
滑动窗口 | ✅ | ⭐️⭐️ | ✅ | 精准限流、高并发场景 |
漏桶 | ❌ | ⭐️⭐️ | ✅ | 平滑流出、匀速处理 |
令牌桶 | ✅ | ⭐️⭐️⭐️ | ✅ | 支持突发与持续限速 |
RateLimiter
或 Bucket4j 库。express-rate-limit
中间件轻松接入。limit_req
模块配置漏桶算法,实现边缘限流。http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;
server {
location /api/ {
limit_req zone=api_limit burst=200 nodelay;
proxy_pass http://backend;
}
}
}
-- Redis Lua 脚本(Token Bucket 示例)
local key, rate, burst = KEYS[1], tonumber(ARGV[1]), tonumber(ARGV[2])
local now = redis.call('incrby', key..':ts', 0)
if now == 0 then
redis.call('set', key..':tokens', burst)
redis.call('set', key..':ts', ARGV[3])
end
local last_ts = tonumber(redis.call('get', key..':ts'))
local tokens = tonumber(redis.call('get', key..':tokens'))
local delta = math.max(0, tonumber(ARGV[3]) - last_ts)
local new_tokens = math.min(burst, tokens + delta * rate)
if new_tokens < 1 then
return 0
else
redis.call('set', key..':tokens', new_tokens - 1)
redis.call('set', key..':ts', ARGV[3])
return 1
end
user+endpoint+minute
,实现精准防护。> 实战技巧:在秒杀或大促场景,预先调大 burst
值,活动结束后快速降回正常水平。
限流请求数
、拒绝次数
、当前令牌余量
。本文系统介绍了 API 速率限制 的核心 流控算法,并结合 单节点 与 分布式 环境的 实战方案,提供了动态调优、过载保护与监控告警等完整解决方案。未来,可借助 AI 异常流量识别、Envoy 智能限流 等技术,进一步提升系统弹性与智能化运维水平。
原文引自YouTube视频:https://www.youtube.com/watch?v=mQCJJqUfn9Y