VapVup👤
← Voltar
🎭

Orquestração vs Coreografia

Dois jeitos de coordenar serviços em sistemas distribuídos: com um maestro no comando ou com cada serviço dançando no ritmo dos eventos.

🎵Analogia

Maestro vs Dança de salão

Na orquestração, existe um maestro que diz a cada músico quando tocar — ele controla tudo. Na coreografia, é como uma dança de salão: cada par ouve a música e segue o ritmo por conta própria, sem ninguém dizendo o que fazer. A coordenação emerge naturalmente.

🎼Conceito

Orquestração: coordenação centralizada

Um serviço central (orquestrador) coordena todo o fluxo, chamando cada serviço na ordem certa. É mais fácil de entender e debugar, mas o orquestrador vira um ponto único de falha e pode virar gargalo.

💃Conceito

Coreografia: coordenação por eventos

Cada serviço publica eventos e reage aos eventos dos outros. Não existe um controlador central. É mais resiliente e desacoplado, mas o fluxo fica espalhado e pode ser difícil de rastrear.

🔧Exemplo

Fluxo de pedido com orquestração

O orquestrador chama cada etapa em sequência:

// Orquestrador de Pedido
async function processarPedido(pedido) {
  await servicoPagamento.cobrar(pedido);
  await servicoEstoque.reservar(pedido.itens);
  await servicoEntrega.agendar(pedido.endereco);
  await servicoNotificacao.enviarConfirmacao(pedido.cliente);
}
🔧Exemplo

Fluxo de pedido com coreografia

Cada serviço reage a eventos independentemente:

// Serviço de Pagamento
eventBus.on('PedidoCriado', async (pedido) => {
  await cobrar(pedido);
  eventBus.emit('PagamentoConfirmado', pedido);
});

// Serviço de Estoque
eventBus.on('PagamentoConfirmado', async (pedido) => {
  await reservar(pedido.itens);
  eventBus.emit('EstoqueReservado', pedido);
});

// Serviço de Entrega
eventBus.on('EstoqueReservado', async (pedido) => {
  await agendar(pedido.endereco);
});
🔄Conceito

Sagas: compensando falhas

Em ambos os modelos, usamos Sagas para lidar com falhas. Se uma etapa falha, executamos ações compensatórias para desfazer as anteriores — como cancelar a cobrança se o estoque não tiver o produto.