Rate Limit(レート制限、呼び出し回数制限)

Rate Limit(レート制限)とは

Autodesk Platform Services(APS)のエンドポイントには、Rate Limit(レート制限)と呼ばれる呼び出し回数制限が設定されています。

アプリが 1 分あたりに実行できるエンドポイントの呼び出しの最大数がレート制限の実態です。呼び出し数をサービスの容量内に制限することで、システム全体の安定性の維持と DoS 攻撃DDos 攻撃などの攻撃からシステムを保護、影響を低減させることが目的です。

APS がオートデスクのクラウド サービスの基盤であると同時に、APS を利用する多くの開発者との共有環境である点をご理解ください。言い換えれば、APS はパブリック クラウドのインフラ(AWS)上に構築されたマルチテナント システムであり、APS を利用する世界中のアプリとの共有リソースです。一部アプリの突出した数の呼び出しが、システムを不安定化させてしまい、他のアプリのパフォーマンスに悪影響を与えてしまう可能性があります。

Microsoft 社の「ノイジー・ネイバーのアンチパターン – Azure Architecture Center | Microsoft Learn」記事にあるような、過度なエンドポイント呼び出しによるクラウド リソースの占有も考慮すべき点にもなっています。例外的ですが、非推奨の POST CreateFolder Command endpoint の記事にあるような、複合的な処理を必要とするエンドポイントを廃止する、といった対応も過去に存在しました。

この レート制限 自体は、マルチテナント システムの世界では最も一般的な制御手法と捉えることも出来ます。

なお、Rate Limit(レート制限)には、すべてのエンドポイントに共通する指標(APS Rate Limits and Quotas)が適用されるだけでなく、 API タイプ、モジュール、エンドポイント毎に異なるレート制限数が設定されている場合がありますのでご注意ください。代表的な API のレート制限は、次のとおりです。

Rate Limit(レート制限)に達した場合の対応

エンドポイント呼び出しの回数が Rate Limit(レート制限)に達した場合、429 ステータス “Too many requests” レスポンスが返されます。この場合、再呼び出しは、レスポンス ヘッダーにある retry-after 値で指定されている xx 秒後に再試行する必要があります。(xx は数値)

429 レスポンス ヘッダー例

HTTP/1.1 429
Too Many Requests
Content-Type: application/json
Retry-After: xx
Server: Apigee Router
Content-Length: 44

429 レスポンス ボディ例

{"developerMessage":"Quota limit exceeded."}
  • 429 レスポンスを無視してエンドポイント呼び出しを繰り返してしまうと、結果として DoS 攻撃のような状態にしてしまい、意図せずにシステムを不安定化、インシデントの原因になってしまう可能性があります。
  • 429 レスポンスは、他のサービスへの依存や予期しないトラフィックの急増など、さ まざまな要因で発生する可能性があります。このため、アプリからのエンドポイント呼び出し回数がレート制限に達していない場合でも発生する可能性があります。アプリ実装時には、 後述する 429 レスポンスへの対応(retry-after 値以後の再呼び出し)をお願いします。

Rate Limit(レート制限)変更リクエスト

APS Rate Limits and Quotas にも記載のあるとおり、エンドポイントに設定されたレート制限の値を増加変更するリクエストが可能です。

ただし、前述のとおり、APS はマルチテナント システムを採用している関係で、オートデスク製品を含めた他のアプリの運用と実行環境に悪影響を及ぼさないよう、慎重に検討する必要があります。このため、リクエスト内容の受付け可否は、本社判断で決定される点にご注意ください。

リクエストに対する判断材料とされる点には、リクエストされたアプリ(Client ID)毎の通信ログの調査があります。具体的には、リクエストされたエンドポイントが既定のレート制限に対して、どの程度の実績があるのかが調査されます。

解析の上、既定のレート制限より呼び出し数が大幅に下回っていたり、429 レスポンスに適切に対応していない状況が明らかになると、リクエストされたレート制限値が許可されない場合があります。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading