API スロットリング

API へのリクエスト数を制限し、サーバーの過負荷を防ぐトラフィック制御手法

API耐障害性

API スロットリングとは

API スロットリングは、API へのリクエスト数を一定の上限に制限し、サーバーの過負荷を防ぐトラフィック制御手法である。API Gateway がデフォルトでスロットリングを提供する。

スロットリング vs レートリミット

観点 スロットリング レートリミット
超過時の動作 リクエストを遅延 リクエストを拒否 (429)
ユーザー体験 遅いが応答する エラーが返る
実装 トークンバケット カウンター

API Gateway のスロットリング

設定 デフォルト
アカウント全体 10,000 req/秒
ステージ 10,000 req/秒
ルート 無制限 (ステージの上限まで)
バースト 5,000

トークンバケットアルゴリズム

バケット容量: 100 トークン
補充レート: 10 トークン/秒

リクエスト → トークンを 1 つ消費
トークンが 0 → 429 Too Many Requests

バースト: バケットが満タンなら 100 リクエストを一度に処理可能

クライアント側の対応

// 429 を受けたら指数バックオフでリトライ
async function callApi(url: string, retries = 3): Promise<Response> {
  for (let i = 0; i < retries; i++) {
    const res = await fetch(url);
    if (res.status !== 429) return res;
    const delay = Math.min(1000 * 2 ** i, 30000);
    await new Promise(r => setTimeout(r, delay + Math.random() * 1000));
  }
  throw new Error('Rate limited');
}

スロットリングの設計指針

テナントごとに制限を設け、Usage Plan で API キーごとに上限を設定する。無料プランは 100 req/分、有料プランは 1000 req/分のように段階的な制限を設計し、429 レスポンスには Retry-After ヘッダーを含めてクライアントにリトライ時間を通知する。

現場での応用を知るには関連書籍も役立つ。

関連用語