1

AWS SDK for PHPを使用して、DynamoDBとプログラムでやり取りしています。

DynamoDBへのリクエストが抑制されているかどうかを検出して、少し遅れて別のリクエストを作成できるようにしたいと思います。

現在、スロットルされたリクエストが実行されないことを前提に運用しています。Amazon FAQは、スロットルが発生すると400エラーが返されることを示唆しています。

だから私は現在このようなロジックを持っています:

for( $i=0; $i<10; $i++ ) {

    $response = $dynamodb->get_item($get_item_args);

    if( $response->isOK() ) {

        break;

    } elseif( $i < 9 ) {

        sleep(1);
    }
}

これはうまくいくと思いますが、少し馬鹿げています。特に、スロットルされたリクエストだけでなく、失敗したすべてのリクエストを繰り返します。解決できないエラーが発生した場合、私は本当にリクエストを繰り返したくありません。

これをよりスマートにするために、抑制された応答の内部で一意の識別子(つまり特定のエラーメッセージ)を探したいと思います。しかし、私の人生では、抑制された応答のサンプルをキャプチャすることはできません(またはインターネット上のどこでも見つけることができません)。

スロットルのリスクを補い、要求が満たされる可能性を最大化するための最良の方法は何ですか?

4

1 に答える 1

2

AWS SDK は、スロットリングされたリクエストを成功するまで自動的に再試行します。したがって、上記の作業は不要です (AWS SDK for PHP を使用しているため)。

Amazon DynamoDB ドキュメント ページでのエラーの処理には、ProvisionedThroughputExceededException エラーについて次のように記載されています。

Amazon DynamoDB の AWS SDK は、この例外を受け取ったリクエストを自動的に再試行します。したがって、リクエストが大きすぎるか、再試行キューが大きすぎて終了できない場合を除き、リクエストは最終的に成功します。

于 2012-12-08T18:16:01.803 に答える