本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
一致性層級
Amazon Cloud Directory 是分散式目錄存放區。資料會分發到不同可用區域的多部伺服器。成功的寫入請求會更新所有伺服器上的資料。通常在一秒內,最終所有伺服器都可取得資料。為了協助服務的使用者,Cloud Directory 提供兩種一致性層級的服務處理讀取操作。本節說明不同的一致性層級和 Cloud Directory 的最終一致性本質。
閱讀隔離層級
從 Cloud Directory 讀取資料時,您必須指定您想要讀取的隔離層級。不同的隔離層級對延遲和資料更新有不同的權衡。
-
最終— 快照隔離層級會讀取任何立即可用的資料。在所有隔離等級中,此等級的延遲最低。 而且,其也讓您有機會檢視目錄中的舊資料。EVENTUAL 隔離不提供先寫後讀一致性。這表示無法保證您能在寫入後,立即讀取資料。
-
可序列化— 可序列化的隔離層級提供 Cloud Directory 所能提供的最高層級一致性。在 SERIALIZABLE 隔離層級完成讀取可確保您收到所有成功寫入的資料。您請求的資料如已變更,但此變更尚未提供,系統會拒絕您的
RetryableConflictException
請求。我們建議您重試這些例外狀況 (請參閱下節)。重試成功後,SERIALIZABLE 讀取會提供先寫後讀一致性。
寫入請求
Cloud Directory 可確保多個寫入請求不會同時更新相同的一或多個物件。如果發現同一個物件上正同時進行兩項寫入請求,其中一項操作會因為 RetryableConflictException
而失敗。我們建議您重試這些例外狀況 (請參閱下節)。
注意
在寫入操作期間收到的 RetryableConflictException
回應收到無法用於偵測競爭條件。如果已出現促成這種狀況的使用案例,不保證一定會發生例外狀況。是否發生例外狀況,取決於內部處理每個請求的順序。
RetryableConflictExceptions
在同一個物件上寫入後,當使用 SERIZABLE 隔離層級執行寫入操作或讀取操作時,Cloud Directory 可能回應RetryableConflictException
。這個例外狀況表示 Cloud Directory 伺服器還沒有處理之前寫入的內容。這些情況是暫時的,會迅速自行修復。請務必注意,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); } }