2024-11-03 レートリミットのアルゴリズム
システム設計の面接試験で紹介されていたレートリミットのアルゴリズムをまとめる。
- トークンバケット
- リーキーバケット
- 固定ウィンドウカウンタ
- スライディングウィンドウログ
- スライディングウィンドウカウンタ
特徴とともに以下に表にまとめる(supported by ChatGPT)。
レートリミット方式 | 特徴 | メリット | デメリット |
---|---|---|---|
トークンバケット | 許可されたリクエストごとにトークンを消費し、一定間隔でトークンが補充される | バーストの処理が可能 | 一定量のバーストを超えるとリクエスト拒否 |
リーキーバケット | バケットに追加されたリクエストが一定速度で処理される | 安定したリクエスト処理 | バースト処理には不向き |
固定ウィンドウカウンタ | 固定時間枠内でリクエスト数をカウントし、上限を超えると拒否 | 実装がシンプル | 境界でのバースト発生 |
スライディングウィンドウログ | 各リクエストのタイムスタンプを記録し、過去のウィンドウ内のリクエスト数を基に判断 | 高精度でバースト制御が可能 | ストレージの消費が増える |
スライディングウィンドウカウンタ | 時間を細かく分割してリクエストをカウントし、スライディングウィンドウで合算 | 境界でのバースト緩和 | 計算が増える |