はじめに
Auth0 Management APIのRate Limitについてなんとなく疑問に思っていたものの放置してしまっていたので、改めて調べてみた
疑問
Auth0のドキュメントにはEnterpriseプランのrequest per secondが 16 と記載されている
だがしかし、任意のエンドポイントで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
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 Second が 16
になってるんだね
Susteinedってそういう意味で書いてあったんだね、なるほど
こうして書いてみてもわかりづらいね
うまく説明できなくてスンマセン
おまけ
Enterprise and Startup subscription limits に記載してあるRate Limit (per second / per minute)はSustainedではなくそのままの意味で受け取れば良さそう
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はデフォルト値より小さいからね