【すらいでぃんぐうぃんどうれーとせいげん】
スライディングウィンドウレート制限 とは?
最終更新:
💡 直近の時間窓で、リクエスト数を制限する
現在時刻とともに動く時間窓を使って、リクエスト数を制限する方式。個別の時刻を記録するログ方式と、複数の固定窓の件数から近似するカウンター方式などがある。
📌 このページのポイント
- 固定窓の切り替わりで短時間に集中する問題を緩和する
- ログ方式は直近の許可済みリクエストの時刻を保持して数える
- カウンター方式は現在と前の窓を重み付けして近似する
- 記憶量・精度に加え、同時リクエストの判定の整合性も考える
何がスライディングなの?
たとえば現在から直近60秒という時間窓が、時刻とともに動くんだよ。ログ方式なら、その範囲に残る許可済みリクエストを数えて、新しい要求を通すかを決めるんだ。
固定窓とどう違う?
一分の固定窓で上限50件なら、0分59秒に50件、次の窓の1分01秒に50件を通せる場合があるよ。どちらの窓も50件以内だけれど、短い間に100件が集中する。これが境界のバーストだね。
ログ方式なら、次の50件はどうなる?
1分01秒でも直近60秒には、0分59秒に通した50件が残るよ。上限50件なら、新しい要求は許可しない。100件を通してから制限するという意味ではないんだ。
必ず全リクエストの時刻を保存する?
ログ方式では窓内の許可済み要求の時刻を保持するけれど、古い記録は取り除くよ。カウンター方式では、現在と前の固定窓の件数を重み付けして近似し、個別の時刻を保存しない方法もあるんだ。
近似版は完全に同じ判定になる?
もっと詳しく知りたい人へ
スライディング方式なら、短時間の集中も全部なくなる?
直近60秒に50件という上限なら、その50件が一度に来ること自体は許容されます。固定窓の境界で制限がリセットされる問題と、窓内で許す集中は区別します。瞬間的な集中も抑える必要がある場合は、時間窓の長さや別の制限方法も含めて設計します。
まとめ:ざっくりこれだけ覚えればOK!
「スライディングウィンドウレート制限」って出てきたら「直近の動く時間窓でリクエスト数を制限する方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Sliding Window Rate Limiting」 = 動く時間窓を使うレート制限
💬 Slidingは滑る・移動する、Windowは窓という意味だよ。たとえば直近60秒という対象期間が、現在時刻とともに動く考え方なんだ。