¿Qué es un ESB y para qué sirve?

88

En un trabajo anterior, se habló mucho sobre "Enterprise Service Bus" (ESB). Leí partes de un libro conceptual al respecto, pero nunca entendí realmente cómo implementarlo / integrarlo en términos concretos. Estoy familiarizado con SOA / colas / servicios de directorio / etc. pero no entiendo qué es exactamente un ESB.

¿Es algo concreto (servicio / servidor / intermediario / etc.) que simplemente conecte todas sus aplicaciones de diferentes maneras, o es más una forma conceptual de diseñar sistemas?

Cualquier explicación o enlace a buenos ejemplos será muy apreciado. Gracias.

Andy White
fuente
4
Si le preguntas a Martin Fowler, te dirá que se trata de una Egregious Spaghetti Box.
anataliocs
También puede encontrar información sobre ESB aquí: wso2.com/library/articles/2017/07/what-is-wso2-esb aunque habla específicamente sobre wso2 esb.
Riyafa Abdul Hameed

Respuestas:

53

Es un concepto de abstracción de bastante alto nivel. El concepto central es que ESB proporciona el middleware y las interfaces que permiten a las empresas conectar sus aplicaciones sin escribir código.

Esto podría incluir mediación para reconciliar protocolos, datos e interacción incompatibles.

La idea de un autobús central en el que pasa todo brinda la oportunidad de capas adicionales de abstracción. El uso de estándares de la industria para "conectar" otras aplicaciones, clientes y demás en este bus hace que sea relativamente fácil conectar nuevos servicios, fuentes de datos y clientes con necesidades dispares.

Implementaciones reales

En cuanto a las implementaciones reales, ese es el dominio de las grandes empresas de soporte empresarial. Si bien es una palabra muy de moda, el objetivo es un ideal que, en cierto nivel, puede entenderse mediante la comparación con Internet:

Similitud con Internet

Un gran bus de comunicaciones con usos y datos muy diferentes, pero todos ejecutando protocolos estandarizados.

De hecho, se puede escribir un conector HTTP a FTP que permita a los navegadores acceder a sitios FTP sin invocar un cliente FTP (generalmente integrado en el navegador ahora).

Mashups

Los mashups demuestran una implementación interesante: tome algunos datos de rutas de autobús de la autoridad de San Francisco, un mapa de google y ubicaciones de bares de sushi de yahoo con calificaciones y ejecute una consulta simple que le proporcione la barra de sushi más cercana, poniéndola para que sea dispuesto a viajar un poco más lejos por un mejor bar.

Todos los servicios completamente diferentes, incompatibles por sí mismos, pero usando conectores estándar (yahoo pipe, por ejemplo) se pueden unir en un todo cohesivo y útil.

-Adán

Adam Davis
fuente
45

Descargo de responsabilidad: trabajo para IBM y consulto sobre WebSphere ESB, un producto de IBM diseñado para construir ESB. Las siguientes son mis opiniones y no reflejan necesariamente la posición de IBM.

Un ESB es algo diferente para diferentes personas, desafortunadamente.

Para mí, un ESB es cualquier tecnología que pueda insertar en una SOA (Arquitectura Orientada a Servicios), lo que le permite conectar sistemas dispares. A menudo realiza las funciones de transformación de protocolo, modificación de mensajes, enrutamiento, registro, actuando como puerta de enlace de seguridad, etc. Por ejemplo, puede utilizar un ESB para exponer un servicio que anteriormente solo estaba disponible como un servicio web como un servicio basado en JMS.

En este sentido, las implementaciones de ESB (o para ser más precisos, el software vendido para construir ESB con, como el que consulto) a menudo son tecnológicamente similares a lo que solía conocerse como un corredor de mensajería o colas, aunque el propósito es algo diferente. , porque (como implican los acrónimos) está orientado a los servicios en lugar de mover mensajes de un lugar a otro. La importancia tecnológica de la distinción es una cuestión de opinión.

Andrew Ferrier
fuente
Estoy de acuerdo. Discusión similar
Aniket Thakur
37

Mi experiencia con ESB comercial es que es una tecnología exagerada y cara que crea tantos problemas como resuelve. El ESB vinculará nuevos sistemas y heredados, los mensajes volarán sobre el autobús y todo podrá comunicarse con todo lo demás sin problemas. Agregue algo de resiliencia, orquestación y tendrá una pieza muy poderosa de software de aplicación empresarial.

El problema surge cuando intentas usarlos de verdad, la sobrecarga de escribir para el bus, crear las estructuras de mensajes, etc., puede superar los beneficios. Como elemento de alto costo, el ESB se considera la panacea para todos los problemas tecnológicos, lo que no es así, se pasa demasiado tiempo en el bus y no en las aplicaciones / datos que se conectan. A menudo ocurre que múltiples estándares competidores lucharán por la supremacía en la misma organización, lo que conducirá a los silos clásicos dominados por la tecnología que estos sistemas deberían estar arreglando.

En mi humilde opinión, es mucho mejor crear una pequeña cantidad de interfaces específicas, generalmente usando servicios web solo entre aquellos sistemas que lo necesitan.

