Pular para o conteúdo

Consistencia Transacional: Monolito vs Microsservicos

No monolito, consistencia e simples porque existe um unico banco de dados e transacoes ACID resolvem boa parte do problema.

Caracteristicas:

  • Atomicidade
  • Consistencia forte
  • Rollback automatico

Exemplo: criar pedido e debitar saldo na mesma transacao.

Cada servico tem seu proprio banco e sua propria responsabilidade. O resultado e que nao existe transacao ACID global.

Voce entra no mundo de:

  • Consistencia eventual
  • Sistemas distribuidos
  • Falhas parciais

Como garantir consistencia em um fluxo como:

  1. Criar pedido
  2. Cobrar pagamento
  3. Atualizar estoque

Se cada passo esta em um servico diferente?

Uma saga e uma sequencia de transacoes locais:

  • Cada servico executa sua parte
  • Em caso de erro, executa acoes compensatorias

Exemplo:

  1. Pedido criado
  2. Pagamento falhou
  3. Pedido cancelado como compensacao
flowchart LR
Orchestrator["Orchestrator (checkout)"]
Orchestrator --> Cart[Cart]
Orchestrator --> Inventory[Inventory]
Orchestrator --> Payment[Payment]
Orchestrator --> Order[Order]

Existe um orquestrador central que controla o fluxo.

Vantagens: fluxo explicito, mais facil de depurar, controle total.

Desvantagens: ponto unico de falha e maior acoplamento.

flowchart LR
Checkout["Checkout"] -- HTTP --> Cart["Cart"]
Cart --> Broker["Message Broker (Kafka)"]
Broker --> Inventory["Inventory"] & Payment["Payment"] & Order["Order"]
Inventory --> Broker
Payment --> Broker

Nao existe controlador central. Cada servico reage a eventos.

Vantagens: baixo acoplamento, alta escalabilidade, resiliencia maior.

Desvantagens: debug e observabilidade mais dificeis.

AspectoOrquestracaoCoreografia
ControleCentralizadoDistribuido
AcoplamentoMedioBaixo
ObservabilidadeMais facilMais dificil
EscalabilidadeMenorMaior
Complexidade mentalBaixaAlta

Consistencia em microsservicos nao e sobre evitar falhas. E sobre saber lidar com elas.

  • Idempotencia
  • Retries com backoff
  • Dead letter queues
  • Observabilidade
  • Versionamento de eventos
  • Monolito: simples e consistente
  • Microsservicos: distribuidos e sujeitos a falhas parciais
  • Sagas: forma comum de coordenar consistencia
  • Orquestracao: controle central
  • Coreografia: eventos distribuidos

Voltar ao indice