用途
本技能用于实现限流(rate limiting)与节流(throttling)机制,以保护服务免受滥用、确保资源公平分配,并在高负载下维持系统稳定性。
适用场景
- 保护公开 API 免受滥用
- 防止 DOS/DDOS 攻击
- 确保用户间资源公平使用
- 实现 API 配额与计费分层
- 管理系统负载与背压
- 执行 SLA 限制
- 控制第三方 API 使用
- 数据库连接管理
主要能力与参考实现
技能提供以下参考指南(位于 references/ 目录):
- 令牌桶算法(TypeScript)
- 基于 Redis 的分布式限流器
- Express 中间件
- 滑动窗口算法(Python)
- 分层限流
- 自适应限流
快速开始
资料给出的最小可运行示例为令牌桶配置与类骨架:
interface TokenBucketConfig {
capacity: number;
refillRate: number; // tokens per second
refillInterval: number; // milliseconds
}
class TokenBucket {
private tokens: number;
private lastRefill: number;
private readonly capacity: number;
private readonly refillRate: number;
private readonly refillInterval: number;
private refillTimer?: NodeJS.Timeout;
constructor(config: TokenBucketConfig) {
this.capacity = config.capacity;
this.tokens = config.capacity;
this.refillRate = config.refillRate;
this.refillInterval = config.refillInterval;
this.lastRefill = Date.now();
this.startRefill();
}
private startRefill(): void {
// ... (see reference guides for full implementation)
完整实现需参见参考指南。
最佳实践
建议做法:
- 多服务器部署使用分布式限流
- 实现多个限流层级(每秒、每分钟、每小时、每天)
- 返回正确的 HTTP 状态码(429 Too Many Requests)
- 在响应中包含 Retry-After 头
- 记录限流违规以便监控
- 实现优雅降级
- 使用 Redis 或类似方案进行持久化
- 考虑基于成本的限流(昂贵操作消耗更多配额)
- 为合法流量峰值实现突发允许量
- 在 API 文档中清晰说明限制
应避免的做法:
- 在分布式系统中将限流数据存储在应用内存中
- 使用固定窗口计数器而不考虑边界情况
- 忘记清理过期数据
- 因单个不良行为者而封禁某 IP 的所有请求
- 对合法使用设置过于严格的限制
- 忽视限流对用户体验的影响
- 限流器故障时失败关闭(拒绝所有请求)
限制
资料未提供具体安装命令、依赖版本、性能指标或收费信息,相关内容暂未提供。