As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Níveis de consistência
O Amazon Cloud Directory é um armazenamento de diretório distribuído. Os dados são distribuídos para vários servidores em diferentes zonas de disponibilidade. Uma solicitação de gravação bem-sucedida atualiza os dados em todos os servidores. Os dados estarão disponíveis eventualmente em todos os servidores, geralmente em um segundo. Para ajudar os usuários do serviço, o Cloud Directory oferece dois níveis de consistência para operações de leitura. Esta seção descreve os diferentes níveis de consistência e a natureza eventualmente consistente do Cloud Directory.
Níveis de isolamento de leitura
Ao ler dados do Cloud Directory, você deve especificar o nível de isolamento no qual deseja ler. Diferentes níveis de isolamento têm compensações entre latência e atualização dos dados.
-
EVENTUAL— o nível de isolamento de snapshot lê qualquer dado que esteja disponível imediatamente.Fornece a latência mais baixa de qualquer nível de isolamento. Também fornece uma visualização potencialmente antiga dos dados no diretório. O isolamento EVENTUAL não fornece consistência de leitura depois da gravação. Isso significa que não há garantia de que você possa ler os dados imediatamente depois de gravá-los.
-
SERIALIZÁVELO nível de isolamento serializável fornece o nível mais alto de consistência oferecido pelo Cloud Directory. As leituras feitas no nível de isolamento SERIALIZABLE garantem que você receba dados de todas as gravações bem-sucedidas. Se foi feita uma alteração nos dados que você solicitou, e essa alteração ainda não estiver disponível, o sistema rejeitará sua solicitação com
RetryableConflictException
. Recomendamos que você tente novamente essas exceções (consulte a seção a seguir). Quando você tenta novamente, as leituras de SERIALIZABLE oferecem consistência de leitura após gravação.
Solicitações de gravação
O Cloud Directory garante que várias solicitações de gravação não atualizem simultaneamente o mesmo objeto ou objetos. Se duas solicitações de gravação forem descobertas operando nos mesmos objetos, uma das operações falhará com uma RetryableConflictException
. Recomendamos que você tente novamente essas exceções (consulte a seção a seguir).
nota
RetryableConflictException
as respostas recebidas durante operações de gravação não podem ser usadas para detectar condições de corrida. Considerando um caso de uso que mostrou precipitar essa situação, não há nenhuma garantia de que uma exceção sempre ocorrerá. Se uma exceção ocorrerá ou não depende da ordem em que cada solicitação será processada internamente.
RetryableConflictExceptions
Ao executar operações de gravação ou operações de leitura com um nível de isolamento SERIALIZABLE após uma gravação no mesmo objeto, o Cloud Directory pode responder com umaRetryableConflictException
. Essa exceção indica que os servidores do Cloud Directory ainda não processaram o conteúdo da gravação anterior. Essas situações são transitórias e são autocorrigidas rapidamente. É importante observar que o RetryableConflictException
não pode ser usado para detectar nenhum tipo de consistência de leitura-após-gravação. Não há nenhuma garantia de que um caso de uso específico causará essa exceção.
Recomendamos que você configure seus clientes do Cloud Directory para tentar novamente aRetryableConflictException
. Essa configuração fornece comportamento livre de erros durante a operação. O código de exemplo a seguir demonstra como essa configuração pode ser feita em 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); } }