Arquitetura
Diagrama de fluxo
flowchart TB
subgraph client [Cliente]
FE[Front-end lê N QRs]
end
subgraph ingress [Ingressão]
APIGW[API Gateway]
SQS1[SQS Buffer]
end
subgraph processing [Processamento]
L1[Lambda Validar e Armazenar]
end
subgraph storage [Persistência]
DDB[(DynamoDB boletim_urna_registros)]
end
subgraph aggregation [Agregação]
EB[EventBridge Schedule]
L2[Lambda Agregar e Exportar]
end
subgraph delivery [Entrega]
S3[S3 Bucket]
CF[CloudFront CDN]
end
FE -->|conteúdo e posição ex. 1:4| APIGW
APIGW --> SQS1
SQS1 --> L1
L1 --> DDB
EB --> L2
L2 --> DDB
L2 --> S3
S3 --> CF
FE -->|resultados parciais| CF
Componentes
| Componente |
Função |
| API Gateway |
Recebe POST com conteúdo do QR e posição; integra com Lambda de ingestão. |
| SQS (buffer) |
Fila de mensagens; uma mensagem por QR; trigger direto da Lambda Validar e Armazenar. |
| Lambda Ingest |
Valida o body do request e publica uma mensagem SQS por QR. |
| Lambda Validar e Armazenar |
Valida formato e assinatura TSE; grava item em DynamoDB. |
| DynamoDB |
Tabela boletim_urna_registros com boletim_id, posição e conteúdo/metadados do QR. |
| EventBridge Schedule |
Dispara a Lambda de agregação em intervalo fixo (ex.: a cada 5 minutos). |
| Lambda Agregar e Exportar |
Lê a tabela, agrupa por boletim e município, soma votos, gera JSON por cidade e envia ao S3. |
| S3 |
Armazena resultados/{codigo_municipio}.json. |
| CloudFront |
CDN para servir os JSON ao front-end. |
Decisões técnicas
- Sem Step Function: a SQS invoca diretamente a Lambda Validar e Armazenar.
- Agregação por schedule: evita disparar agregação a cada mensagem e reduz concorrência na escrita no S3.
- Um JSON por cidade por execução: escrita atômica para evitar sobrescrita inconsistente.