Conceitos
Orquestração vs. coreografia
Intuição
Imagine organizar um jantar em casa com vários convidados ajudando no preparo. Um jeito é você, como anfitrião, dar as instruções: "agora corte a salada", "agora acenda o forno" — um maestro central que sabe a receita inteira e diz a cada um o que fazer e quando. O outro jeito é combinar de antemão que cada pessoa reage ao que a anterior termina: quem corta a salada avisa "terminei" e quem cuida do forno começa ao ouvir isso, sem ninguém dando ordens — cada um só presta atenção nos avisos dos outros. As duas formas produzem o mesmo jantar pronto, mas organizadas de jeitos bem diferentes.
Como funciona
Quando o padrão saga é aplicado em arquiteturas de microsserviços, os "passos" deixam de ser subtransações de um mesmo banco e passam a ser chamadas a serviços independentes, cada um com seu próprio armazenamento — e, como não existe mais um único gerenciador de transações capaz de coordenar um commit distribuído entre eles, alguém precisa decidir explicitamente a ordem dos passos e disparar as compensações quando algo falha. Na orquestração, um coordenador central conhece o fluxo inteiro da saga e dispara cada passo em sequência, chamando diretamente cada serviço e, se um passo falhar, acionando as compensações dos passos já concluídos na ordem inversa — o coordenador concentra visibilidade sobre o estado do processo, mas também concentra acoplamento: ele precisa saber sobre todos os serviços envolvidos. Na coreografia, não existe esse coordenador: cada serviço executa seu passo e emite um evento anunciando o que aconteceu, e o serviço seguinte reage a esse evento para executar seu próprio passo (incluindo, se necessário, reagir a um evento de falha executando sua própria compensação) — a coordenação emerge da soma das reações individuais, sem que nenhum componente único conheça o fluxo inteiro. Em ambos os casos, o que se mantém é a garantia original do conceito de saga: o processo como um todo termina de forma observável concluído por completo ou desfeito por completo, mesmo sem isolamento total durante sua execução — só muda onde mora o conhecimento sobre a sequência de passos e quem aciona as compensações.
Na prática
Orquestração tende a ser preferida quando o fluxo de negócio é complexo ou muda com frequência, porque ter a lógica inteira num só lugar facilita entender, depurar e alterar o processo, ao custo de um serviço orquestrador acoplado a todos os outros. Coreografia tende a ser preferida quando se quer manter os serviços mais desacoplados entre si e o fluxo é relativamente estável, ao custo de ficar mais difícil enxergar "o estado da saga" como um todo, já que ele está espalhado implicitamente entre os handlers de evento de cada serviço.
Use em um desenho
Pratique na escola de System Design os casos que dependem deste conceito.