Fintech Core Engine & Ledger
Core bancário de missão crítica desenvolvido em Go, PostgreSQL e Redis. Projetado para garantir conservação estrita de capital, zero race conditions sob cargas concorrentes extremas, desacoplamento assíncrono via Transactional Outbox Pattern e observabilidade operacional em tempo real.
Destaques de Engenharia
Fluxo de Arquitetura
[Cliente / Gateway de Pagamento]
│
▼ HTTPS (REST + SHA-256 API Key + Idempotency-Key)
[Fintech Core API (Go)]
│
├──► [Redis Spin-Lock com Jitter] (Fila e contenção distribuída)
│
▼ [PostgreSQL Engine - Transação Atômica]
├──► 1. SELECT ... FOR UPDATE (Ordenação léxica dos UUIDs)
├──► 2. Inserção imutável no Ledger particionado (DEBIT + CREDIT)
├──► 3. Atualização atômica do snapshot de saldo O(1)
└──► 4. Gravação do evento na tabela outbox_events
│
▼ Change Data Capture
[Outbox Worker] ──► [Tópicos Assíncronos / Webhooks]• Linguagem & Runtime: Go 1.23+ com pgxpool (PostgreSQL nativo) e cliente Redis v9
• Isolamento Transacional: Lock pessimista léxico em nível SQL somado a Redis Mutex para contenção inicial
• Banco de Dados: PostgreSQL 16 com particionamento declarativo mensal por data (RANGE)
• Observabilidade: Instrumentação oficial do Prometheus coletando latência transacional (p95/p99) e vazão contábil
Implementação em Código
// Ordenação léxica dos UUIDs para prevenir deadlocks cíclicos (AB-BA)
firstID, secondID := fromID, toID
if firstID.String() > secondID.String() {
firstID, secondID = toID, fromID
}
// Bloqueio pessimista sequencial no PostgreSQL
if err := lockAccount(ctx, tx, firstID); err != nil {
return nil, err
}
if err := lockAccount(ctx, tx, secondID); err != nil {
return nil, err
}
// Verificação de saldo, double-entry e snapshot na mesma transação ACID
if currentBalance < amountCents {
return nil, domain.ErrInsufficientFunds
}Desafios Técnicos Resolvidos
Desafio:
Eliminar concorrência destrutiva e saldo negativo quando dezenas de transferências atingem a mesma conta no mesmo milissegundo.
Resolução Implementada:
Estratégia híbrida de controle: Spin-lock adaptativo com jitter no Redis na entrada da requisição e bloqueio léxico FOR UPDATE no banco de dados, comprovado com 100% de consistência em testes de 50 requisições simultâneas.
Desafio:
Degradação de performance em relatórios e auditorias com crescimento exponencial dos lançamentos contábeis.
Resolução Implementada:
Implementação de tabela mãe particionada por intervalo de datas (RANGE mensal) com rotina de manutenção contínua que provisiona automaticamente os próximos 12 meses.
Tem interesse em detalhes da arquitetura ou código deste projeto?
Conversar no WhatsApp