← AWS Solutions Architect Associate: decisões de arquitetura
14 / 23 · 60 MIN

DynamoDB: consistência, capacidade e concorrência

Calcula consumo e escolhe acessos que respeitam atualização, validade e alterações concorrentes.

Arredondar a operação certa

Para GetItem, uma leitura forte de um item até 4 KiB consome uma unidade de leitura; a eventual consome metade. Um item de 6 KiB ocupa dois blocos, logo duas unidades fortes ou uma eventual. Em BatchGetItem, arredonda cada item separadamente: itens de 1 KiB e 5 KiB dão três unidades fortes. Não transfiras esta regra sem análise para Query, que agrega tamanhos antes do arredondamento. Identifica operação, tamanho e consistência antes de calcular; uma taxa de pedidos isolada é insuficiente.

Separar consumo, resposta e preço

Uma ProjectionExpression que devolve 100 bytes de um item de 9 KiB não reduz o consumo GetItem para 100 bytes: a leitura forte continua a usar três unidades. Num UpdateItem não transacional, considera o maior tamanho antes ou depois e arredonda para blocos de 1 KiB; de 2,2 para 2,6 KiB são três unidades de escrita, excluindo índices neste exemplo. Os cálculos ensinam consumo. Para estimar custo monetário, ainda precisas de modo de capacidade, região, índices e outros serviços utilizados.

Escolher consistência no caminho de acesso

Tabelas e local secondary indexes suportam leituras fortes; global secondary indexes não. Pedir ConsistentRead num GSI não converte o índice num destino forte. Se a confirmação exige atualização imediata, revê o acesso à tabela ou um LSI adequado, em vez de acrescentar uma opção inválida. Estes exercícios usam uma região. Não generalizes que todas as global tables têm sempre consistência eventual: existem modos de consistência distintos e requisitos próprios. No desenho, escreve o requisito ao lado de cada acesso, não apenas no título da base de dados.

Tornar a condição parte da alteração

Dois workers podem ler saldo 100, ambos decidir reservar 80 e só depois escrever. Uma leitura forte não bloqueia a alteração do outro worker entre essas operações. No exercício de um único item, um UpdateItem com condição saldo>=80 verifica e altera atomicamente; após a primeira reserva ficam 20 e a segunda condição falha. Trata esse resultado na aplicação. Isto não coordena automaticamente uma chamada externa de pagamento. Identidade estável, idempotência no destino e reconciliação continuam relevantes quando o efeito atravessa sistemas.

Não usar limpeza como autorização

DynamoDB TTL elimina itens de forma assíncrona. Se um token expira às 12:00, a sua presença às 12:01 não o torna válido. A aplicação deve aplicar a regra de expiração ao autorizar, enquanto TTL trata a limpeza. De forma semelhante, DAX não elimina a necessidade de escolher consistência: leituras fortes passam para DynamoDB e não são servidas nem guardadas pela cache DAX. Uma solução de cache precisa de corresponder à semântica das leituras, não apenas ao desejo de reduzir latência.

Distribuir chaves e preparar operação

Uma partition key igual a hoje para todas as escritas pode concentrar tráfego mesmo quando a capacidade total parece suficiente. Começa pelos padrões de acesso e distribuição de chaves. Sharding pode repartir carga, mas também altera consultas, agregação e manutenção; não é uma escolha gratuita. No caso de 120 GetItem por segundo sobre 6 KiB, metade fortes e metade eventuais, o consumo é 60×2+60×1=180 unidades por segundo. Esse total ainda não demonstra distribuição adequada, tolerância a picos ou latência aceitável.

NA PRÁTICA

Dois workers tentam reservar 80 de um saldo 100; uma alteração condicional bem-sucedida deixa 20 e impede a segunda reserva.

Armadilhas comuns

Usar GSI como leitura forte, TTL como revogação imediata ou leitura seguida de escrita como operação atómica.

Tópicos relacionados: Idempotência · Modelação de dados

Leva esta ideia contigo

Consistência, atomicidade, capacidade e validade são requisitos diferentes e precisam de decisões explícitas.

Criar conta

Referência: DynamoDB read and write operations · SAA-C03

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.