システム設計の面接試験で紹介されていたレートリミットのアルゴリズムをまとめる。

  • トークンバケット
  • リーキーバケット
  • 固定ウィンドウカウンタ
  • スライディングウィンドウログ
  • スライディングウィンドウカウンタ

特徴とともに以下に表にまとめる(supported by ChatGPT)。

レートリミット方式 特徴 メリット デメリット
トークンバケット 許可されたリクエストごとにトークンを消費し、一定間隔でトークンが補充される バーストの処理が可能 一定量のバーストを超えるとリクエスト拒否
リーキーバケット バケットに追加されたリクエストが一定速度で処理される 安定したリクエスト処理 バースト処理には不向き
固定ウィンドウカウンタ 固定時間枠内でリクエスト数をカウントし、上限を超えると拒否 実装がシンプル 境界でのバースト発生
スライディングウィンドウログ 各リクエストのタイムスタンプを記録し、過去のウィンドウ内のリクエスト数を基に判断 高精度でバースト制御が可能 ストレージの消費が増える
スライディングウィンドウカウンタ 時間を細かく分割してリクエストをカウントし、スライディングウィンドウで合算 境界でのバースト緩和 計算が増える