Arquitetura Orientada à serviços na prática: Infraestrutura.

A Arquitetura Orientada a Serviços, como já abordado com mais profundidade neste post, é uma abordagem que ajuda os sistemas a permanecerem escaláveis e flexíveis enquanto crescem, e que também ajuda a resolver a lacuna entre negócios e TI.
Essa abordagem consiste em três principais elementos:

Serviços: por um lado representam funcionalidades de negócios independentes e, por outro, podem ser implementados com qualquer tecnologia em qualquer plataforma;

Uma Infraestrutura específica: chamada de barramento e serviços corporativos (ESB – Enterprise Service Bus), que permite combinar os serviços de maneira fácil e flexível;

Políticas e Processos: lidam com o fato de que os grandes sistemas distribuídos são heterogêneos, estão sob manutenção e possuem diferentes proprietários.

O SOA aceita que o único jeito e manter flexibilidade em grandes sistemas distribuídos é suportar heterogeneidade, descentralização e tolerância a falhas.
Com muita frequência, esta arquitetura é apenas parcialmente explicada e instalada. A introdução de apenas uma infraestrutura como Web Services pode ajudar até um certo nível de complexidade, mas não é suficiente para garantir a escalabilidade. Toda a arquitetura, serviços, infraestrutura, políticas e processos devem funcionar em sua totalidade para uma implementação bem-sucedida. Implementar SOA não é fácil, requer tempo e esforço necessário para fazer o time de tecnologia se engajar.

INFRAESTRUTURA

Uma parte importante do SOA é a infraestrutura que lhe permite usar os serviços em ambientes de sistemas produtivos. Nesse caso, é o Barramento de Serviços Corporativos (ou ESB – Enterprise Service Bus). Existem opiniões diferentes sobre o papel e as responsabilidades do ESB, e isso acontece pois existem várias abordagens técnicas diferentes para realizar um barramento.
Essa estrutura é chamada de “backbone” técnico do ambiente SOA.

O barramento possibilita aos consumidores chamar os serviços oferecidos pelos fornecedores. Dependendo das abordagens organizacionais e técnicas utilizadas para implementar o ESB, isto pode envolver as seguintes tarefas, no qual talvez tenham que ser levadas para diferentes plataformas de hardware e software, e até para diferentes middlewares e protocolos:

– Prover Conectividade;

– Transformação de dados;

– Roteamento (inteligente);

– Lidar com Segurança;

-Lidar com confiabilidade

-Lidar com gerenciamento de serviços;

-Monitoramento e logging.

O papel principal do ESB é promover a interoperabilidade, e pelo fato de integrar diferentes plataformas e linguagens de programação, uma parte fundamental deste papel é a transformação de dados.

Vamos imaginar o seguinte cenário:

Você trabalha em uma empresa que fornece uma API de pagamento online. A sua empresa disponibiliza a API gratuitamente para milhares de pessoas,  no qualdiariamente, implementam esta API em suas aplicações online. Como consequência, sua empresa passa a ter inúmeros acessos para:

  • Gerenciar cadastro (CRUD);
  • Cadastrar uma compra feita através de sua API;
  • Registrar Pagamento, entre outras operações.

Mas, partindo do princípio que sua API está sendo utilizada por tecnologias distintas (heterogêneas), como fazer com que seu sistema entenda o que as aplicações externas estão querendo ao consultar seus serviços?

É aí que entra o conceito do barramento. Ele oferece:

  • Integração orientada a serviços,
  • Gerenciamento de serviços e
  • Corretagem de mensagens tradicionais escaláveis e confiáveis em ambientes heterogêneos.

Ele combina o intercâmbio inteligente de mensagens com roteamento e transformação de mensagens, além de monitoramento e administração de serviços.

 

E quais são esses conceitos/atividades ou responsabilidades do ESB?

Normalmente, o ESB provê mais do que apenas conectividade.

 

1 – Suporte a Web Services

O ESB tem a capacidade de invocar web services baseados em WSDL e SOAP, bem como outros serviços como RESTful utilizando o protocolo HTTP.

Geralmente, criamos um WSDL para o serviço que se quer expor no ESB. Os clientes, ao invés de se conectarem diretamente ao WSDL do serviço, eles se conectam a um WSDL ( Proxy) exposto no barramento. Assim, você consegue ter uma conexão que permite tratar lógica de roteamento e transformação dentro do barramento.

2 – Adaptadores

São utilizados para conectar aplicações que não suportam a interface SOAP ou XML, tais como aplicações empacotadas, banco de dados, ferramentas ERP, interfaces via arquivo.

Adaptadores podem ser utilizados tanto no caso de a aplicação não fornecer integração via XML ou SOAP, como também nos casos em que se deseja um maior ganho de desempenho evitando o custo em tempo de execução de traduzir para/de XML, se o sistema suporta diretamente serialização de objetos.

