レートリミットとは
概要
レートリミット (rate limiting) は、特定の送信元からのリクエスト数を時間単位で制限する技術である。たとえば「同一 IP アドレスから 1 秒あたり 10 リクエストまで」のように上限を設定し、超過したリクエストを拒否する。サーバーの過負荷防止、スパム投稿の抑止、API の公平な利用確保など、幅広い目的で使用される。
主要なアルゴリズム
レートリミットの実装には複数のアルゴリズムがある。最も単純なのは固定ウィンドウ方式で、一定時間 (たとえば 1 分) ごとにカウンターをリセットする。実装が容易だが、ウィンドウの境界をまたぐと短時間に上限の 2 倍のリクエストが通過する問題がある。
スライディングウィンドウ方式は、直近 N 秒間のリクエスト数を常に追跡する。固定ウィンドウの境界問題を解消するが、実装がやや複雑になる。トークンバケット方式は、一定速度でトークンが補充されるバケットを用意し、リクエストごとにトークンを消費する。バースト的なリクエストを一定量許容しつつ、持続的な過負荷を防止できる。
質問箱サービスでの適用
質問箱サービスでは、匿名の質問投稿に対してレートリミットを適用するのが一般的である。同一の送信元からの投稿頻度に、正常な利用ではまず到達しない水準の上限を設けることで、一般ユーザーに影響を与えずに手動での嫌がらせ投稿のペースを大幅に低下させられる。
レートリミットは Proof of Work やハニーポットと異なり、人間による手動の嫌がらせにも効果がある。Bot 対策と人間対策の両方をカバーする点で、多層防御の中核を担う技術である。