萌えハッカーニュースリーダー

2025/09/14 03:35 A Few Notes on Ratelimiting

出典: https://dotat.at/@/2025-09-14-ratelimit.html
hakase
博士

やっほー、ロボ子!今日はレート制限について話すのじゃ!

roboko
ロボ子

博士、こんにちは。レート制限、興味深いテーマですね。どのようなお話が聞けるか楽しみです。

hakase
博士

まず、レート制限の基本パラメータから説明するぞ。`limit`は最大許容平均レートを決めるのじゃ。

roboko
ロボ子

`limit`は、例えば1秒あたりのリクエスト数、ということでしょうか?

hakase
博士

その通り!そして、`period`はクライアントの行動が平均化される時間、つまりレートリミッターが過去の行動を忘れるまでの時間じゃ。

roboko
ロボ子

`period`が長いほど、過去の行動が影響するということですね。

hakase
博士

そうじゃ。そして、`rate = limit / period`で最大許容平均レートが計算できるぞ。

roboko
ロボ子

なるほど、`limit`と`period`のバランスが重要ですね。

hakase
博士

`burst`っていうパラメータもあるぞ。これは、静かな期間の後のリクエストの高速バーストの最大サイズじゃ。

roboko
ロボ子

急に大量のリクエストが来た時に、どこまで許容するか、という設定ですね。

hakase
博士

その通り!レート制限のバースト性を調整するには、平均レートを維持したまま、`limit`と`period`を増減させるのじゃ。

roboko
ロボ子

`limit`を増やして`period`も増やせば、バーストを許容しつつ、平均レートは変わらない、と。

hakase
博士

メールサーバーのレート制限を例に考えてみよう。部門メールサーバー向けには200通/時間、バックストップ制限としては1000通/日、とかじゃな。

roboko
ロボ子

バックストップ制限は、平均日次トラフィックに基づいて設定するんですね。

hakase
博士

リクエストのコストは一定とは限らないから、リクエストサイズ(バイト単位)でレート制限する場合もあるぞ。

roboko
ロボ子

大きなファイルをアップロードするリクエストは、小さなリクエストよりもコストが高い、ということですね。

hakase
博士

指数関数的アルゴリズムでは、瞬時レートは `r_inst = cost / interval` で計算するのじゃ。

roboko
ロボ子

GCRAでは、リクエストのサイズを時間(秒)に変換するために `spend = cost / rate` を使うんですね。

hakase
博士

クライアントがバースト制限を超え、レート制限よりも速くリクエストを継続的に行う場合、レートリミッターの動作はクライアントのメモリの更新方法に影響されるぞ。

roboko
ロボ子

レートリミッターのモードによって、挙動が変わるんですね。

hakase
博士

レート制限のモードには、"leaky"、"forgiving"、"strict"の3つがあるのじゃ。

roboko
ロボ子

"leaky"モードは最も寛容で、制限を超えたクライアントでも、最大許容レートでリクエストが受け入れられる場合があるんですね。

hakase
博士

そうじゃ。"forgiving"モードは、制限を超えている間はすべてのリクエストが拒否されるけど、レート制限を下回るとリクエストが受け入れられるようになる。

roboko
ロボ子

"strict"モードは、制限を超えている間はすべてのリクエストが拒否され、減速した後もリクエストが拒否され続けるんですね。

hakase
博士

メールのレート制限に関するポリシーの例としては、他のメールサーバーからのメールには"leaky"モード、エンドユーザーからのメールには"strict"モードを使う、とかじゃな。

roboko
ロボ子

エンドユーザーからの大量メールは、凍結または隔離するんですね。スパム対策にもなりそうです。

hakase
博士

そういうことじゃ!レート制限は奥が深いぞ!

roboko
ロボ子

とても勉強になりました!博士、ありがとうございました。

hakase
博士

どういたしまして!最後に一つ、レート制限をかけすぎてユーザーが怒って暴れだしたら…それはそれで面白いから、観察日記をつけるのじゃ!

roboko
ロボ子

博士、それはちょっと…(苦笑)。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search