Em um trabalho anterior, falou-se muito sobre "Enterprise Service Bus" (ESB). Eu li partes de um livro conceitual sobre isso, mas nunca entendi realmente como você iria implementá-lo / integrá-lo em termos concretos. Estou familiarizado com SOA / enfileiramento / serviços de diretório / etc. mas eu não entendo o que exatamente é um ESB.
É algo concreto (serviço / servidor / corretor / etc.) Que você simplesmente conecte todos os seus aplicativos de maneiras diferentes ou é mais apenas uma forma conceitual de projetar sistemas?
Quaisquer explicações ou links para bons exemplos seriam muito apreciados. Obrigado.
Respostas:
É um conceito de abstração de nível bastante elevado. O conceito central é que o ESB fornece o middleware e as interfaces que permitem às empresas conectar seus aplicativos sem escrever código.
Isso pode incluir mediação para reconciliar protocolos, dados e interação incompatíveis.
A ideia de um ônibus central pelo qual tudo passa dá oportunidade para camadas adicionais de abstração. Usar os padrões da indústria para "conectar" outros aplicativos, clientes e outros semelhantes a esse barramento torna relativamente fácil conectar novos serviços, fontes de dados e clientes com necessidades distintas.
Implementações reais
No que diz respeito às implementações reais, esse é o domínio de empresas de suporte corporativo muito grandes. Embora seja muito buzzwordy, o objetivo é um ideal que em algum pequeno nível pode ser compreendido por meio da comparação com a internet:
Similaridade com a Internet
Um grande barramento de comunicação com usos e dados amplamente diferentes, mas todos executando protocolos padronizados.
Pode-se, de fato, escrever um conector HTTP para FTP que permitiria aos navegadores acessar sites FTP sem invocar um cliente FTP (normalmente embutido no navegador agora).
Mashups
Os mashups demonstram uma implementação interessante - pegue alguns dados de rota de ônibus da autoridade de São Francisco, mapa do google e locais de sushi bar do yahoo com classificações e execute uma consulta simples que fornece o sushi bar mais próximo, ponderando-o para que você esteja disposto a viajar um pouco mais para um bar melhor.
Todos os serviços completamente diferentes, incompatíveis por si próprios, mas usando conectores padrão (yahoo pipes, por exemplo), eles podem ser reunidos em um todo coeso e útil.
-Adão
fonte
Isenção de responsabilidade: Eu trabalho para a IBM e consulto o WebSphere ESB, um produto IBM projetado para construir ESBs. A seguir estão minhas opiniões e não refletem necessariamente a posição da IBM.
Um ESB é coisas diferentes para pessoas diferentes, infelizmente.
Para mim, um ESB é qualquer tecnologia que você possa inserir em uma SOA (Arquitetura Orientada a Serviços), permitindo conectar sistemas distintos entre si. Ele geralmente executa as funções de transformação de protocolo, modificação de mensagem, roteamento, registro, atuação como gateway de segurança e assim por diante. Por exemplo, você pode usar um ESB para expor um serviço anteriormente disponível apenas como um serviço da Web como um serviço baseado em JMS também.
A este respeito, as implementações ESB (ou para ser mais preciso, software vendido para construir ESBs com - como aquele que eu consulto) são frequentemente tecnologicamente semelhantes ao que costumava ser conhecido como um corretor de mensagens ou filas, embora a finalidade seja um pouco diferente , porque (como as siglas indicam) é orientado para serviços, em vez de mover mensagens de um lugar para outro. O quão importante é a distinção tecnologicamente é uma questão de opinião.
fonte
Minha experiência com o ESB comercial é uma tecnologia exagerada e cara que cria tantos problemas quanto soluciona. O ESB conectará novos sistemas e legados, as mensagens voarão pelo ônibus e tudo será capaz de se comunicar com todo o resto sem problemas. Adicione alguma resiliência, orquestração e você terá um software de aplicativo corporativo muito poderoso.
O problema surge quando você tenta usá-los para valer, a sobrecarga de escrever para o barramento, criar as estruturas de mensagem e assim por diante, pode superar os benefícios. Como um item de alto custo, o ESB é visto como a panacéia para todos os problemas de tecnologia que não é, muito tempo é gasto no barramento e não nos aplicativos / dados sendo conectados. Frequentemente, vários padrões concorrentes lutarão pela supremacia na mesma organização, levando aos clássicos silos dominados pela tecnologia que esses sistemas deveriam realmente consertar.
IMHO é muito melhor usar para criar um pequeno número de interfaces específicas, normalmente usando serviços da web apenas entre os sistemas que precisam deles.
fonte
É basicamente uma forma conceitual de projetar um sistema - as empresas de software tentam vender mais colando o adesivo 'ESB' nele e os gerentes gostam porque um ESB parece bom visto de um 'nível superior'.
Um ESB é basicamente um MOM (middleware orientado a mensagem) com um modelo de dados adicionado e gerenciamento de definição de estrutura. Você tem uma definição de dados comum para todos os aplicativos e adaptadores nesse barramento (pode ser XML com um XSD compartilhado). Qualquer coisa que conecte DEVE enviar sua informação de acordo com esta definição de dados. O ESB oferece suporte ao carregamento, compartilhamento e controle de versão dessa definição de dados comum. Ao conectar um novo componente a um ESB, você pode esperar mais 'compatibilidade' fora da caixa do que ao conectá-lo a um MOM. Cada componente desse barramento é conceitualmente tratado como um 'recurso' - portanto, há uma abstração adicional introduzida para separar o emissor do receptor.
Exemplo: digamos que você deseja conectar o aplicativo A com o aplicativo B em um middleware orientado a mensagem padrão, vamos pegar o JMS. Você conversa com seus colegas que trabalham no aplicativo B, concorda com um tópico, tipo de mensagem e campos e os envia (pseudo código): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})
Se você faz a mesma coisa em uma arquitetura orientada a serviços, você precisa
A primeira vez provavelmente é um pouco doloroso, mas acho que você pode se acostumar com isso, assim como você pode se acostumar com os EJBs ;-)
Você poderia dizer que um sistema MOM é 'não tipado' (estrutura dinâmica) enquanto um ESB é 'tipado' (estrutura estática). Os trade-offs de mensagens brutas vs. ESB são semelhantes a outras opções não digitadas / digitadas:
Para projetos menores é bom fazer hash da funcionalidade rapidamente (por exemplo, código Groovy), mas para projetos maiores é bom ter um depurador (por exemplo, Java), ser avisado com antecedência quando as coisas quebram e ter um padrão para as pessoas antes de se comprometerem com o projeto.
Portanto, se o seu projeto sofre com muitas pessoas quebrando o sistema verificando as alterações não validadas - vá em direção a mais estrutura (ESB em vez de MOM). Se seus projetos sofrem por não realizar o suficiente a tempo, escolha a solução mais simples e sem tipo. Se for ambos - chame um consultor (brincadeira ;-)
fonte
Bem, isso depende de para quem você pergunta ... Muitos diriam que é um pedaço de "Middleware" que conecta várias partes da "lógica de negócios" para eliminar a codificação das mensagens entre esses módulos. Acho que é uma definição geral, mas tenho certeza que você já chegou lá via Wikipedia e outros enfeites.
Aqueles que desejam que o grande ESB salve o mundo o veem como é mais comumente apresentado, um centro para fazer tudo. A maioria das implementações de ESB se esforça para encapsular todas as tarefas repetitivas que vemos no software de negócios. Isso significa que a maioria dos ESBs cuida da transferência de dados, segurança, registro, tradução de protocolo, sistemas de eventos, exposição de API por meio de serviços da web, etc.
Acho que isso é o mais claro que posso ser ... Espero que ajude.
fonte
Dê uma olhada em minha apresentação " Spoiled for Choice - How to Choose the Right ESB ".
Eu explico quando usar um ESB, Integration Suite ou apenas um Integration Framework (como o Apache Camel). Também discuto as diferenças entre o código aberto e os ESBs proprietários.
fonte
Além da definição padrão, você pode obter na Wikipedia . Acho que é uma ótima ferramenta para conectar um monte de sistemas legados em várias plataformas e tecnologias. Também é uma boa ferramenta para criar fluxos de trabalho distribuídos e sistemas de gerenciamento de estado (como razão geral).
No entanto, é bastante caro, complexo e inconveniente de manter e estender, o que o torna uma escolha de tecnologia pobre como uma ferramenta de uso geral para dimensionar seus aplicativos.
fonte