Para os devs: Muitos falando que o app da Caixa travou de novo na Mega da Virada. Fila virtual de 50 minutos, apostas "em processamento" mesmo após pagamento, sorteio adiado para 2026. Pico de 120 mil transações por segundo. Prêmio de R$ 1 bilhão.
O problema não é banco de dados nem falta de servidor. É arquitetura síncrona tentando lidar com pico de demanda.
A SOLUCAO: PROCESSAMENTO ASSINCRONO
App/Web -> Nginx Lua -> SQS -> Workers -> Backend -> Banco
A chave é DESACOPLAR a entrada do processamento.
CAMADA DE INGESTAO
Container Nginx com Lua (OpenResty) na frente:
- Recebe a requisição
- Valida payload básico (JSON válido, campos obrigatórios)
- Gera ticket temporário
- Envia para fila SQS
- Retorna IMEDIATAMENTE
Usuário não espera processamento. Recebe "sua aposta está sendo processada" em menos de 100ms. Sem fila de espera.
AUTO-SCALING COM SPOT (AWS)
ECS com instâncias Spot (até 90% mais baratas):
- Monitora tamanho da fila SQS
- Escala workers automaticamente
- Fila grande? Sobe containers
- Fila vazia? Desce para mínimo
Custo fora do pico: praticamente zero.
BACKEND DE CONFIRMACAO
Workers consomem a fila e processam as apostas no ritmo sustentável do banco. Provavelmente a Caixa já tem uma API que as 13 mil lotéricas usam - se for o caso, os workers poderiam usar essa mesma API. Se não, qualquer backend que grave no banco resolve.
O ponto é: o backend nunca recebe tráfego direto do usuário. A fila absorve o pico.
BOLOES (máx 100 cotas)
Bolão é só um agrupador com ID único. Os jogos são vinculados ao bolão, e cada participação registra quantas cotas o usuário comprou.
Lógica no worker:
1. Usuário quer entrar no bolão X
2. Worker verifica se ainda há cotas disponíveis
3. Tem espaço? Registra participação
4. Lotou? Cria novo bolão com mesmos números
5. Notifica usuário
Simples. Processado assincronamente como todo o resto.
POR QUE ASSINCRONO ESCALA
Arquitetura síncrona: cada usuário segura uma conexão esperando resposta. 120k usuários simultâneos = 120k conexões abertas competindo por recursos.
Arquitetura assíncrona: requisição entra, vai pra fila, conexão fecha. O sistema processa 1k, 10k, 100k por minuto - no ritmo que aguenta. A fila é o buffer.
SQS aguenta milhões de mensagens. Nginx aguenta centenas de milhares de requests por segundo. O banco processa no ritmo dele. Ninguém espera.
NUMEROS REAIS - MEGA DA VIRADA 2025
Prêmio: R$ 1,09 bilhão
Arrecadação: aproximadamente R$ 2,5 bilhões
Volume: 500-600 milhões de apostas equivalentes
Pico: 120 mil transações por segundo
Resultado: sistema travou, sorteio adiado
CUSTO ESTIMADO
Operação normal (11 meses): R$ 1.000-2.500/mês
Pico Mega da Virada: R$ 10.000-25.000
A arrecadação foi de R$ 2,5 bilhões. Infraestrutura representa menos de 0,001%.
EXPERIENCIA DO USUARIO
Antes:
- "Aguarde na fila... 50 minutos"
- Aposta travada "em processamento"
- Sorteio adiado
Depois:
- "Aposta recebida! Ticket: ABC123"
- Push: "Aposta confirmada às 14:32"
- Consulta status em tempo real
Stack possível: Nginx/OpenResty, Lua, SQS, ECS Spot, MySQL
Processamento assíncrono é a solução para picos de demanda. Tecnologia madura, barata, escalável.
Ano que vem vai ser a mesma coisa?