MrTelly
fuente
1
Estoy de acuerdo con la parte de "tecnología exagerada y cara". Sin embargo, todavía necesita algo para "unir" los servicios web individuales. Puede ser: nuevo servicio web (probablemente el más rígido), BPEL en ESB: una gran infraestructura pero menos rígida, o algo más ágil y flexible como servidores mashup. Estas son una buena alternativa ágil para el desarrollo de aplicaciones que no tiene mucha ceremonia (modelado, etc.)
Dan
El enfoque de mashup es el que más me gusta: solíamos crear páginas web HTML + JS 'monolíticas', ahora creamos mashups de todo tipo de contenido dirigido a varios navegadores / dispositivos diferentes. El diseño de la aplicación seguirá el mismo camino.
MrTelly
3
Por cierto, probablemente pueda detectar un poco de fatiga del proveedor en mi respuesta: nuevo, tantos han pagado tanto a tantos por tan poco.
MrTelly
No dijo qué es un ESB, sino que se centró en problemas específicos para implementar este patrón arquitectónico
MickyD
1
".... El ESB vinculará sistemas nuevos y heredados, los mensajes volarán sobre el autobús y todo podrá comunicarse con todo lo demás sin problemas. Agregue algo de resistencia, orquestación y tendrá una pieza muy poderosa de software de aplicación empresarial. ... "- Pensé que eso lo resumía ¿ok?
MrTelly
12

Es básicamente una forma conceptual de diseñar un sistema: las empresas de software intentan venderle más pegando la etiqueta 'ESB' y a los gerentes les gusta porque un ESB se ve bien desde un 'nivel superior'.

Un ESB es básicamente un MOM (middleware orientado a mensajes) con un modelo de datos agregado y una gestión de definición de estructura. Tiene una definición de datos común para todas las aplicaciones y adaptadores en ese bus (podría ser XML con un XSD compartido). Todo lo que se conecte DEBE enviar su información que se adhiera a esta definición de datos. El ESB admite la carga, el intercambio y el control de versiones de esta definición de datos común. Al conectar un nuevo componente a un ESB, puede esperar más 'compatibilidad' de fábrica que cuando lo conecta a un MOM. Cada componente de ese bus se trata conceptualmente como un "recurso", por lo que se introduce una abstracción adicional para desacoplar el emisor del receptor.

Ejemplo: digamos que desea conectar la aplicación A con la aplicación B en un middleware estándar orientado a mensajes, tomemos JMS. Hablas con tus colegas que trabajan en la aplicación B, acuerdas un tema, tipo de mensaje y campos y lo envías (pseudocódigo): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101.4 vol = 100})

Si hace lo mismo en una arquitectura orientada a servicios, necesita

  1. instalar software adicional
  2. aprender muchos conceptos nuevos
  3. defina su nuevo componente Java en la interfaz gráfica de usuario de administración de ESB
  4. implementar algunas interfaces que son controladas por el ESB
  5. sendJms (getDestination (), {MapMessage trader = "pete" price = 101.4 vol = 100}) - tenga en cuenta que el destino se inyecta desde el ESB

La primera vez probablemente sea un poco doloroso, pero supongo que puede acostumbrarse, al igual que puede acostumbrarse a los EJB ;-)

Se podría decir que un sistema MOM está 'sin tipo' (estructura dinámica) mientras que un ESB está 'escrito' (estructura estática). Las ventajas y desventajas de la mensajería en bruto frente a la ESB son similares a otras opciones no tipificadas / tipificadas:

  • DESCANSO vs.JABÓN
  • XML no validado frente a XML validado con un XSD
  • Groovy contra Java
  • lenguaje interpretado versus lenguaje compilado

Para proyectos más pequeños, es bueno eliminar la funcionalidad rápidamente (p. Ej., Código Groovy), pero para proyectos más grandes es bueno tener un depurador (p. Ej. Java), ser advertido con anticipación cuando las cosas se rompen y tener un estándar para las personas antes de comprometerse con el proyecto.

Entonces, si su proyecto sufre porque demasiadas personas rompen el sistema al verificar cambios no validados, avance hacia una estructura más (ESB en lugar de MOM). Si sus proyectos adolecen de no hacer suficientes cosas a tiempo, elija la solución más simple y sin tipo. Si son ambos, consiga un consultor (es broma ;-)

Axel Podehl
fuente
4

Bueno, eso depende de a quién le preguntes ... Muchos dirían que es una pieza de "Middleware" que conecta varias piezas de "lógica empresarial" para eliminar la codificación de los mensajes entre estos módulos. Creo que es una definición bastante general, pero estoy seguro de que ya ha llegado a través de Wikipedia y demás.

Aquellos que quieren que el gran ESB salve el mundo lo ven como se presenta más comúnmente, un centro para hacer todo. La mayoría de las implementaciones de ESB se esfuerzan por encapsular todas las tareas repetitivas que vemos en el software empresarial. Eso significa que la mayoría de los ESB se encargan de la transferencia de datos, la seguridad, el registro, la traducción de protocolos, los sistemas de eventos, la exposición a la API a través de servicios web, etc.

Creo que eso es lo más claro que puedo ser ... Espero que eso ayude.

cpatrick
fuente
3

Eche un vistazo a mi presentación " Muchas opciones: cómo elegir el ESB adecuado ".

Explico cuándo usar un ESB, Integration Suite o simplemente un Integration Framework (como Apache Camel). También analizo las diferencias entre los ESB de código abierto y propietarios.

Kai Wähner
fuente
2

Más allá de la definición estándar que puede obtener de Wikipedia . Me parece una gran herramienta para conectar un montón de sistemas heredados en múltiples plataformas y tecnologías. También es una buena herramienta para crear flujos de trabajo distribuidos y sistemas de gestión de estado (como el libro mayor).

Sin embargo, es bastante caro, complejo e incómodo de mantener y ampliar, lo que la convierte en una mala elección tecnológica como herramienta de propósito general para escalar sus aplicaciones.

Kozyarchuk
fuente