メニュー
Amazon API Gateway
開発者ガイド

API リクエストを調整してスループットを向上させる

API で処理するリクエストが多すぎないように、Amazon API Gateway ではトークンバケットアルゴリズムを使用してトークンでリクエストをカウントし、API へのリクエストを調整します。特に API Gateway では、アカウントのすべての API に送信されるリクエストの定常レートとバーストに対して制限を設定します。トークンバケットアルゴリズムでは、バーストは最大バケットサイズです。

リクエストの送信数がリクエストの定常レートおよびバーストを超えると、API Gateway は制限を超えたリクエストを失敗させ、クライアントに 429 Too Many Requests エラーレスポンスを返します。このような例外をキャッチすると、クライアントは API Gateway のスロットリング制限に準拠して、失敗したリクエストをレート制限内で再送信できます。

API 開発者は、API のステージ別またはメソッド別に制限を設定して、アカウントのすべての API にわたるパフォーマンス全体を向上させることができます。別の方法として、使用量プランでクライアントのリクエストの送信数を、指定したリクエストレートおよびクォータ内に制限することもできます。これにより、全体的なリクエスト送信数が制限されるため、アカウントレベルのスロットリング制限を大幅に超えることはありません。

アカウントレベルのスロットリング

デフォルトでは、API Gateway はリクエストの定常レートを 10,000 リクエスト/秒 (rps) に制限します。また、バースト (最大バケットサイズ) を AWS アカウント内のすべての API にわたって 5,000 リクエストに制限します。API Gateway では、バースト制限は、API Gateway が 429 Too Many Requests エラーレスポンスを返すことなく、どの時点でも処理できる同時リクエスト送信の最大数に対応します。

スロットリング制限を理解する一助として、デフォルトのアカウントレベルレートとバースト制限であると仮定し、次に例をいくつか示します。

  • 発信者が、1 秒間に等しく 10,000 リクエストを送信した場合 (たとえば、ミリ秒毎に 10 リクエスト)、API Gateway は 1 つも削除することなくすべてのリクエストを処理します。

  • 発信者が、最初の 1 ミリ秒間で 10,000 リクエストを送信した場合、API Gateway はそのうち 5,000 に対応し、残りは 1 秒間中に調整します。

  • 発信者が 5,000 リクエストを最初の 1 ミリ秒に送信し、さらに 5,000 リクエストを残りの 999 ミリ秒に等しく広げた場合 (たとえば、ミリ秒毎 5 リクエスト)、API Gateway は 429 Too Many Requests エラー応答を返すことなく全 10,000 リクエストを 1 秒間中に処理します。

  • 発信者が 5,000 リクエストを最初の 1 ミリ秒に送信し、次の 5,000 リクエスト を送信するのに 101 ミリ秒目まで待った場合、API Gateway は 6,000 リクエストを処理し、残りを 1 秒間中に調整します。これは、10,000 rps のレートで、API Gateway は最初の 100 ミリ秒後に 1,000 リクエストに対応し、よって同じ量でバケットを空にしたためです。次の 5,000 リクエストのスパイクのうち、1,000 はバケットを埋め、処理待ちとしてキューされます。残りの 4,000 は最大バケット容量を超え、破棄されます。

  • 発信者が 5,000 リクエストを最初の 1 ミリ秒に送信し、101 秒目で 1,000 リクエストを送信して、さらに 4,000 リクエストを残りの 899 ミリ秒に等しく広げると、API Gateway は調整することなく全 10,000 リクエストを 1 秒間中に処理します。

より一般的に、特定の時点で、バケット内のトークン数が b で、バケットの最大容量が B である場合、バケットに追加できるトークンの最大数は Δ=B-b です。この追加トークンの最大数は、クライアントが 429 エラーレスポンスを受け取ることなく送信できる追加の同時リクエストの最大数に対応します。通常、Δ は時間と共に変動します。その値は、バケットが一杯 (b=B) である場合のゼロから、バケットが空 (b=0) である場合の B までの範囲にわたります。この範囲は、トークンがバケットから削除されるレートであるリクエスト処理率と、トークンがバケットに追加されるレートであるレート制限率に依存します。

次の図は、同時リクエストの最大追加数である Δ の一般的な動作を、時間の関数として示します。図は、空のバケットから始まり、バケット内のトークンは 2 つの率を統合した r で減るものとしまていす。

 トークンバケットサイズと、統合したバーンレートがあるとした、時間の関数としてのバースト

このアカウントレベルのレート制限とバースト制限については、引き上げを申請できます。アカウントレベルのスロットリング制限の引き上げを申請するには、AWS サポートセンターにお問い合わせください。詳細については、「API Gateway の制限」を参照してください。

デフォルトのメソッドスロットリング

API 所有者は、特定のステージまたは API の個別のメソッドで、アカウントレベルのリクエストスロットリング制限を上書きするために、デフォルトのメソッドスロットリングを設定できます。デフォルトのメソッドスロットリング制限は、アカウントレベルの制限より高く設定した場合でも、アカウントレベルのレート制限が上限となります。

API Gateway コンソールを使用するか、API Gateway REST API を呼び出して、デフォルトのメソッドスロットリング制限を設定できます。コンソールを使用する手順については、「ステージ設定の更新」を参照してください。