API 网关与限流:令牌桶与熔断策略实战Node.js 令牌桶中间件示例const buckets = new Map();
function bucket(key, capacity = 100, refillRate = 50, intervalMs = 1000) {
const b = buckets.get(key) || { tokens: capacity, last: Date.now() };
const now = Date.now();
const elapsed = now - b.last;
const refill = Math.floor(elapsed / intervalMs) * refillRate;
b.tokens = Math.min(capacity, b.tokens + Math.max(0, refill));
b.last = now;
buckets.set(key, b);
if (b.tokens > 0) { b.tokens -= 1; return true; }
return false;
}
function rateLimit(req, res, next) {
const key = req.ip;
if (bucket(key, 100, 50, 1000)) return next();
res.status(429).json({ error: 'Too Many Requests' });
}
熔断策略要点对连续错误设置阈值与冷却时间失败快速返回,避免级联故障验证通过压测观察 429 比例与响应时延结合日志确认限流与熔断的触发条件与恢复情况总结令牌桶适合稳定速率控制,熔断应对下游故障,两者结合提升系统韧性。

发表评论 取消回复