整合性のレベル - Amazon Cloud Directory

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

整合性のレベル

Amazon クラウドディレクトリは、分散型のディレクトリストアです。データは、さまざまなアベイラビリティーゾーンの複数のサーバーに分散されます。書き込みリクエストが正常に行われると、すべてのサーバー上のデータが更新されます。データは、通常 1 秒以内にすべてのサーバー上で利用できるようになります。このサービスのユーザーを支援するために、クラウドディレクトリでは、読み書きオペレーションに関して 2 つの整合性レベルを用意しています。このセクションでは、その整合性レベルに加え、クラウドディレクトリの結果整合性について説明します。

分離レベルの読み込み

クラウドディレクトリからデータを読み込む場合は、読み込む分離レベルを指定する必要があります。各分離レベルのレイテンシーとデータ鮮度の間にはトレードオフがあります。

  • 結果整合性— スナップショットの分離レベルは、データがすぐに利用できるかどうかに関係なく読み込みます。すべての分離レベルのうち、レイテンシーは最も低くなります。 また、表示されるディレクトリ内のデータが古い場合があります。EVENTUAL の分離では、書き込み後の読み取りの整合性は保証されません。つまり、書き込み後すぐにデータを読み取れるとは限りません。

  • 直列化可能— 直列化分離レベルは、Cloud Directory で最も高い整合性を提供します。SERIALIZABLE の分離レベルで読み込みを行うと、正常な書き込みからデータを受け取ることを保証します。リクエストしたものの変更が反映されてないデータに変更を加えると、システムは RetryableConflictException でそのリクエストを拒否します。これらの例外を再試行することをお勧めします (次のセクションを参照してください)。正常に再試行されると、SERIALIZABLE は、書き込み後の読み取り整合性を実現します。

書き込みリクエスト

クラウドディレクトリでは、複数の書き込みリクエストを行っても、同一のオブジェクトを同時にアップデートすることはできません。同一のオブジェクトに対して 2 つの書き込みリクエストが実行されると、いずれかのオペレーションは、RetryableConflictException で拒否されます。これらの例外を再試行することをお勧めします (以下のセクションを参照)。

注記

RetryableConflictException 書き込み操作時に受信したレスポンスで、競合状態を検出することはできません。この状況を早めるユースケースが提示された場合にこの例外が常に発生することを保証するものではありません。例外の発生有無は、内部で処理される各リクエストの順序によって異なります。

RetryableConflictExceptions

同一オブジェクトでの書き込み後に、SERIALIzABLE 分離レベルで書き込み操作または読み取り操作を実行すると、Cloud Directory は、で応答する場合があります。RetryableConflictException。この例外は、クラウドディレクトリサーバーで、以前の書き込みの内容が処理されていないことを表します。この状況は一時的なもので、内部で迅速に対処されます。RetryableConflictException を使用して、書き込み後の読み込み整合性を検出できないことを把握することが重要です。特定のユースケースによって、この例外が発生することを保証するものではありません。

Cloud Directory クライアントを設定してを再試行することをお勧めします。RetryableConflictException。この設定を行うことで、オペレーション時にエラーが発生しなくなります。Java でこの設定を行う手順を以下のサンプルコードで示します。

RetryPolicy retryPolicy = new RetryPolicy(new CloudDirectoryRetryCondition(), PredefinedRetryPolicies.DEFAULT_BACKOFF_STRATEGY, PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY, true); ClientConfiguration clientConfiguration = new ClientConfiguration().withRetryPolicy(retryPolicy); AmazonCloudDirectory client = new AmazonCloudDirectory ( new BasicAWSCredentials(…), clientConfiguration); public static class CloudDirectoryRetryCondition extends SDKDefaultRetryCondition { @Override public boolean shouldRetry(AmazonWebServiceRequest originalRequest, AmazonClientException exception, int retriesAttempted) { if (exception.getCause() instanceof RetryableConflictException) { return true; } return super.shouldRetry(originalRequest, exception, retriesAttempted); } }