System Design: Payment Service
O que acontece quando você clica em "Finalizar Compra" no e-commerce? 💳
Se um sistema de rede social falhar, o usuário simplesmente atualiza a tela e vê outro post. Mas se o sistema de pagamento falhar, você pode cobrar o cliente duas vezes, perder dinheiro em falhas silenciosas de rede, ou criar buracos contábeis que geram passivos jurídicos e regulatórios gigantescos.
Desenhar um sistema de pagamentos de alta confiabilidade em escala global exige três pilares inegociáveis de engenharia de software:
-
Idempotência Estrita**: Rede e gateways vão falhar ou duplicar requisições. O cliente reenviará a compra em caso de timeout. O sistema precisa garantir um mecanismo exatamente-uma-vez (Exactly-Once) usando chaves de idempotência únicas (
idempotency_key) gravadas transacionalmente com o estado inicial da compra, garantindo que ninguém seja cobrado duas vezes. -
Ledger de Dupla Entrada (Double-Entry Ledger) Dinheiro em trânsito não pode sumir. Todo movimento de valor deve ter uma representação contábil rigorosa: a soma de todos os débitos deve ser exatamente igual à soma de todos os créditos. O Ledger é append-only e imutável; erros e estornos são resolvidos criando novos lançamentos de compensação, nunca editando ou deletando registros existentes.
-
Padrão Outbox (Outbox Pattern): Para evitar inconsistência onde você cobra o cliente no gateway externo mas falha ao atualizar o banco de dados interno ou publicar o evento de confirmação no Kafka, usamos a tabela Outbox. A gravação do estado e o agendamento do evento ocorrem na mesma transação atômica do banco SQL local.
Além disso, a conciliação financeira assíncrona diária é essencial para cruzar os dados internos com os relatórios de settlement fornecidos pelos adquirentes e identificar discrepâncias financeiras.
Quer entender a modelagem detalhada das tabelas do Ledger, o fluxo de tokens PCI-DSS e como tratar timeouts desconhecidos de gateways?
Acesse o guia completo de System Design de Pagamentos no blog do Lemon Dev:
https://lemon.dev.br/en/blog/payment-system-design
#SystemDesign #PaymentSystems #Fintech #SoftwareArchitecture #DistributedSystems #BackendDevelopment #PCICompliance