Este projeto é um laboratório técnico pessoal criado com o objetivo de entender melhor os desafios técnicos do setor financeiro e praticar tecnologias e padrões arquiteturais amplamente utilizados em fintechs e bancos digitais.
O foco não é apenas “fazer funcionar”, mas entender por que as coisas são feitas de determinada forma em sistemas que lidam com dinheiro, consistência, auditoria e escalabilidade.
⚠️ Importante:
Este projeto utiliza microserviços e arquitetura orientada a eventos (Event-Driven Architecture) de forma propositalmente mais complexa do que o necessário para um projeto simples.
Isso foi uma decisão consciente de over engineering com fins educacionais.
- Compreender desafios técnicos do domínio financeiro
- Praticar arquitetura de microserviços
- Entender event-driven architecture com Kafka
- Trabalhar conceitos como:
- consistência eventual
- idempotência
- rastreabilidade de eventos
- race conditions
- separação de responsabilidades
- Criar uma base sólida para evoluções futuras (ledger, extratos, auditoria, etc.)
A arquitetura segue o padrão:
- REST para comandos síncronos (request/response)
- Kafka para propagação de eventos entre serviços
- Bancos isolados por serviço
- Comunicação desacoplada entre domínios
Responsável por:
- Gerenciamento de contas (Account)
- Manutenção do saldo atual
- Status da conta (ativa, bloqueada, suspensa, etc.)
- Operações de leitura e consulta
O saldo é atualizado exclusivamente a partir de eventos de transação.
Responsável por:
- Criação de transações financeiras
- Registro de débitos e créditos
- Validação de regras básicas do domínio
- Publicação de eventos no Kafka (
TransactionCreated, etc.)
Ele apenas registra fatos financeiros e emite eventos.
Responsável por:
- Comunicação assíncrona entre serviços
- Propagação de eventos de domínio
- Base para consistência eventual
- Possibilitar replay, auditoria e novos consumidores
- Java 17+
- Spring Boot
- Spring Data JPA
- Spring Kafka
- Apache Kafka
- PostgreSQL
- Docker & Docker Compose
- Maven
- Docker
- Docker Compose
- Java 17+
- Maven
Na raiz do projeto:
docker-compose up --build -dIsso irá subir:
-
Zookeeper
-
Kafka
-
Accouting Service
-
Transaction Service
-
Kafka UI
-
PostgreSQL (um banco por serviço)
A interface do Kafka UI ficará disponível em:
A Swagger Api interface ficará desponível em:
http://localhost:8081/swagger-ui/index.html (accounting-service)
http://localhost:8082/swagger-ui/index.html (transaction-service)
- Criar testes unitários nos serviços
- Criar testes de integração (Kafka + banco)
- Definir e discutir Idempotency Key no transaction-service
- Implementar Idempotency Key no transaction-service
- Implementar Outbox Pattern para garantir consistência entre banco e Kafka
- Implementar retry e DLQ para consumidores Kafka
- Criar Accounting Service
- Criar Transaction Service
- Modelar entidades principais (
Account,Transaction) - Utilizar
BigDecimalpara valores monetários - Criar tipos especiais:
- CPF
- CNPJ
- Telefone
- Criar um Value Object
Money:- valor
- moeda (BRL, USD, etc.)
- regras de precisão
- Subir Kafka local com Docker Compose
- Configurar Spring Kafka nos serviços
- Criar tópicos Kafka iniciais
- Publicar eventos a partir do transaction-service
- Consumir eventos no accounting-service
- Versionar eventos de domínio
- Implementar idempotência no consumer
- Criar Statement Service (extratos) utilizando MongoDB
- Criar Ledger Service (registro contábil imutável) usando Go
- Criar Report Service (relatórios financeiros e métricas)
- Criar Notification Service (eventos e alertas)
- Criar infraestrutura local com Docker Compose
- Migrar infraestrutura para Kubernetes local (Kind)
- Criar manifests Kubernetes (Deployment, Service, ConfigMap)
- Explorar observabilidade (logs, métricas, tracing)
- Criar um Blockchain Adapter
- Estudar integração entre eventos financeiros e blockchain
- Avaliar possíveis casos de uso (auditoria, imutabilidade, provas)
Este projeto não busca simplicidade, e sim aprendizado profundo. Muitas decisões foram tomadas propositalmente para simular cenários reais do setor financeiro, mesmo que isso represente mais complexidade do que o necessário para um projeto simples.
O objetivo é sair daqui entendendo como sistemas financeiros realmente funcionam por dentro.