3 – Invocação de Serviços
O ESB tem como característica padrão suportar chamadas síncronas e assíncronas de serviços, e algumas vezes callback. Um serviço pode ser mapeado em outro serviço.

4 – Medição e Independência de protocolo
Muitos barramentos permitem que diferentes protocolos de comunicação sejam utilizados durante o caminho de uma mensagem.

5 – Roteamento
Os barramentos disponibilizam diferentes formas de realizar roteamento de mensagens, por exemplo, a partir do conteúdo da mensagem (usando XPath para navegar na mensagem), roteamento baseado em um serviço de regras e roteamento baseado em políticas.
Alguns barramentos permitem o controle de fila de mensagens a fim de que uma mensagem, quando enviada, seja persistida e não seja perdida. Este é o princípio dos mediadores orientados a mensagens
(ou MOM – Message Oriented Middleware), tais como MQ e JMS.

6 – Transformação
Dados representados em XML podem ser transformados utilizando XSLT e consultados utilizando XQuery e XPath. Estas tecnologias permitem preparar o dado para ser trafegado entre sistemas/serviços.
Se um modelo canônico está sendo utilizado, esta é uma característica importante de existir no ESB.

7 – Orquestração
Muitos ESB realizam orquestração através de um serviço de proxy, no qual coordena a execução de múltiplos serviços. Alguns barramentos delegam a orquestração para motores BPEL.

8 – Segurança
O barramento de serviços provê funcionalidades para garantir o uso de políticas de segurança em conjunto com pontos de garantia de políticas, SSL e SAML (Security Assertion Markup Language).

9 – Gerência de serviços
Serviços executando no ESB podem ser monitorados, auditados, mantidos e reconfigurados. No último caso, mudanças no processo podem ser feitas sem necessidade de reescrever serviços ou aplicações subjacentes, dependendo das modificações necessárias e dos serviços existentes.

Uma forma de evitar ou reduzir a necessidade de fazermos muitas transformações em nossos projetos é utilizar Modelagem Canônica.  Com uso de Modelagem Canônica podemos ter, por exemplo, um XSD (um schema utilizado no serviço) compartilhado entre Consumidor e o Provedor de serviços para que a comunicação aconteça de forma eficaz.

Todos os pontos citados acima são de grande importância, mas existem dois que valem a pena ser destacados: Processo de Transformação e Orquestração.

O processo de Transformação (um dos pontos de grande atenção), é o processo em que você capta dados de uma origem (as vezes um Serviço que quer se comunicar com seu web service) e converte-o para o formato que sua estrutura entenda, “alimentando o campo correto” de sua estrutura.

A transformação é inerentemente parte do barramento em uma distribuição de ESB. Os serviços de transformação que são especializados para as necessidades das aplicações individuais ligadas no barramento podem ser localizados em qualquer lugar e acessíveis de qualquer lugar do barramento. Pelo fato da transformação de dados ser uma parte integrante de ESB um ESB pode ser imaginado como sendo uma resolução de desencontros de impedância entre as aplicações. Só isso já pode ser difícil, especialmente quando as questões de performance entram em jogo. A abordagem usual é introduzir um formato específico para o qual apontam todas a plataformas individuais e APIs. Para Web Services, esse formato é 444enormalmente SOAP (SOAP é um protocolo de transferência de mensagens em formato XML para uso em ambientes distribuídos. O padrão SOAP funciona como um tipo de framework que permite a interoperabilidade entre diversas plataformas com mensagens personalizadas.)

Outra tarefa fundamental do ESB é o roteamento. Precisa existir uma maneira para enviar uma chamada de serviço do consumidor ao fornecedor, e depois enviar uma resposta do fornecedor ao consumidor (outros padrões de troca de mensagens existem, mas isso é o que é tecnicamente necessário)

As outras responsabilidades de um ESB são normalmente extensões de uma tarefa central de prover interoperabilidade, Se os mecanismos para lidar com essas tarefas são parte integrantes ou até mesmo inerentes.

Portato, o ESB – Enterprise Service Bus – permite que softwares desenvolvidos em diferentes tecnologias e linguagens possam trabalhar juntos. Com ele, integrações complexas dos grandes sistemas de sua empresa se tornam muito mais simples e completamente gerenciáveis. Esse barramento disponibiliza com maior facilidade os serviços do sistema para os usuários e outras aplicações, acelerando processos de integração.

 

Bibliografia

Josuttis,Nicolai , 2009“SOA na Prática: A Arte da Modelagem de Sistemas Distribuídos”,2009

 Santana, Eduado .“Conheça o Fascinante conceito de Interprise Service Bus.” Acessado em 26/08/2019 http://bufallos.com.br/bg_br/conheca-o-fascinante-conceito-de-enterprise-service-bus/