AWS SAA-C03/07 - Desacoplamento e Integração2 min
Idempotência e Ordenação
Responda com suas palavras antes de ler o resto da nota.
- Que problema isso resolve?
- Quando usar / quando NÃO usar?
- Qual o principal trade-off (custo, latência, operação)?
- Que sinal no enunciado aponta pra isso?
- Com o que isso é confundido na prova?
Conceito
Sistemas distribuídos entregam mensagens pelo menos uma vez. Isso significa que duplicata não é exceção — é comportamento esperado, e a aplicação precisa lidar.
Onde a duplicata nasce
- SQS Standard entrega at-least-once por design
- Um consumidor lento estoura o visibility timeout e outro worker pega a mesma mensagem
- Retry de rede após um
ackperdido - SNS reentrega quando o subscriber devolve erro
Idempotência — como resolver
Operação idempotente produz o mesmo resultado ao ser executada várias vezes.
| Técnica | Como funciona |
|---|---|
| Tabela de deduplicação | Guarda o ID processado em DynamoDB (com TTL) e ignora repetido |
| Chave natural | Usar um ID de negócio como chave primária: a segunda escrita sobrescreve, não duplica |
| Escrita condicional | ConditionExpression no DynamoDB só grava se ainda não existe |
| Operação naturalmente idempotente | SET status = 'pago' em vez de saldo = saldo - 100 |
Ordenação
| Mecanismo | Garantia |
|---|---|
| SQS FIFO | Ordem total dentro do Message Group ID |
| Kinesis | Ordem dentro do shard (definido pela partition key) |
| SNS FIFO → SQS FIFO | Ordem preservada no fan-out |
| SQS Standard | Nenhuma garantia |
O truque do Message Group ID: mensagens de grupos diferentes são processadas em paralelo, mas dentro de um grupo a ordem é estrita. Usar o ID do cliente como group ID dá ordem por cliente sem serializar a fila inteira.
Deduplicação nativa do FIFO
Janela de 5 minutos, por MessageDeduplicationId explícito ou por hash do corpo. Fora dessa janela, duplicata passa — por isso idempotência na aplicação continua necessária.
Trade-offs
FIFO resolve ordem e duplicata no nível da fila e cobra throughput: 300 msg/s (3.000 com batch). Idempotência na aplicação preserva o throughput ilimitado do Standard e transfere o trabalho pro código.
A prova costuma premiar idempotência no consumidor quando o enunciado quer evitar duplicata sem sacrificar throughput, e FIFO quando a ordem é o requisito explícito.
Sinais de prova
- "Evitar processamento duplicado sem reduzir throughput" → idempotência (tabela de dedup no DynamoDB)
- "Ordem das operações importa" → SQS FIFO
- "Ordem por cliente, paralelismo entre clientes" → FIFO com Message Group ID = ID do cliente
- "Mensagem processada duas vezes" → visibility timeout curto ou consumidor não idempotente
- "Pagamento cobrado em duplicidade" → falta de chave de idempotência
- "Ordem dentro do stream" → partition key do Kinesis
Relacionado
Parte de 07 - MOC Desacoplamento e Integração · Documentação AWS