← AWS Solutions Architect Professional: decisões complexas
12 / 16 · 75 MIN

Consistência, transações e regiões

Escolhe garantias de leitura, escrita e replicação a partir dos invariantes da aplicação.

Começar pelo invariante e pelo caminho de leitura

Antes de selecionar uma base de dados, escreve o que nunca pode acontecer: uma reserva repetida, uma leitura que autoriza com estado antigo ou duas regiões que aceitam a mesma exclusividade. Em DynamoDB, tabelas e LSIs suportam leitura forte, mas GSIs não. Uma consulta GSI pode ainda não refletir uma escrita acabada de confirmar. O desenho precisa de um caminho que satisfaça a necessidade; não basta acrescentar ConsistentRead a um índice que não o suporta. Uma leitura forte também não bloqueia o item contra alterações posteriores. No exercício, dois workers leem saldo 80 e ambos querem reservar 60. Ler o mesmo valor atualizado não arbitra a disputa. A condição relevante deve fazer parte da operação de escrita ou da transação apropriada; a aplicação tem de tratar rejeição e reavaliar o resultado.

Fronteira da transação e repetição do pedido

TransactWriteItems agrupa alterações atómicas na mesma conta e região; BatchWriteItem pode ter sucesso parcial. Não uses duas ações sobre o mesmo item na mesma transação: uma condição sobre o item atualizado pode acompanhar o próprio Update. O token de pedido apoia idempotência durante dez minutos após a conclusão inicial. Um replay de negócio no dia seguinte precisa de uma estratégia que sobreviva a essa janela. No exercício, o registo de processamento e a reserva estão em itens distintos na mesma região. A proposta é criá-los atomicamente com condições adequadas, guardando identidade e resultado durante o horizonte de replay definido. Uma chamada a um processador externo não passa a fazer parte dessa transação. Identifica essa fronteira e prevê confirmação ou reconciliação do resultado externo. Mantém exemplos de timeout antes e depois do commit para evitar repetir cegamente.

Replicação eventual não cria exclusividade global

As global tables atuais distinguem MREC de MRSC. Em MREC, a replicação é assíncrona, conflitos do mesmo item convergem por last writer wins e condições são avaliadas contra a versão local. Dois pedidos em regiões diferentes podem passar uma condição de ausência antes de a escrita remota chegar. Uma leitura forte local não força a chegada de uma alteração feita noutra região. Também não deves apresentar uma transação regional de vários itens como unidade atómica nas réplicas: os itens podem aparecer em momentos diferentes. Para uma exclusividade global, revê o desenho com uma autoridade de escrita ou um mecanismo que satisfaça realmente o invariante, incluindo o failover dessa autoridade. Num ensaio, regista os dois resultados aceites e o estado que converge; um estado final único não apaga efeitos externos produzidos pelas duas aceitações.

Escolher MRSC sem prometer funcionalidades inexistentes

MRSC fornece leituras fortes globais em réplicas quando se pede leitura forte e avalia condições sobre a versão mais recente. A documentação consultada exige três regiões, com três réplicas ou duas e um witness; o witness não serve pedidos de leitura ou escrita da aplicação. As regiões devem pertencer a um conjunto suportado. Verifica também funcionalidades: MRSC não suporta operações transacionais, TTL ou LSIs na documentação atual. Não é um substituto transparente para qualquer desenho MREC. O modo de consistência não pode ser alterado numa global table existente. Um projeto que precisa de mudar deve planear novo desenho, dados, transição e validação, em vez de prometer um simples toggle. A prova de aceitação inclui latência observada, comportamento de falha, garantia do invariante e compatibilidade das operações usadas pela aplicação.

Original MREC thought experiment; not AWS deployment code
Initial: reservation K absent in replica A and replica B
A: conditional create K accepted before replication
B: conditional create K accepted before replication
Later: replicas converge on one item version
Question: did convergence undo either external effect?
Answer: no; application arbitration/reconciliation is required
NA PRÁTICA

Duas regiões MREC aceitam a mesma reserva antes da replicação. A convergência posterior não prova que só ocorreu um efeito no processador externo.

Armadilhas comuns

Tratar leitura forte como lock; usar GSI para frescura garantida; estender transações a serviços externos; assumir atomicidade entre réplicas MREC; prometer TTL ou transações em MRSC.

Tópicos relacionados: Filas, repetição e recuperação

Leva esta ideia contigo

Cada garantia tem um âmbito; demonstra o invariante no âmbito em que o negócio o exige.

Criar conta

Referência: DynamoDB read consistency · SAP-C02

AWS é uma marca comercial da Amazon.com, Inc. ou das suas afiliadas. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por AWS. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.