关于 rate-limiting-implementation
为开发者提供限流与节流实现指南,涵盖多种算法、分布式限流和框架集成,帮助保护服务并管理负载。
主要功能
- 01令牌桶算法(TypeScript)
- 02滑动窗口算法(Python)
- 03基于 Redis 的分布式限流
- 04Express 中间件
- 05分层与自适应限流
- 06限流最佳实践
适用场景
- 01保护公共 API 免受滥用
- 02为多服务器部署分配请求额度
- 03控制第三方 API 使用量
- 04管理数据库连接与系统负载
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill rate-limiting-implementation安装后在 Claude Code 中输入/rate-limiting-implementation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/adaptive-rate-limiting.mdexpress-middleware.mdredis-based-distributed-rate-limiter.mdsliding-window-algorithm-python.mdtiered-rate-limiting.mdtoken-bucket-algorithm-typescript.mdscripts/validate-api.shtemplates/api-scaffold.yaml详细介绍
速率限制实现
目录
概述
实现速率限制和限流机制,以保护服务免受滥用、确保资源分配公平,并在负载下维持系统稳定性。
适用场景
- 保护公共 API 免受滥用
- 防止 DOS/DDOS 攻击
- 确保不同用户之间公平使用资源
- 实现 API 配额和计费等级
- 管理系统负载和背压
- 强制执行 SLA 限制
- 控制第三方 API 的使用
- 管理数据库连接
快速入门
最小可运行示例:
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)
参考指南
references/ 目录中的详细实现:
| 指南 | 内容 |
|---|---|
| 令牌桶算法(TypeScript) | 令牌桶算法(TypeScript) |
| 基于 Redis 的分布式速率限制器 | 基于 Redis 的分布式速率限制器 |
| Express 中间件 | Express 中间件 |
| 滑动窗口算法(Python) | 滑动窗口算法(Python) |
| 分级速率限制 | 分级速率限制 |
| 自适应速率限制 | 自适应速率限制 |
最佳实践
✅ 应该做
- 在多服务器部署中使用分布式速率限制
- 实现多个速率限制级别(每秒、每分钟、每小时、每天)
- 返回正确的 HTTP 状态码(429 请求过多)
- 在响应中包含 Retry-After 标头
- 记录速率限制违规情况以便监控
- 实现优雅降级
- 使用 Redis 或类似工具进行持久化
- 考虑按成本进行速率限制(高成本操作消耗更多配额)
- 为合理的流量峰值提供突发额度
- 清晰地说明 API 限制
❌ 不应该做
- 在分布式系统中将速率限制数据存储在应用内存中
- 使用固定窗口计数器时不考虑边界情况
- 忘记清理过期数据
- 因单个违规者而屏蔽某个 IP 的所有请求
- 将限制设置得过于严格,妨碍合理使用
- 忽视速率限制对用户体验的影响
- 在速率限制器发生故障时采取故障关闭(拒绝所有请求)
评论
支持 Markdown