Orquestração vs. Coreografia de serviços

Orquestração de serviços

Em uma orquestra temos diferentes instrumentos, com diferentes timbres, tocando diferentes notas. A harmonia entre todo o conjunto é garantida pelo maestro, que vai ditando o andamento rítmico, a cadência e os detalhes de execução. Ao final, o produto pode se tornar uma belíssima sinfonia.

Em uma dança, todos seguem uma coreografia pré-determinada. Na coreografia, os passos precisam ser semelhantes e um bailarino depende da execução de seus colegas para realizar seu passo corretamente. Qualquer modificação ou alteração deve ser tratada durante a dança pelos próprios bailarinos por meio do improviso ou outra forma de tratar os erros.

Nas soluções SOA mais comuns (com uso de barramento de serviços ou camadas de orquestração, como BPM ou BPEL), o termo orquestração é bastante difundido.

Nesse contexto, estamos nos referindo a uma solução formada por serviços (SOA) que tem um componente centralizador de decisões, responsável por definir quando cada serviço irá ser executado e qual será a comunicação entre eles.

Essa camada centralizadora é o que chamamos “arquiteturalmente” de camada de orquestração, e apesar de ser mais comum em soluções SOA/SOAP também pode ser usada com serviços REST em uma arquitetura de microsserviços.

Vale observar também, no cenário de microsserviços, que a autonomia é uma das características de design mais buscadas.

Para esse contexto a coreografia se encaixa perfeitamente, pois o serviço é mais independente, não precisando do barramento para tomar decisões de quando ou como executar.

Mas mesmo utilizando um barramento podemos encadear nossos serviços entre si de forma que eles executem uma coreografia (chamando diretamente o outro de forma sequencial, por exemplo).

Coreografia

A Coreografia é uma técnica para composição de serviços de forma distribuída e descentralizada, vista sob uma perspectiva global, onde não há um nó coordenador; cada nó sabe o que deve fazer e como colaborar com seus vizinhos na coreografia.

A Coreografia é o resultado do conhecimento e comportamento coletivo espalhado pelo sistema.

A Coreografia é mais popular em sistemas REST e em arquiteturas de Microserviços. Arquiteturas focadas em clientes Javascript (como AngularJS, por exemplo) e ambientes heterogêneos (em diversos servidores e implementados em diversas tecnologias) favorecem essa abordagem.

Orquestração

A Orquestração é capaz de integrar sistemas de forma melodiosa e harmônica. Ela dita o ritmo da integração, invocando o serviço certo no momento certo, informando cada uma das entradas. Mas esse ‘maestro’, o nosso músico, é totalmente dependente do serviço, ao ponto de limitar-se à tarefa de realizar uma requisição e obter ou não uma resposta.

A abordagem de Orquestração é vista normalmente com um processo BPM ou BPEL fazendo a função de maestro, coordenando a chamada dos serviços. Também é bastante comum quando temos um ESB (Barramento de Serviços).

Quanto mais utilizarmos o barramento para transformar, enriquecer, validar ou rotear, mais orquestraremos nossos serviços.

Ambientes de SOAP (baseados em XML) ou com contratos homogêneos e padronizados, ambientes com modelo canônico, ou integração através de mensagem favorecem essa abordagem.

Orquestrar ou coreografar serviços

A decisão de se usar orquestração ou coreografia não deve ser pautada simplesmente por preferências tecnológicas, tampouco pela existência de algum artefato tecnológico, como um barramento ou serviços autônomos de baixa granularidade.

Para tomar essa decisão, devemos analisar principalmente o escopo da solução que será entregue e a homogeneidade dos serviços implementados (tanto em nível de contrato quanto de estrutura de dados).

Agora cabe a você convocar seus músicos (ou serviços) e entregar sua sinfonia (ou solução tecnológica).