Sistema financeiro distribuído na stack AWS Serverless usando LocalStack e .NET
Sobre o projeto · Arquitetura · Stack · Roadmap · Como rodar
Este repositório documenta a jornada de construção de um sistema financeiro distribuído usando práticas e padrões de arquitetura utilizados por corretoras reais. O objetivo é dominar a stack AWS Serverless através de implementação prática, simulando cenários reais de:
- Processamento assíncrono de ordens de compra/venda
- Alta disponibilidade e recuperação de desastres
- Compliance e auditoria (requisitos CVM/reguladores)
- Streaming de dados em tempo real (cotações da bolsa)
- Segurança bancária (criptografia, secrets, IAM)
- Observabilidade completa (logs, métricas, traces)
LocalStack permite simular todos os serviços AWS localmente, sem custos e com iteração rápida.
Este é um projeto evolutivo dividido em fases incrementais. Cada fase adiciona complexidade e simula novos desafios reais de produção. O código não é descartável - cada melhoria se soma à anterior, construindo um sistema progressivamente mais robusto.
O repositório inclui uma API em .NET para simular o backend financeiro, integrando com DynamoDB e outros serviços AWS. O foco principal segue sendo a arquitetura serverless e o uso do LocalStack.
| Camada | Tecnologia |
|---|---|
| Backend | .NET 9 (Brokerage.Api) |
| Compute | AWS Lambda |
| Mensageria | SQS + SNS (fan-out, DLQ) |
| Orquestração | AWS Step Functions (padrão Saga) |
| Banco de dados | DynamoDB |
| Storage | S3 |
| IaC | Terraform |
| Ambiente local | LocalStack + Docker Compose |
Status de cada item: [x] concluído · [ ] planejado
Foco: Fazer o fluxo funcionar ponta a ponta
- Configuração Docker/LocalStack
- IaC com Shell Script
- Fluxo Assíncrono Simples (Lambda → SQS → Lambda)
- Persistência (DynamoDB/S3)
Foco: Em corretoras, perder uma mensagem = perder dinheiro do cliente
- Dead Letter Queue (DLQ): Se o worker falhar 3x (ex: erro de validação), mover para uma fila de "Rejeitados" para análise manual
- Idempotência no DynamoDB: Usar
ConditionExpressionspara garantir que a ordem ORD-123 não seja debitada duas vezes do saldo - Retry Policies: Configurar "Exponential Backoff" na SQS (tentar de novo em 2s, depois 4s, depois 8s...)
Foco: Uma ordem executada dispara várias ações simultâneas
- SNS (Simple Notification Service): Criar um tópico
OrderEvents - Padrão Fan-out: Quando o Worker confirmar a compra:
- Publicar mensagem no SNS
- SNS entrega para uma SQS de "Notificações" (simulada)
- SNS entrega para uma SQS de "Auditoria" (Compliance)
- SNS entrega para uma SQS de "Relatórios" (BackOffice)
- Lambda de Notificação: Consumir fila e simular envio de email/SMS ao cliente
Foco: Compra de ações não é só um passo, é um fluxo de estados
- AWS Step Functions: Substituir a lógica simples do Worker por uma Máquina de Estados:
- Validar Saldo → Se insuficiente, rejeitar
- Bloquear Saldo → Debitar do saldo disponível
- Executar Ordem → Chamar API simulada da B3
- Confirmar Transação → Gravar no DynamoDB
- Rollback: Se falhar no passo 3, devolver o dinheiro do passo 2
- Padrão Saga: Implementar compensação automática em caso de falha
- Instale o .NET 9 SDK
- Execute o script de desenvolvimento que automatiza o LocalStack, aplica o Terraform (se necessário) e inicia a API:
./dev/start.shO script realiza automaticamente:
- Sobe o LocalStack via Docker
- Aplica os recursos do Terraform (se ainda não existirem)
- Inicia a aplicação
Brokerage.Apicomdotnet watch run
A API deverá ficar disponível em http://localhost:5032 (ou na porta mostrada pelo dotnet).
Nota: Se preferir executar manualmente, você pode subir o LocalStack, aplicar o Terraform e rodar
cd src/Brokerage.Api && dotnet run.
- dev: scripts de desenvolvimento e helpers (ex:
dev/start.sh) - infra: definições de infra local com
docker-compose.ymle a pastaterraformcom os recursos (SQS, SNS, DynamoDB, S3, etc) - src: código-fonte .NET