messaging - tutorial - Diferencia entre un Message Broker y un ESB
broker vs service bus (5)
He revisado diferentes preguntas / artículos sobre Message Brokers y ESB (incluso en stackoverflow). ¿Todavía no hay una pista de cuál es la diferencia demarcación CLARA entre un intermediario de mensajes y un ESB? ¡Aquí estoy tratando de comparar productos, Websphere Broker y Mule ESB!
En primer lugar, ¿es (cualquier versión) Webshere Broker un ESB? ¡Nuestros tipos de productos de IBM afirman que es un ESB! (No me sorprende).
Mi información limitada me dice que Message Broker funciona en un modelo HUB-SPOKE. Sin embargo, el ESB funciona en una arquitectura de bus. ¿Qué demonios se supone que significa eso? He leído que si el HUB falla (no está disponible, supongo), entonces el intermediario falla por completo. Lo cual no es el caso de un ESB (Entonces esos tipos dicen). Lo que no entiendo aquí es "¿Qué pasa si el BUS" falla?
Ahora, lo habitual sobre un ESBs y Brokers es que proporcionan enrutamiento, transformación, orquestación, etc. Entonces, si ambos proporcionan esto, ¿por qué elegiría uno sobre el otro?
Otra área de conflicto es con respecto a la TRANSFORMACIÓN. ¿Los ESB lo facilitan de una manera diferente en comparación con Message Brokers? Realmente me encantaría conocer algo sobre esto.
Ahora hablando de escalamiento HORIZONTAL. ¿Quién supera a quién? O ambos son igualmente escalables en términos de complejidad (o cualquier otro factor). Por supuesto, en cuanto a los costos, Webshpere Broker te cobrará por cada caja (sin mencionar cada CPU). Creo que incluso el comercial ESL de MULE no hace eso. Dejando de lado la parte de Costo, ¿cuáles son las implicaciones de la escala de ESB y la escala de Message Broker? Sé que puedes escalar al nivel de servicio en ESB. ¿Es esto posible en un Message Broker?
Acabo de leer este artículo de Udi Dahan hace unos días, que podría darte una visión más clara de lo que siento que es una diferencia fundamental.
http://www.udidahan.com/2011/03/24/bus-and-broker-pubsub-differences
Citando:
La regla de que solo puede haber un único editor para un determinado tipo de evento es una de las cosas que diferencia a los autobuses de los intermediarios, aunque ambos obviamente le permiten tener múltiples suscriptores.
...
Desafortunadamente, existen muchas tecnologías estilo corredor que se están comercializando bajo el nombre de Enterprise Service Bus. Si bien algunos productos tienen la capacidad de implementarse de manera centralizada y distribuida (a veces denominados modo "federado" o "incrustado"), muchos no aplican la regla de "punto final de publicación único por tipo de evento".
Sin esta restricción, es demasiado fácil cometer errores.
Espero eso ayude.
Descargo de responsabilidad: soy un consultor de IBM y me especializo en WebSphere ESB. Este comentario no se deja en ninguna capacidad oficial.
Un ESB es más un patrón o concepto arquitectónico que un producto, en términos generales, una forma de ingeniería basada en el servicio de acoplamiento flexible. Su definición se pelea y no exactamente en piedra. En general, un ESB está compuesto de servicios no relacionados (en un sentido técnico): exponen las interfaces y las consumen de otros servicios. Generalmente no hay una arquitectura hub y spoke involucrada, aunque puede haberla.
IBM ciertamente comercializa WebSphere Message Broker y WebSphere ESB como productos que facilitan la creación de un ESB (junto con el dispositivo de hardware DataPower). Tienen diferentes raíces tecnológicas, pero tienen cierta superposición en el propósito. Además, eso no quiere decir que no pueda construir un ESB con muchas otras cosas que no estén marcadas como un ''producto ESB''.
Eso no responde todas sus preguntas, pero con suerte aborda la parte de IBM.
La diferencia entre un Message Broker y un ESB es principalmente la palabra ''bus''.
Para mí, un Message Broker es un proceso (usualmente grande) que transforma los datos de una estructura a otra estructura o modifica el contenido.
Un ESB es un middleware orientado a mensaje (MOM) más servicios adicionales, uno de los cuales podría ser un Message Broker. Entonces, un ESB puede incluir un Message Broker como uno de sus componentes. Un Bus consta de más de un proceso; de lo contrario, no lo llamaría ''bus''. La naturaleza de un bus es que hay múltiples componentes que sirven diferentes tareas, cada uno se comunica a través de un MOM y se adhiere a alguna forma de ''formato de datos común''. Un bus consistiría en: aplicaciones que envían datos a la MOM, adaptadores de bases de datos, Message Brokers, puentes MOM, etc.
La separación es un poco gradual, pero la mayor diferencia entre una arquitectura de Message Broker y un Bus es la granularidad . Si su tarea es integrar aplicaciones A, B, ..., Z y un par de bases de datos, puede hacer esto con un gran Message Broker que conecta a todos. O con un ESB donde múltiples componentes pequeños se encargan solo de pequeñas tareas. Por ejemplo, un adaptador se conecta a A, otro a B (pero no lo hacen a la transformación), luego cada uno envía sus cosas a uno (o más) Message Broker, cada uno de los cuales debe mantenerse lo más simple posible, por ejemplo, no tener que saber sobre el modelo de datos de ''A'' o ''B''. Un buen ESB debería tener una definición de datos común en el bus, abstrayendo de la ''diferencia'' de las aplicaciones individuales.
TRANSFORMACIÓN: un ESB no ayuda con la transformación, a menos que venga con un Message Broker. Pero cada buen ESB debería incluir un Message Broker de todos modos. The Message Broker debería ser el experto de tu bus para las transformaciones, pero nada más.
Escalado HORIZONTAL: si solo tiene 3 cosas para conectar (ahora y para siempre), probablemente no valga la pena el esfuerzo de obtener un ESB completo. Un Message Broker tiene la ventaja de ser solo un gran proceso. Puede configurar todo allí y tener una ubicación central para todas sus asignaciones de datos, filtrado y enrutamiento.
Pero si tiene 30 aplicaciones para conectarse, un Message Broker probablemente se detendrá. Por supuesto, puede comprar más instancias, ejecutar cosas redundantes, etc., pero debe cambiar su estrategia para ''localizar'' trabajos. El adaptador de cada aplicación (podría ser una pequeña instancia de Message Broker) debería ser capaz de generar y / o recibir un modelo de datos común abstraído (por ejemplo, XML con un XSD compartido). También podría haber un Message Broker central para las tareas de transformación, pero esa instancia no debería conocer el modelo de datos A o B. Por lo tanto, un ESB debería mover el procesamiento al componente experto en lugar de mantener todo en un lugar central.
Puede usar un intermediario de transformación sin un bus de servicio, y viceversa. En términos de productos específicos, no creo que nadie sea puramente uno o el otro debido a la forma en que cada uno complementa al otro. Algunos productos son más fuertes en un área, otros más fuertes en otra. Tal vez se deba hacer una elección basada en qué función cubre mejor un problema individual.
Un intermediario puede tener mejores "bloques de lego" integrados para construir una cadena de transformación que un producto ESB. Un intermediario presionado en servicio como un ESB puede ser aplastado bajo carga y no escalar bien, o puede carecer de robusto diario y herramientas para manejar diarios.
Algunos ESB permiten que las actualizaciones de la base de datos se retrotraigan y que las colas se reproduzcan en una aplicación corregida una vez que se ha descubierto y solucionado un error grave en la lógica. No creo que la mayoría de los corredores integren ese nivel de soporte transaccional. Para que esto funcione en todas sus "transacciones" casi tiene que haber eventos de negocios (una venta, una renovación, un cambio de propiedad, etc.) en lugar de algo así como "actualizaciones de bases de datos" de RPCish.
Un Enterprise Service Bus proporciona tres valores clave para el Negocio:
- Enrutamiento basado en el contexto o en el contenido de las transacciones;
- Transformación desde un dominio de mensaje o transporte a otro dominio o transporte de mensaje;
- conectividad de servicio de muchos a muchos.
Los ESB brindan un acoplamiento flexible de los servicios, permiten que los servicios se reconstituyan en contextos de aplicación completamente diferentes que cuando los servicios se concibieron o desarrollan por primera vez, y promueven la reutilización de aplicaciones sin la necesidad de recodificar aplicaciones. WebSphere Message Broker (o ahora se llama IBM Integration Bus) es un excelente ejemplo de Enterprise Service Bus. Para ver un ejemplo de simplicidad de código que aporta gran poder en unas pocas líneas, puede ver mi publicación aquí: http://soabus.org/viewtopic.php?f=3&t=13 . La construcción fundamental dentro del tiempo de ejecución IIB se llama Árbol de mensajes lógicos (LMT). Todo lo que el desarrollador quiere hacer es algún tipo de operación en el LMT. ESQL es el lenguaje más eficiente que un desarrollador puede usar para realizar estas operaciones en LMT, aunque se admiten muchos otros lenguajes (por ejemplo, Java, PHP, Python, etc.). Ningún otro producto se acerca a la eficiencia y facilidad de desarrollo de ESB. aplicaciones que IBM Integration Bus ya que el 90 por ciento de la codificación de estas aplicaciones se realiza arrastrando y soltando nodos en una paleta. Eso deja solo el 10% de la codificación a cargo del desarrollador de Message Flow. Por cierto, IBM ha suspendido WebSphere ESB y muchos de los productos competidores de IBM Integration Bus no han visto ningún desarrollo nuevo en ellos desde hace varios años. Se puede ver una lista de varias ofertas de productos de ESB en soabus.org.