LoginSignup
0

More than 1 year has passed since last update.

Auth0のRate Limitを正しく理解する

Posted at

はじめに

Auth0 Management APIのRate Limitについてなんとなく疑問に思っていたものの放置してしまっていたので、改めて調べてみた

疑問

Auth0のドキュメントにはEnterpriseプランのrequest per secondが 16 と記載されている
Screen Shot 2022-06-13 at 11.16.08 AM.png

だがしかし、任意のエンドポイントでManagement APIリクエストを投げてみると、レスポンスヘッダ内のRate Limitは 50 となっている

(例)ユーザー取得リクエスト(ヘッダのみ)
$ curl -D - -o /dev/null -s \
  -H "Authorization: Bearer ${MANAGEMENT_API_ACCESS_TOKEN}" \
  -X GET https://${AUTH0_DOMAIN}/api/v2/users
Rate Limitレスポンスヘッダ
x-ratelimit-limit: 50
x-ratelimit-remaining: 49
x-ratelimit-reset: 1655086415

この差は何だろう?
ドキュメントの下の方にあるエンドポイントごとのRate Limitで個別に設定されているわけではなさそうだし、Self-service subscription limitsに記載されてる数字とも合致しない(そもそもSelf Serviceプランでもないし)

解説

ここに全てが書いてあった
Rate Limits Exposition - Auth0 Community

実際のRate Limitは

  • 秒間50リクエスト
  • 分間1,000リクエスト

となっている

つまり、こういうことである
秒間で50リクエストを超えるようであればHTTPステータス 429 Too Many Requests を返す
秒間30リクエストでも、それが継続するようなら同じく 429 を返す(詳細は後述)

ここで分間1,000というのをどう解釈するかということになるが、こんなロジックになってるらしい↓↓

  • 分間1,000リクエストを秒間に換算すると平均16.67リクエスト/秒となる
  • 1秒ごとに16.67が分間Rate Limitのバケットに加算されていくことになる

例えば秒間30リクエスト発生しているとする
1秒後には16.67加算されるので、残りは 1,000 - 30 + 16.67 = 986.67 リクエストとなる
もし秒間30リクエストが継続的に発生すると、毎秒13.33リクエストを消費していることになるので、1,000 / 13.33 = 75秒後には1,000を使い切って超過する、つまり分間のRate Limitに達するということになる

つまり結局どういうこと?

ということで、毎秒追加される分を枯渇せずに継続的に処理可能なManagement APIのリクエストは秒間16.67が上限ということになる
だから Sustained Requests per Second16 になってるんだね
Susteinedってそういう意味で書いてあったんだね、なるほど

こうして書いてみてもわかりづらいね
うまく説明できなくてスンマセン

おまけ

Enterprise and Startup subscription limits に記載してあるRate Limit (per second / per minute)はSustainedではなくそのままの意味で受け取れば良さそう

この場合は秒間10リクエスト上限みたい
GET https://${AUTH0_DOMAIN}/api/v2/organizations

x-ratelimit-limit: 10
x-ratelimit-remaining: 9
x-ratelimit-reset: 1655089549

更にいうと、Enterpriseプランの場合は Self-service subscription limits は適用されないみたい
そもそもプランに応じてエンドポイントごとに設定されているRate Limitはデフォルト値より小さいからね

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0