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