{"id":264,"date":"2017-12-04T17:30:14","date_gmt":"2017-12-04T17:30:14","guid":{"rendered":"http:\/\/bufallos.com.br\/bg_br\/?p=264"},"modified":"2017-12-04T19:30:51","modified_gmt":"2017-12-04T19:30:51","slug":"conheca-o-fascinante-conceito-de-enterprise-service-bus","status":"publish","type":"post","link":"http:\/\/bufallos.com.br\/bg_br\/conheca-o-fascinante-conceito-de-enterprise-service-bus\/","title":{"rendered":"Conhe\u00e7a o fascinante conceito de Enterprise Service Bus"},"content":{"rendered":"<p style=\"text-align: justify;\">Certa vez escrevi <a href=\"http:\/\/bufallos.com.br\/bg_br\/descubra-toda-verdade-sobre-soa\/\" target=\"_blank\" rel=\"noopener\">um artigo sobre SOA<\/a> onde descrevi o tipo de cen\u00e1rio perfeito para usar seu conceito.<\/p>\n<p style=\"text-align: justify;\">Usarei um cen\u00e1rio muito parecido para falar sobre <strong>ESB (Enterprise Service Bus)<\/strong> a partir de agora. O que nos faz pensar na co-rela\u00e7\u00e3o existente entre os dois conceitos de SOA e ESB.<\/p>\n<p>Muitos confundem os dois achando que s\u00e3o a mesma coisa, <strong>mas n\u00e3o se engane<\/strong>, n\u00e3o \u00e9 a mesma coisa. O que posso afirmar, j\u00e1 no in\u00edcio, \u00e9 que ESB \u00e9 respons\u00e1vel por boa parte das fun\u00e7\u00f5es de SOA mas n\u00e3o todas.<\/p>\n<p style=\"text-align: justify;\"><strong>Vamos ao cen\u00e1rio<\/strong>:<br \/>\nVoc\u00ea trabalha em uma empresa que fornece uma API de pagamento online. Sua empresa disponibiliza a API gratuitamente e milhares de pessoas, diariamente, implementam esta API em suas aplica\u00e7\u00f5es online. Como consequ\u00eancia, sua empresa passa a ter in\u00fameros acessos para:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Gerenciar cadastro ( CRUD) ;<\/li>\n<li style=\"text-align: justify;\">Cadastrar uma compra feita atrav\u00e9s de sua API;<\/li>\n<li style=\"text-align: justify;\">Registrar Pagamento, entre outras opera\u00e7\u00f5es.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Mas, partindo do princ\u00edpio que sua API est\u00e1 sendo utilizada por tecnologias distintas (heterog\u00eaneas), como fazer com que seu sistema entenda o que as aplica\u00e7\u00f5es externas est\u00e3o querendo ao consultar seus servi\u00e7os?<\/p>\n<p style=\"text-align: justify;\">\u00c9 a\u00ed que entra o conceito dos ESB&#8217;s.\u00a0 O\u00a0Service\u00a0Bus\u00a0fornece\u00a0:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Integra\u00e7\u00e3o\u00a0orientada\u00a0a\u00a0servi\u00e7os,<\/li>\n<li style=\"text-align: justify;\">Gerenciamento\u00a0de\u00a0servi\u00e7os\u00a0e<\/li>\n<li style=\"text-align: justify;\">Corretagem\u00a0de mensagens\u00a0tradicionais\u00a0escal\u00e1veis e\u00a0confi\u00e1veis em\u00a0ambientes\u00a0heterog\u00eaneos.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ele\u00a0combina\u00a0o\u00a0interc\u00e2mbio inteligente\u00a0de\u00a0mensagens\u00a0com\u00a0roteamento\u00a0e\u00a0transforma\u00e7\u00e3o<br \/>\nde\u00a0mensagens,\u00a0al\u00e9m\u00a0de\u00a0monitoramento\u00a0e administra\u00e7\u00e3o\u00a0de\u00a0servi\u00e7os.<\/p>\n<p style=\"text-align: justify;\">Como ESB se trata de um conceito, existem algumas ferramentas no mercado que aplicaram este conceito em algumas ferramentas transformando-as em poderosas consoles de trabalho e como exemplo temos:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Oracle Service Bus ou OSB ( presente na Suite Oracle SOA);<\/li>\n<li style=\"text-align: justify;\">Talend ESB;<\/li>\n<li style=\"text-align: justify;\">IBM WebSphere Enterprise Service Bus;<\/li>\n<li style=\"text-align: justify;\">entre outras.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><strong>E quais s\u00e3o esses conceitos\/atividades ou responsabilidades do ESB ?<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>1 &#8211; Suporte a web services<\/strong><br \/>\nO ESB tem a capacidade de invocar web services baseados em WSDL e SOAP, bem como outros servi\u00e7os como Restfull utilizando o protocolo http.<\/p>\n<p style=\"text-align: justify;\">Geralmente, criamos um WSDL para o servi\u00e7o que se quer expor no ESB. Os clientes, ao inv\u00e9s de se conectarem diretamente ao WSDL do servi\u00e7o, eles se conectam a um WSDL ( Proxy) exposto no barramento. Assim, voc\u00ea consegue ter uma conex\u00e3o que permite tratar l\u00f3gica de roteamento e transforma\u00e7\u00e3o dentro do barramento.<\/p>\n<p style=\"text-align: justify;\"><strong>2 &#8211; Adaptadores<\/strong><br \/>\nS\u00e3o utilizados para conectar aplica\u00e7\u00f5es que n\u00e3o suportam a interface SOAP ou XML, tais como aplica\u00e7\u00f5es empacotadas, banco de dados, ferramentas ERP, interfaces via arquivo.<br \/>\nAdaptadores podem ser utilizados tanto no caso da aplica\u00e7\u00e3o n\u00e3o fornecer integra\u00e7\u00e3o via XML ou SOAP, como tamb\u00e9m nos casos em que se deseja um maior ganho de desempenho evitando o custo em tempo de execu\u00e7\u00e3o de traduzir para\/de XML, se o sistema suporta diretamente serializa\u00e7\u00e3o de objetos.<\/p>\n<p style=\"text-align: justify;\"><strong>3 &#8211; Invoca\u00e7\u00e3o de Servi\u00e7os<\/strong><br \/>\nComo uma caracter\u00edstica padr\u00e3o, ESB suporta chamadas s\u00edncronas e ass\u00edncronas de servi\u00e7os, e algumas vezes callback. Um servi\u00e7o pode ser mapeado em outro servi\u00e7o.<\/p>\n<p style=\"text-align: justify;\">A forma que servi\u00e7os se comunicam \u00e9 chamada de padr\u00f5es de troca de mensagens (ou MEP \u2013 Message Exchange Pattern). Um MEP define a sequ\u00eancia de mensagens em uma chamada de servi\u00e7o ou opera\u00e7\u00e3o do servi\u00e7o, especificando a ordem, a dire\u00e7\u00e3o e a cardinalidade das mensagens.<\/p>\n<p style=\"text-align: justify;\">Existem diferentes tipos de MEP:<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>One-way<\/strong>: A opera\u00e7\u00e3o recebe uma mensagem, mas n\u00e3o ir\u00e1 retornar uma resposta.<\/li>\n<li style=\"text-align: justify;\"><strong>Request-response<\/strong>: A opera\u00e7\u00e3o recebe uma mensagem e ir\u00e1 retornar uma resposta.<\/li>\n<li style=\"text-align: justify;\"><strong>Solicit-response<\/strong>: A opera\u00e7\u00e3o envia uma requisi\u00e7\u00e3o e ir\u00e1 esperar uma resposta.<\/li>\n<li style=\"text-align: justify;\"><strong>Notification<\/strong>: A opera\u00e7\u00e3o envia uma mensagem, mas n\u00e3o ir\u00e1 esperar uma resposta.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><strong>4 &#8211; Medi\u00e7\u00e3o e Independ\u00eancia de protocolo<\/strong><br \/>\nMuitos barramentos permitem que diferentes protocolos de comunica\u00e7\u00e3o sejam utilizados durante o caminho de uma mensagem.<\/p>\n<p style=\"text-align: justify;\"><strong>5 &#8211; Roteamento<\/strong><br \/>\nBarramentos disponibilizam diferentes formas de realizar roteamento de mensagens, por exemplo, a partir do conte\u00fado da mensagem (usando XPath para navegar na mensagem), roteamento baseado em um servi\u00e7o de regras e roteamento baseado em pol\u00edticas.<br \/>\nAlguns barramentos permitem o controle de fila de mensagens a fim de que uma mensagem, quando enviada, seja persistida e n\u00e3o seja perdida. Este \u00e9 o princ\u00edpio dos mediadores orientados a mensagens<br \/>\n(ou MOM \u2013 Message Oriented Middleware), tais como MQ e JMS.<\/p>\n<p style=\"text-align: justify;\"><strong>6 &#8211; Transforma\u00e7\u00e3o<\/strong><br \/>\nDados 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\u00e7os.<br \/>\nSe um modelo can\u00f4nico est\u00e1 sendo utilizado, esta \u00e9 uma caracter\u00edstica importante de existir no ESB.<\/p>\n<p style=\"text-align: justify;\"><strong>7 &#8211; Orquestra\u00e7\u00e3o<\/strong><br \/>\nMuitos ESB realizam orquestra\u00e7\u00e3o atrav\u00e9s de um servi\u00e7o de proxy, o qual coordena a execu\u00e7\u00e3o de m\u00faltiplos servi\u00e7os. Alguns barramentos delegam a orquestra\u00e7\u00e3o para motores BPEL.<\/p>\n<p style=\"text-align: justify;\"><strong>8 &#8211; Seguran\u00e7a<\/strong><br \/>\nO barramento de servi\u00e7os prov\u00ea funcionalidades para garantir o uso de pol\u00edticas de seguran\u00e7a em conjunto com pontos de garantia de pol\u00edticas, SSL e SAML8 (Security Assertion Markup Language).<\/p>\n<p style=\"text-align: justify;\"><strong>9 &#8211; Ger\u00eancia de servi\u00e7os<\/strong><br \/>\nServi\u00e7os executando no ESB podem ser monitorados, auditados, mantidos e reconfigurados. No \u00faltimo caso, mudan\u00e7as no processo podem ser feitas sem necessidade de reescrever servi\u00e7os ou aplica\u00e7\u00f5es subjacentes, dependendo das modifica\u00e7\u00f5es necess\u00e1rias e dos servi\u00e7os existentes.<\/p>\n<p style=\"text-align: justify;\"><strong>Todos os pontos citados acima<\/strong> s\u00e3o de grande import\u00e2ncia, mas gostaria de refor\u00e7ar dois deles que s\u00e3o : Processo de Transforma\u00e7\u00e3o e Orquestra\u00e7\u00e3o.<\/p>\n<p style=\"text-align: justify;\"><strong>Quanto ao processo de Transforma\u00e7\u00e3o<\/strong> (para mim um dos pontos cruciais e de grande aten\u00e7\u00e3o), \u00e9 o processo em que voc\u00ea capta dados de uma origem ( as vezes um Servi\u00e7o que quer se comunicar com seu web service) e converte-o para o formato que sua estrutura entenda, &#8220;alimentando o campo correto&#8221; de sua estrutura.<\/p>\n<p style=\"text-align: justify;\">Por exemplo, veja na imagem abaixo a transforma\u00e7\u00e3o entre dois WSDLs distintos e observe que 3 atributos da Origem foram &#8220;CONCATENADOS&#8221; para gerar uma \u00fanica informa\u00e7\u00e3o.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-268\" src=\"http:\/\/bufallos.com.br\/bg_br\/wp-content\/uploads\/2017\/12\/transformacaoOSB.jpg\" alt=\"\" width=\"1088\" height=\"484\" srcset=\"http:\/\/bufallos.com.br\/bg_br\/wp-content\/uploads\/2017\/12\/transformacaoOSB.jpg 1088w, http:\/\/bufallos.com.br\/bg_br\/wp-content\/uploads\/2017\/12\/transformacaoOSB-300x133.jpg 300w, http:\/\/bufallos.com.br\/bg_br\/wp-content\/uploads\/2017\/12\/transformacaoOSB-768x342.jpg 768w, http:\/\/bufallos.com.br\/bg_br\/wp-content\/uploads\/2017\/12\/transformacaoOSB-1024x456.jpg 1024w\" sizes=\"(max-width: 1088px) 100vw, 1088px\" \/><\/p>\n<p style=\"text-align: justify;\">Isto significa, que todas as vezes que existir uma comunica\u00e7\u00e3o entre esses servi\u00e7os esta regra ser\u00e1 aplicada.<\/p>\n<p style=\"text-align: justify;\">Uma forma de evitar ou reduzir a necessidade de fazermos muitas transforma\u00e7\u00f5es em nossos projetos \u00e9 utilizar <strong>Modelagem Can\u00f4nica<\/strong>.\u00a0 Com uso de Modelagem Can\u00f4nica podemos ter, por exemplo, um XSD ( um schema utilizado no servi\u00e7o) compartilhado entre Consumidor e o Provedor de servi\u00e7os para que a comunica\u00e7\u00e3o aconte\u00e7a de forma eficaz.<\/p>\n<p style=\"text-align: justify;\">Assim, o barramento traduz a mensagem para o formato esperado uma \u00fanica vez e temos a vantagem de termos um XSD padr\u00e3o que pode ser fornecido pra v\u00e1rios consumidores e n\u00e3o termos que ficar reinventando a roda.<\/p>\n<p style=\"text-align: justify;\">Al\u00e9m desses fatores, tem um outro ponto que devemos ter aten\u00e7\u00e3o na transforma\u00e7\u00e3o que \u00e9 quando voc\u00ea faz a liga\u00e7\u00e3o entre os atributos. Voc\u00ea estar\u00e1 pegando dados de um WSDL e jogando no outro. Por isso <strong>a import\u00e2ncia de conhecer bem a regra de neg\u00f3cio<\/strong>, para que problemas como esses sejam evitados.<\/p>\n<p style=\"text-align: justify;\"><strong>Quanto ao processo de Orquestra\u00e7\u00e3o<\/strong>, acredito que a defini\u00e7\u00e3o depende muito da regra de neg\u00f3cio, assim como da metodologia de trabalho do Arquiteto do projeto.<\/p>\n<p style=\"text-align: justify;\">Por exemplo, em alguns projetos que trabalho costumo deixar todo o CRUD no BPEL e a orquestra\u00e7\u00e3o no OSB j\u00e1 que por ele posso ter recursos como :<\/p>\n<ul>\n<li style=\"text-align: justify;\">Roteamento de Mensagens,<\/li>\n<li style=\"text-align: justify;\">Enriquecimento,<\/li>\n<li style=\"text-align: justify;\">Tratamento de erros,<\/li>\n<li style=\"text-align: justify;\">Os Split Joins ( que s\u00e3o ferramentas fant\u00e1sticas para processamento paralelo de mensagens),<\/li>\n<li style=\"text-align: justify;\">entre outras coisas.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ent\u00e3o, em alguns casos j\u00e1 tenho por padr\u00e3o trabalhar desta forma.<\/p>\n<p style=\"text-align: justify;\">No entanto, existem projetos que precisam ser desenvolvidos de uma forma diferente, por exemplo quando precisamos colcoar a orquestra\u00e7\u00e3o no BPEL, onde faz-se necess\u00e1rio manter um fluxo de atvidades imprimindo passo a passo como uma determinada regra de neg\u00f3cio funciona.<\/p>\n<p style=\"text-align: justify;\">Atualmente eu trabalho diretamente com os produtos da Oracle, sendo assim, \u00e9 a ferramenta que eu indico para quem gostaria de projetar Barramentos de Seri\u00e7os para seus projetos.<\/p>\n<p style=\"text-align: justify;\">No caso da Oracle n\u00f3s temos o Oracle Service Bus ou OSB que est\u00e1 na vers\u00e3o 12C presente na Oracle SOA Suite. O OSB possui todas as caracter\u00edsticas descritas acima e muito mais.<\/p>\n<p style=\"text-align: justify;\">A partir de agora, desenvolveremos artigos que trar\u00e3o exemplos de melhores pr\u00e1ticas e como utilizar o OSB em seus projetos.<\/p>\n<p style=\"text-align: justify;\">Por hora, fico por aqui.<\/p>\n<p style=\"text-align: justify;\">D\u00favidas, entre em contato.<\/p>\n<p style=\"text-align: justify;\">Forte abra\u00e7o.<\/p>\n<p style=\"text-align: justify;\">Eduardo Santana.<br \/>\nbufallos@bufallos.com.br<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Certa vez escrevi um artigo sobre SOA onde descrevi o tipo de cen\u00e1rio perfeito para usar seu conceito. Usarei um<\/p>\n","protected":false},"author":1,"featured_media":265,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,10,11],"tags":[14,16,15,13,18,17],"_links":{"self":[{"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/posts\/264"}],"collection":[{"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/comments?post=264"}],"version-history":[{"count":8,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/posts\/264\/revisions"}],"predecessor-version":[{"id":275,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/posts\/264\/revisions\/275"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/media\/265"}],"wp:attachment":[{"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/media?parent=264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/categories?post=264"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/bufallos.com.br\/bg_br\/wp-json\/wp\/v2\/tags?post=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}