この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
【現象】
DynamoDBのアクセスがたまに遅くなり、リクエストがタイムアウトになる。再現率が高い。
実験:LambdaでDynamoDBにアクセス。10万回で数回くらい、処理時間が50秒かかる。
【問題点】
Amazon DynamoDB テーブルの項目を操作すると、「Internal server error (Service: AmazonDynamoDBv2; Status Code: 500; Error Code: InternalServerError」などの HTTP 5xx エラーが表示されます。
【解決方法】
5xx エラーは、AWS で解決する必要がある問題を示しています。これは、ネットワークの停止やバックエンドのハードウェア障害など、一時的な問題である可能性があります。5xx エラーを軽減するには:
・5xx エラーコードで失敗するリクエストのリトライするように実装します。
各 AWS SDK は、自動的にリトライロジックを実装しています。
必要に応じて再試行パラメータを変更できます。
単純なリトライに加えて、各 AWS SDK は効果的なフロー制御を行うために、エクスポネンシャルバックオフアルゴリズムを実装します。エクスポネンシャルバックオフは、再試行間の待機時間を累進的に長くして、連続的なエラー応答を受信するという概念に基づいています。たとえば、1 回目の再試行の前に最大 50 ミリ秒、2 回目の前に最大 100 ミリ秒、3 回目の前に最大 200 ミリ秒のようになります。
詳細については、AWSでのエラー再試行とエクスポネンシャルバックオフをご参照ください。