Amazon マーケットプレイスWebサービス(Amazon MWS)を正常に使用するには、スロットルを理解する必要があります。
スロットルとは、一定時間内に送信できるリクエスト数を制限するプロセスのことです。リクエストとは、在庫フィードの送信や、注文レポート作成の要求を意味します。スロットルは、リクエストがウェブサービスに殺到するのを防ぎ、認証されたすべての開発者が確実にウェブサービスにアクセスできるようにするものです。
Amazon MWSでは、リーキー・バケット・アルゴリズムのバリエーションを使用して、ウェブサービスを測定し、スロットルを実行します。このアルゴリズムは、下部にあいた穴から一定速度で水が流れ出すバケツの例えに基づいています。断続的にバケツに水を追加することができますが、あまりにも多くの水を一度に加えたり、速すぎる平均速度で水を加えたりした場合、水がバケツの容量を超えてしまいます。
バケツを最大リクエストクォータ、つまり一度に行うことができるリクエストの最大数と考え、Amazon MWSにこの例えを適用してみてください。バケツの穴は回復レート、つまり新しいリクエストを行うことができるようになるまでにかかる時間を表しています。したがって、一度に多すぎるリクエストを送信するとバケツの水があふれます。これをAmazon MWSの場合置き換えると、スロットルが起こります。水はバケツから一定速度で漏れているため、バケツを満たしておくには、バケツに水を追加する前に少し待たなければなりません。そのため、最大リクエストクォータに達した後のリクエスト実行能力は、回復レート、つまり新しいリクエストを行えるようになるまでの時間によって管理されています。
Amazon MWSスロットルをコントロールする3つの値の定義は以下のとおりです。
- リクエストクォータ - スロットルが発生せずに一度に送信できるリクエスト数。リクエストクォータはリクエストを送信するごとに減少し、回復レートで増加します。
- 回復レート(リカバリーレートとも呼ばれる) - 最大リクエストクォータに達するまで、時間をかけてリクエストクォータが増加する率。
- 最大リクエストクォータ(バーストレートとも呼ばれる) - リクエストクォータが達することができる最大サイズ。
ほとんどのAmazon MWSのオペレーションでは、最大リクエストクォータが10回で、毎分に新規1リクエストの回復レートですが、最初にもっと多いリクエストを送信できる(より大きい最大リクエストクォータ)反面、追加されたリクエストを実行するまでにより長い時間がかかる(低い回復レート)があるオペレーションもいくつかあります。例えば、RequestReport オペレーションでは、最大リクエストクォータが15回で、回復レートは2分ごとに新規1リクエストです。
次の例を考え、これらのアイデアを適用してみてください。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分で送信できることになります。
リクエストを自動化すること考慮し、代替え処理ができるようにしてください。そうすれば、最大リクエストクォータに達したか、またはウェブサービスに高いトラフィック量が起きたかでスロットルが発生した場合には、リクエストの数を減らして、最初に送信されなかったリクエストを再送信することができます。
スロットルを回避するためのヒント
フィードや送信したリクエストが正常に処理されるよう、以下の点をご確認ください。
- 送信する特定のリクエストのスロットル制限を理解しておいてください。
- サービスが利用不可の場合に、自動的にリクエスト数を減らす「バックオフ」プランを立てておいてください。プランでは、回復レート値を使って、いつリクエストが再送信されるべきかを決めてください。
- 〇〇時0分ちょうど、〇〇時30分ちょうどでなく、それ以外の時刻を選んでリクエストを送信してください。例えば、〇〇時11分、または〇〇時41分というような時刻でリクエストを送信してください。
- 夕方や早朝など、1日のうちで Amazon MWS のトラフィックが低くなりがちな時間をうまく活用してください。
スロットル(英: Bandwidth throttling)(帯域幅調整)とは、帯域幅を必要とするサーバなどの機器について、一定時間当たりの送受信データ量を制限する手法である。