mcpField
R
rate-limiting-implementation

rate-limiting-implementation

github.com/aj-geddes開発373504 回インストール34 週間前に更新
リポジトリ

rate-limiting-implementation について

レート制限とスロットリングの実装ガイドです。アルゴリズムや分散構成、ミドルウェアを扱い、サービス保護や負荷管理に取り組む開発者向けです。

主な機能

  1. 01TypeScript のトークンバケット方式
  2. 02Python のスライディングウィンドウ方式
  3. 03Redis による分散レート制限
  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 Too Many Requests)を返す
  • レスポンスに Retry-After ヘッダーを含める
  • 監視のためにレート制限違反をログに記録する
  • グレースフルデグラデーションを実装する
  • 永続化には Redis などを使用する
  • コストベースのレート制限を検討する(負荷の高い操作ほどコストを高くする)
  • 正当なトラフィックの急増に対応するバースト許容量を実装する
  • 制限について明確な API ドキュメントを提供する
❌ 避けるべき事項
  • 分散システムでレート制限データをアプリケーションメモリに保存する
  • エッジケースを考慮せずに固定ウィンドウカウンターを使用する
  • 期限切れデータのクリーンアップを忘れる
  • 1 人の悪意あるユーザーを理由に IP からのすべてのリクエストをブロックする
  • 正当な利用に対して制限を厳しくしすぎる
  • レート制限がユーザーエクスペリエンスに与える影響を無視する
  • レートリミッターの障害時にフェイルクローズ(すべて拒否)する

コメント