【れーとりみっと】

レートリミット とは?

💡 「1分間に何回まで」とルールを決めてアクセスを絞る門番
📌 このページのポイント
トークンバケットによるレート制限 トークンバケット T T T 一定時間ごとに補充 容量: 最大5トークン リクエスト トークン消費 200 OK 429 拒否 トークンあり リクエスト許可 トークンを1つ消費 トークンなし(バケット空) リクエスト拒否 429 Too Many Requests
レート制限の仕組み
ひよこ ひよこ

レートリミットって何で必要なの?

ペンギン先生 ペンギン先生

APIに制限がないと、一人のユーザーが1秒間に何万回もリクエストを送ってサーバーをダウンさせることができるんだ。悪意があるDoS攻撃だけじゃなく、バグがあって無限ループになったプログラムでも起きる。レートリミットはそういった過剰なアクセスからサーバーを守るためにあるよ。

ひよこ ひよこ

超えると何が起きるの?

ペンギン先生 ペンギン先生

HTTPのステータスコード429(Too Many Requests)が返ってくるよ。だいたい `Retry-After` というヘッダーで「○秒後に再試行してね」という情報も一緒に返されることが多いんだ。

ひよこ ひよこ

カウントの単位ってどうやって決めるの?

ペンギン先生 ペンギン先生

IPアドレス単位・APIキー単位・ユーザー単位など色々あるよ。IPアドレスだとNATや共有ネットワークで複数人が同じIPになることがある。APIキーやユーザーIDが取れる場合はそちらの方が公平な制限ができるんだ。

ひよこ ひよこ

トークンバケットとかスライディングウィンドウって何が違うの?

ペンギン先生 ペンギン先生

これはアルゴリズムの話で、実は実装によって挙動がかなり違うんだ。固定ウィンドウ方式(例「1分間に100回」)は実装が簡単だけど、ウィンドウの切り替わり直前に集中的にアクセスされると実質2倍のリクエストが通ってしまう問題がある。スライディングウィンドウは過去60秒を常に見るので公平だけどメモリを多く使う。トークンバケットはバケツにトークンが一定速度で補充されて、リクエストごとに消費する方式でバーストアクセスをある程度許容できる。どのアルゴリズムを選ぶかで「バーストに強いか・公平か・実装コストか」がトレードオフになるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「レートリミット」って出てきたら「一定時間に送れるリクエスト数を制限してサーバーを守る仕組みだな」と思えばだいたいOK!
📖 おまけ:英語の意味
「Rate Limiting」 = レート(頻度)の制限
💬 「Rate」は「速度・頻度」の意味。リクエストの頻度に上限を設けることで過剰なアクセスを制御するよ
← 用語集にもどる