Skip to content
Latchkey

O Que É o Padrão Saga? Transações Entre Serviços

O padrão saga gerencia uma transação que abrange múltiplos serviços como uma sequência de passos locais, cada um com uma ação compensatória para desfazê-lo em caso de falha.

Você não pode envolver uma transação de banco de dados em torno de vários microsserviços. O padrão saga resolve isso: um processo de negócio se torna uma cadeia de transações locais, e se um passo posterior falha, os passos anteriores são desfeitos executando ações compensatórias. É como sistemas distribuídos obtêm algo como comportamento tudo-ou-nada sem um lock global.

Passos locais mais compensação

Cada serviço faz a própria transação local e então dispara o próximo passo. Se um passo falha no meio do caminho, a saga executa transações compensatórias para os passos já feitos, estornar o pagamento, liberar o estoque reservado, para reverter o processo logicamente.

Dois estilos de coordenação

A coreografia deixa cada serviço reagir a eventos e emitir o próximo, sem coordenador central. A orquestração usa um coordenador que diz a cada serviço o que fazer em seguida. A coreografia é descentralizada; a orquestração é mais fácil de rastrear e de raciocinar sobre.

Por que você precisa dele

  • Nenhum lock distribuído entre serviços é necessário.
  • Cada serviço mantém a posse dos próprios dados.
  • Falhas parciais são tratadas explicitamente via compensação.
  • Funciona naturalmente sobre eventos e message brokers.

Testando os caminhos de falha

O caminho feliz é o caso fácil; o valor de uma saga está no tratamento de falhas. O CI deve testar que injetar uma falha em cada passo aciona corretamente a compensação e deixa o sistema consistente. Isso exige testes de injeção de falhas, não apenas testes do caminho de sucesso.

Faça deploy e versione com cuidado

Uma saga amarra vários serviços por meio de eventos ou comandos. Mudar o contrato de um passo pode deixar sagas em andamento perdidas, então definições de passos retrocompatíveis e ordenação cuidadosa de rollout evitam que sagas de longa duração quebrem no meio do fluxo.

Execuções de teste multi-serviço

Exercitar uma saga de ponta a ponta significa subir vários serviços e um broker no CI. Runners gerenciados aquecidos (como o Latchkey) evitam que essa configuração de integração mais pesada trave o pipeline.

Principais conclusões

  • Uma saga é uma transação multi-serviço feita de passos locais com ações compensatórias.
  • Ela vem em estilos de coreografia (orientado a eventos) e orquestração (coordenador).
  • Seu valor real é o tratamento de falhas, então teste caminhos de compensação com injeção de falhas.

Guias relacionados