harukin721

主に学習記録 🔗 wantedly.com/id/harukin721

Nginx のレートリミットの値に標準偏差を活用

Nginx のレートリミットを設定する際に、標準偏差を活用した。

標準偏差とは、データが平均値からどれぐらい散らばっているかを示す指標のこと。

𝜇±𝜎の区間に入る確率は約68%
𝜇±2.0𝜎の区間に入る確率は約95%
𝜇±2.5𝜎の区間に入る確率は約98.76%
𝜇±3.0𝜎の区間に入る確率は約99.7%

gmo-research.jp

www.kagakusense.com

Nginx のレートリミットの値を決める

BigQuery に蓄積されている直近3ヶ月の Nginx のアクセスログを活用して IP単位のレートリミットの値を決定した。

  1. 直近 3ヶ月の remote_addr ごとの秒ごとのリクエスト数を集計する
  2. 全 remote_addr と秒別の平均リクエスト数と標準偏差を計算する
  3. 平均から 𝜇±2.5𝜎 以上離れた秒単位のレコードに含まれるリクエスト数を特定する
  4. 平均から 𝜇±3.0𝜎 以上離れた秒単位のレコードに含まれるリクエスト数を特定する

3 で算出した数値「80」は正常なリクエストとして扱い、4 で算出した数値「95」は異常なリクエスト( 一時的な外れ値として許容 )として扱う。 95 から 80 を引いた値「15」を burst の値( nodelay あり )とした。

@pyama86 さんに、このように実例を踏まえてロジカルに決めていく方法を教えていただきました。ありがとうございました。

以下の本をおすすめしてもらったので読んでいる。

str.toyokeizai.net

Nginx の参考

Nginx の「burst なし」「burst あり、nodelay なし」「burst あり、nodelay あり」は以下のブログで勉強させていただきました。ありがとうございました。

miraitranslate-tech.hatenablog.jp