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.