Distributed Systems Playground
Uma fila de mensagens que você pode quebrar de propósito. Mude o número de consumidores, a taxa de falhas e o visibility timeout e veja o que acontece com cada mensagem.
Simulation ModeRoda inteiramente no seu navegador. Nenhuma requisição à AWS: todos os números desta página são calculados pelo simulador.
Cenários
O que observar: Uma mensagem só sai da fila quando o consumer a apaga (DeleteMessage). Receber não é o mesmo que consumir.
Pronta para iniciar.
Legenda
- Primeira tentativa
- Recebida de novo (número = recebimentos)
- Poison message
- Cópia entregue em duplicidade
- Ainda em processamento com receipt handle expirado
Configuração
Registra cada mensagem processada e ignora as repetidas.
A mesma seed sempre produz a mesma execução.
Métricas do simulador
- Tempo simulado
- 0,0 s
- Enviadas
- 0
- Disponíveis
- 0
- Em processamento
- 0
- Aguardando retry
- 0
- Concluídas
- 0
- Tentativas
- 0
- Falhas
- 0
- Na DLQ
- 0
- Throughput
- 0,0 msg/s
- Tempo médio
- 0,0 s
- Efeitos duplicados
- 0
- Duplicatas ignoradas
- 0
Eventos
Nenhum evento ainda.
Estado de cada mensagem
| Mensagem | Estado | Recebimentos | Efeitos aplicados |
|---|---|---|---|
| M01 | No producer | 0 | 0 |
| M02 | No producer | 0 | 0 |
| M03 | No producer | 0 | 0 |
| M04 | No producer | 0 | 0 |
| M05 | No producer | 0 | 0 |
| M06 | No producer | 0 | 0 |
| M07 | No producer | 0 | 0 |
| M08 | No producer | 0 | 0 |
O que esta simulação mostra
At-least-once
O SQS Standard garante que cada mensagem é entregue pelo menos uma vez, não exatamente uma vez. Duplicatas são raras, mas o consumer precisa tolerá-las.
Ordem não garantida
Na fila Standard a ordem é best-effort. Com vários consumers e retries, a ordem de conclusão se distancia ainda mais da ordem de envio. Se a ordem importa, a opção é uma fila FIFO, com outros limites.
Visibility timeout
Receber esconde a mensagem por um tempo. Se o consumer não a apagar nesse intervalo, por falha, travamento ou lentidão, ela volta a ficar visível e é entregue de novo.
Dead-letter queue
Cada recebimento soma 1 ao receive count. Quando ele passa do maxReceiveCount da redrive policy, o SQS move a mensagem para a DLQ em vez de entregá-la de novo.
Idempotência
Um consumer idempotente produz o mesmo resultado se a mesma mensagem chegar duas vezes. Aqui ele registra o id de cada mensagem processada e ignora repetições.
Concorrência
Mais consumers aumentam o throughput enquanto houver mensagens disponíveis. Também aumentam a disputa por recursos compartilhados e a chance de processar duplicatas ao mesmo tempo.
Simplificações deliberadas
- Não é uma reprodução do escalonamento interno da AWS: tempos, ordem e duplicatas seguem regras simples e uma seed.
- Cada consumer recebe uma mensagem por vez. A Lambda real recebe lotes de até 10.
- A mensagem vai para a DLQ assim que reaparece com o limite atingido. No SQS isso acontece na próxima tentativa de recebimento.
- Cópias duplicadas não são reenviadas se falharem.
- O visibility timeout é fixo: nenhum consumer o estende, e não há backoff entre tentativas.
AWS Live Mode
Existe uma versão real deste experimento: API Gateway, uma Lambda que produz mensagens, uma fila SQS Standard com DLQ e uma Lambda consumer com respostas parciais de lote. Ela roda na minha conta AWS, por isso fica restrita à área administrativa, com limites de mensagens e execuções por dia.
API Gateway (rota autenticada) → Lambda producer → SendMessageBatchFila SQS Standard → event source mapping → Lambda consumerFalha: a mensagem volta com atraso; após 3 recebimentos, vai para a DLQEstado de cada mensagem no DynamoDB, acompanhado por polling
Esta página nunca chama a AWS. O modo real exige login de administrador.