mcpField
R
rate-limiting-implementation

rate-limiting-implementation

github.com/aj-geddes开发373504 次安装34 周前更新
代码仓库

关于 rate-limiting-implementation

为开发者提供限流与节流实现指南,涵盖多种算法、分布式限流和框架集成,帮助保护服务并管理负载。

主要功能

  1. 01令牌桶算法(TypeScript)
  2. 02滑动窗口算法(Python)
  3. 03基于 Redis 的分布式限流
  4. 04Express 中间件
  5. 05分层与自适应限流
  6. 06限流最佳实践

适用场景

  1. 01保护公共 API 免受滥用
  2. 02为多服务器部署分配请求额度
  3. 03控制第三方 API 使用量
  4. 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.md
express-middleware.md
redis-based-distributed-rate-limiter.md
sliding-window-algorithm-python.md
tiered-rate-limiting.md
token-bucket-algorithm-typescript.md
scripts/
validate-api.sh
templates/
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