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