Sobre mimMeus ProjetosAgente DicoMinhas MúsicasLeituras
PayFlow – Estudo de caso

PayFlow

Um sistema de transferências financeiras construído com três microsserviços em Go que se comunicam exclusivamente por mensageria assíncrona.

  • Go
  • PostgreSQL
  • RabbitMQ
  • Docker

Desafio

Coordenar uma transferência financeira entre serviços independentes sem depender de banco compartilhado ou acoplamento síncrono.

Abordagem

Modelar os limites de usuário, conta e transferência como serviços Go conectados por RabbitMQ, com idempotência, compensação Saga coreografada, circuit breaker e tracing distribuído.

Resultado

Um fluxo de transferência tolerante a falhas cujas decisões de consistência podem ser inspecionadas por traces do OpenTelemetry.

Arquitetura

  1. apenas mensagens assíncronas

Propriedades do design

Toque em uma parte do diagrama para ver a fonte.

Decisões e trade-offs

  1. Uma Saga coreografada, sem coordenador central

    Cada serviço reage a eventos, o que é mais simples do que manter um orquestrador separado.

    CustoO serviço de transferência precisa guardar o estado de cada transferência em andamento.

  2. O Transfer nunca lê o banco do Account; tudo passa pelo RabbitMQ

    O serviço de contas é o dono dos dados de saldo.

    CustoO Transfer precisa de um timeout para perceber uma resposta que não chegou e compensar.

  3. A referência da transferência é a chave de idempotência

    Um consumer que recebe a mesma mensagem duas vezes, depois de uma reconexão ou de um retry, produz o mesmo resultado. Os estornos usam a mesma referência com um sufixo de refund.

  4. Os saldos são guardados em centavos, como int64

    Para evitar erros de ponto flutuante com dinheiro.

ConcluídoInternet