Amazon Services Japan
Amazonマーケットプレイス Web サービス (Amazon MWS) ドキュメント
Amazon MWS ドキュメント

スロットリング: リクエストを送信できる頻度を制限する

AmazonマーケットプレイスWebサービス(Amazon MWS)を正常に使用するには、スロットルを理解する必要があります。スロットルとは、一定時間内に送信できるリクエスト数を制限するプロセスのことです。リクエストとは、在庫フィードを送信したとき、または注文レポートをリクエストしたときなどです。スロットルは、リクエストがWebサービスに殺到するのを防ぎ、認証されたすべての開発者が確実にWebサービスにアクセスできるようにするものです。

Amazon MWSでは、リーキー・バケット・アルゴリズムのバリエーションを使用して、Webサービスを測定し、スロットルを実行します。このアルゴリズムは、下部にあいた穴から一定速度で水が流れ出すバケツの例えに基づいています。断続的にバケツに水を追加することができますが、あまりにも多くの水を一度に加えたり、速すぎる平均速度で水を加えたりした場合、水がバケツの容量を超えてしまいます。

バケツを最大リクエストクォータ、つまり一度に行うことができるリクエストの最大数と考え、Amazon MWSにこの例えを適用してみてください。バケツの穴は回復レート、つまり新しいリクエストを行うことができるようになるまでにかかる時間を表しています。したがって、一度に多すぎるリクエストを送信するとバケツの水があふれます。これをAmazon MWSの場合に置き換えると、スロットルが起こります。水はバケツから一定速度で漏れているため、バケツを満たしておくには、バケツに水を追加する前に少し待たなければなりません。そのため、最大リクエストクォータに達した後のリクエスト実行能力は、回復レート、つまり新しいリクエストを行えるようになるまでの時間によって管理されています。

Amazon MWSスロットルをコントロールする3つの値の定義は以下のとおりです。

  • リクエストクォータ - スロットルが発生せずに一度に送信できるリクエスト数。リクエストクォータはリクエストを送信するごとに減少し、回復レートで増加します。リクエストは、Amazonの出品用アカウントとAmazon MWS開発者アカウントの組み合わせごとに計算されます。
  • 回復レート(リカバリーレートとも呼ばれる) - 最大リクエストクォータに達するまで、時間をかけてリクエストクォータが増加する率です。
  • 最大リクエストクォータ(バーストレートとも呼ばれる) - リクエストクォータが達することができる最大サイズです。

次の例を考え、これらのアイデアを適用してみてください。SubmitFeedオペレーションを使って、25の在庫フィードを送信したいと考えてください。SubmitFeedオペレーションの最大リクエストクォータは15回で、2分ごとに新規1リクエストの回復レートです。一度に25フィードのリクエストを送信すると、15回以降のリクエストはスロットルされます。そのため、リクエストクォータが復元された後で、もう一度10個のフィードのリクエストを再送信する必要があります。回復レートは2分ごとに1リクエストであるため、残り10個のフィードのリクエストを送信できるようなるまでに20分かかります。そのため、すべてのリクエストを送信してスロットルされたリクエストを再送信する代わりに、プロセスを自動化して徐々にフィードのリクエストを送信することができます。

例えば、(元の25フィードのうちの)10個のフィードのリクエストを送信すると、リクエストクォータにはまだ5リクエストが残っています。その後10分待つと、回復レートによりリクエストクォータが10回に増加します(2分ごとにリクエスト1つが増えるので、10分で5つの新しいリクエストができます)。そして、もう10個のフィードのリクエストを送信します。残りの5つのフィードのリクエストは、さらに10分待ってから送信できます。万事がうまくいけば、25個すべてのインベントリフィードを約20分で送信できることになります。

リクエストを自動化すること考慮し、代替え処理ができるようにしてください。そうすれば、最大リクエストクォータに達したか、またはWebサービスに高いトラフィック量が起きたかでスロットルが発生した場合には、リクエストの数を減らして、最初に送信されなかったリクエストを再送信することができます。

スロットルを回避するためのヒント

フィードや送信したリクエストが正常に処理されるよう、以下の点をご確認ください。

  • 送信する特定のリクエストのスロットル制限を理解しておいてください。
  • サービスが利用不可の場合に、自動的にリクエスト数を減らす「バックオフ」プランを立てておいてください。プランでは、回復レート値を使って、いつリクエストが再送信されるべきかを決めてください。
  • 〇〇時0分ちょうど、〇〇時30分ちょうどでなく、それ以外の時刻を選んでリクエストを送信してください。例えば、〇〇時11分、または〇〇時41分というような時刻でリクエストを送信してください。
  • 夕方や早朝など、1日のうちで Amazon MWS のトラフィックが低くなりがちな時間をうまく活用してください。