背景与价值单节点限流不足以应对分布式场景。令牌桶与窗口策略结合可在多节点实现一致限流。统一规范桶容量与速率:定义 `capacity` 与 `refillRate`。一致性窗口:在窗口内跨节点共享状态或近似策略。优先级:根据调用方优先级分配速率。核心实现令牌桶(本地示意)class TokenBucket { capacity: number; tokens: number; refillRate: number; last: number constructor(capacity: number, refillRatePerSec: number) { this.capacity = capacity; this.tokens = capacity; this.refillRate = refillRatePerSec; this.last = Date.now() } refill() { const now = Date.now(); const add = ((now - this.last) / 1000) * this.refillRate; this.tokens = Math.min(this.capacity, this.tokens + add); this.last = now } take(n = 1): boolean { this.refill(); if (this.tokens >= n) { this.tokens -= n; return true } return false } } 一致性窗口(近似)class WindowGate { windowMs = 1000; max = 100; map = new Map<string, { ts: number; count: number }>() now(): number { return Date.now() } allow(key: string): boolean { const n = this.now(); const cur = this.map.get(key); if (!cur || n - cur.ts > this.windowMs) { this.map.set(key, { ts: n, count: 1 }); return true } cur.count++; return cur.count <= this.max } } 落地建议对热点接口采用令牌桶与窗口协同的分层限流,在入口与应用层共同治理。在分布式场景下采用共享存储或近似一致窗口策略,确保公平与稳定。验证清单桶容量与速率是否按预期工作;窗口是否阻断超出阈值的突发。

发表评论 取消回复