Consistencia Transacional: Monolito vs Microsservicos
Monolito
Seção intitulada “Monolito”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.
Microsservicos
Seção intitulada “Microsservicos”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
Problema central
Seção intitulada “Problema central”Como garantir consistencia em um fluxo como:
- Criar pedido
- Cobrar pagamento
- 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:
- Pedido criado
- Pagamento falhou
- Pedido cancelado como compensacao
Orquestracao vs Coreografia
Seção intitulada “Orquestracao vs Coreografia”Orquestracao
Seção intitulada “Orquestracao”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.
Coreografia
Seção intitulada “Coreografia”flowchart LR Checkout["Checkout"] -- HTTP --> Cart["Cart"] Cart --> Broker["Message Broker (Kafka)"] Broker --> Inventory["Inventory"] & Payment["Payment"] & Order["Order"] Inventory --> Broker Payment --> BrokerNao existe controlador central. Cada servico reage a eventos.
Vantagens: baixo acoplamento, alta escalabilidade, resiliencia maior.
Desvantagens: debug e observabilidade mais dificeis.
Comparacao direta
Seção intitulada “Comparacao direta”| Aspecto | Orquestracao | Coreografia |
|---|---|---|
| Controle | Centralizado | Distribuido |
| Acoplamento | Medio | Baixo |
| Observabilidade | Mais facil | Mais dificil |
| Escalabilidade | Menor | Maior |
| Complexidade mental | Baixa | Alta |
Insight principal
Seção intitulada “Insight principal”Consistencia em microsservicos nao e sobre evitar falhas. E sobre saber lidar com elas.
Boas praticas
Seção intitulada “Boas praticas”- 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