```
Orquestração
Orquestração em Ação: Gerenciamento de Rotas Não Tão Felizes em Sistemas de Software Modernos
Em um mundo ideal, a arquitetura de software seria simples se existissem apenas rotas felizes, mas as aplicações do mundo real são complexas. As arquiteturas modernas têm muitas peças móveis, rotas e serviços que interagem entre si. Além disso, devem lidar com diferentes condições e erros.
Uma forma eficaz de gerenciar essas complexidades é através da orquestração.
O Que é Orquestração?
A orquestração é um padrão utilizado para coordenar a execução de serviços distribuídos para completar um processo de negócios. É tipicamente usada quando vários serviços independentes devem trabalhar juntos para completar uma tarefa. Alguns os chamam de transações orquestradas.
Por Que Precisamos de Orquestração?
Nos sistemas de software modernos, especialmente aqueles construídos sobre arquiteturas de microsserviços, os fluxos de trabalho frequentemente envolvem múltiplos serviços que devem trabalhar juntos. Cada serviço pode ter sua própria lógica de dados e negócios, e para completar um fluxo de trabalho, o sistema precisa coordenar as interações entre esses serviços.
Sem um mecanismo central para gerenciar essas interações, a complexidade e o potencial de erros aumentam significativamente. A orquestração aborda esses desafios proporcionando um mecanismo de controle centralizado que:
- Gerencia o fluxo de trabalho
- Garante que cada serviço seja chamado na ordem correta
- Lida com os erros de maneira adequada
Esse controle centralizado facilita a gestão de fluxos de trabalho complexos, o manuseio de erros e a garantia de consistência entre os serviços.
Características Chave da Orquestração
Controle Centralizado
A orquestração fornece um ponto único de controle para todas as decisões do fluxo de trabalho. Essa entidade central é o Orquestrador, que gerencia a sequência de invocações dos serviços e controla a lógica para recuperação de erros, tentativas novamente e gestão de estados.
Interação de Serviços
O orquestrador interage com muitos serviços, chamando-os em uma ordem específica e gerenciando o fluxo de dados entre eles. Essa interação pode ser síncrona (esperando uma resposta) ou assíncrona (continuando sem esperar uma resposta).
Gestão de Estados
O orquestrador mantém o estado do fluxo de trabalho, rastreando quais passos foram completados, seu estado atual e o que precisa ser feito a seguir. Esta gestão de estados é crucial para gerenciar fluxos de trabalho complexos e garantir a consistência.
Extensibilidade
Você pode estender os fluxos de trabalho orquestrados adicionando ou modificando novos serviços e atualizando o orquestrador central para acomodar as mudanças sem interrupção significativa do sistema.
Manuseio de Erros e Compensação
A orquestração permite uma lógica sofisticada de manuseio de erros e compensação. Se algo der errado, o orquestrador pode executar novas tentativas, usar fluxos de trabalho alternativos para lidar com a falha ou reverter operações. Este é um dos pontos fortes da orquestração no design de sistemas.
Gerenciamento de Rotas com Orquestração: Um Exemplo Prático
Neste exemplo, exploramos como a orquestração pode gerenciar o fluxo de trabalho de um sistema de comércio eletrônico que envolve muitos serviços.
Para este exemplo, nos concentraremos em:
- Pedidos
- Envio
- Notificações
Rota Feliz
1. Cliente Faz um Pedido: O processo começa quando o cliente envia uma solicitação de "Realizar Pedido" ao Orquestrador de Pedidos.
2. Criação de Pedido: O Orquestrador de Pedidos recebe a solicitação e a reenvia ao Serviço de Pedidos para criar o pedido. O Serviço de Pedidos processa a solicitação e cria um novo registro de pedido em seu banco de dados.
3. Solicitação de Envio: Uma vez que o Serviço de Pedidos confirma a criação do pedido, o orquestrador chama de maneira assíncrona o Serviço de Envios para iniciar o processo de envio. Isso é feito porque o envio do pedido leva tempo e não precisa bloquear o fluxo de trabalho.
4. Pedido Enviado: O Serviço de Envios processa a solicitação de envio. Depois que o pedido é enviado, notifica o orquestrador sobre o envio bem-sucedido.
5. Atualização do Estado do Pedido: Ao receber a confirmação de envio, o orquestrador atualiza o estado do pedido para "Enviado" no Serviço de Pedidos.
6. Notificação: Finalmente, o orquestrador chama o Serviço de Notificações para enviar um e-mail de sucesso informando ao cliente que seu pedido foi enviado.
Rota Não Tão Feliz (Fluxo Alternativo)
1. Cliente Faz um Pedido: O cliente envia uma solicitação de "Realizar Pedido" ao Orquestrador de Pedidos.
2. Criação de Pedido: O Orquestrador de Pedidos reenvia a solicitação ao Serviço de Pedidos, que cria o pedido.
3. Solicitação de Envio: O orquestrador chama de maneira assíncrona o Serviço de Envios para iniciar o processo de envio.
4. Notificação de Pedido Pendente: O Serviço de Envios descobre que não há estoque suficiente para cumprir o pedido e notifica o orquestrador sobre o estado de pedido pendente.
5. Atualização do Estado do Pedido: O orquestrador atualiza o estado do pedido para "Pendente" no Serviço de Pedidos para refletir o problema.
6. Notificação: O orquestrador chama o Serviço de Notificações para enviar uma notificação de pedido pendente ao cliente, informando-o sobre o problema com seu pedido.
Rota Falhada (Transações Compensatórias)
Quando ocorre um erro durante uma transação, pode ser necessário desfazer os passos completados previamente para manter a consistência do sistema. A isso chamamos de transações compensatórias. Por exemplo, em sistemas sem suporte para pedidos pendentes, isso se veria assim:
1. Cliente Faz um Pedido: O cliente envia uma solicitação de "Realizar Pedido" ao Orquestrador de Pedidos.
2. Criação de Pedido: O orquestrador chama o Serviço de Pedidos para criar o pedido.
3. Solicitação de Envio: O orquestrador chama o Serviço de Envios para processar o envio.
4. Problema de Estoque: O Serviço de Envios detecta estoque insuficiente para cumprir o pedido e notifica o orquestrador.
5. Transações Compensatórias Iniciadas:
- Cancelar Pedido: O orquestrador chama o Serviço de Pedidos para cancelar o pedido.
- Reverter Pagamento: Se o pagamento foi processado, o orquestrador pode precisar enviar uma mensagem ao Serviço de Pagamentos para reembolsar o valor ao cliente.
- Atualização do Estado do Pedido: O orquestrador atualiza o estado do pedido para "Cancelado" no Serviço de Pedidos.
6. Notificação: O orquestrador envia uma notificação de cancelamento através do Serviço de Notificações.
Nem Todas as Operações são Síncronas
Como mencionado, essa interação pode ser assíncrona. Enquanto o conceito de orquestração sugere um controlador centralizado e passos definidos, é importante notar que nem todos os orquestradores operam de maneira síncrona. A orquestração impulsionada por eventos é uma arquitetura que você pode usar para implementar a Orquestração de Microsserviços de uma maneira totalmente assíncrona.
O orquestrador ainda é responsável pela lógica do fluxo de trabalho e das falhas em ambos os casos. O que muda é como o orquestrador se comunica com os microsserviços descendentes.
Benefícios dos Fluxos de Trabalho Impulsionados por Eventos
- Você pode usar a mesma funcionalidade de monitoramento e escalabilidade para o orquestrador que para outros microsserviços impulsionados por eventos.
- Os eventos podem ser consumidos por outros serviços, incluindo aqueles fora da orquestração.
- O orquestrador e os serviços dependentes estão isolados de falhas intermitentes entre si.
- Têm um mecanismo de tentativa embutido para falhas, já que os eventos podem permanecer no broker para tentativas novamente.
O orquestrador pode continuar processando outras tarefas enquanto espera as respostas dos serviços. Esta abordagem é particularmente valiosa em sistemas distribuídos onde as latências dos serviços podem variar e as cargas de trabalho podem ser imprevisíveis. O orquestrador tem a responsabilidade de materializar e manter o estado dos eventos.
Nesse caso, o evento 123 (uma representação de um pedido, por exemplo) foi processado com sucesso, enquanto os IDs de eventos 124 e 125 estão em diferentes estágios do fluxo de trabalho. O orquestrador pode tomar decisões baseadas nesses resultados e selecionar o próximo passo conforme a lógica do fluxo de trabalho. Uma vez que os eventos são processados, o orquestrador também pode pegar os dados necessários dos resultados dos serviços A, B e C e compor o resultado final.
Supondo que as operações nos serviços A, B e C sejam independentes entre si, você pode mudar o fluxo de trabalho modificando a ordem em que envia os eventos. Além disso, observe que haverá muitas oportunidades para combinar chamadas diretas e fluxos impulsionados por eventos dentro do mesmo orquestrador, e essa combinação será seu ponto ideal.
Benefícios e Desvantagens da Orquestração
Benefícios da Orquestração
- Centralização: O orquestrador atua como uma entidade centralizada onde todos os comportamentos, rotas e lógica de manuseio de erros são implementados. Esta centralização simplifica a gestão dos fluxos de trabalho ao proporcionar um único lugar para gerenciar todas as interações e decisões.
- Resiliência: O orquestrador pode incorporar lógica de tentativa novamente para lidar com quedas temporárias de serviços. Se um serviço não estiver disponível momentaneamente, o orquestrador pode tentar novamente a solicitação após um intervalo especificado, melhorando a resiliência e confiabilidade do sistema. Este mecanismo de tentativa novamente permite que o sistema degrade graciosamente em vez de falhar completamente, melhorando a experiência do usuário durante falhas transitórias.
- Gestão de Estados: O orquestrador mantém o estado do fluxo de trabalho, o que facilita a consulta do estado atual de um processo em andamento. Esta gestão de estados é crítica para monitoramento, depuração e compreensão do progresso do fluxo de trabalho.
Desvantagens da Orquestração
- Gargalo: Como toda a comunicação deve passar pelo orquestrador, este pode se tornar um gargalo, especialmente em cenários de alto desempenho.
- Sobrecarga de Desempenho: A camada adicional de orquestração introduz certa sobrecarga de desempenho devido à comunicação e processamento adicionais necessários. Isso pode impactar a latência e o desempenho do sistema.
- Ponto Único de Falha: O orquestrador é um componente crítico do fluxo de trabalho. Se falhar, interromperá todo o fluxo de trabalho, tornando-se um ponto único de falha. No entanto, você pode resolver isso com estratégias de redundância, como implantar múltiplas instâncias do orquestrador e usar balanceamento de carga para distribuir a carga.
Conclusões Chave
- Gestão Centralizada: A orquestração gerencia os fluxos de trabalho de um único lugar, o que facilita o manuseio de diferentes rotas e erros.
- Resiliência Melhorada: Os orquestradores podem tentar novamente tarefas se um serviço falhar temporariamente, melhorando a confiabilidade do sistema.
- Visibilidade do Progresso: Os orquestradores mantêm o rastreamento do estado do fluxo de trabalho, o que facilita a verificação do progresso e a depuração de problemas.
- Escalabilidade Assíncrona: A orquestração assíncrona pode gerenciar múltiplas tarefas ao mesmo tempo sem esperar por respostas, tornando o sistema mais escalável. As tarefas podem ser executadas em paralelo, acelerando o processo geral.
- Possível Gargalo: O orquestrador pode desacelerar o sistema se estiver sobrecarregado.
- Redundância Necessária: Se o orquestrador falhar, pode parar todo o fluxo de trabalho. A redundância é necessária para evitar isso.
Em termos simples, a orquestração coloca algo no comando: os Orquestradores, que estão cientes de todo o fluxo de trabalho. Se houver algum problema durante o processo, o Orquestrador saberá e tomará medidas para resolvê-lo ou simplesmente notificará uma falha.
```
Comentários