Usos Prácticos de un ESB

Con este primer post, pretendo empezar una colección de artículos con patrones de uso para distintas herramientas, tecnologías y estándares relacionadas con el mundo SOA y BPM. Espero que sean de vuestro interés y todos podamos aprender un poco más; por ello agradecería cualquier participación con experiencias reales, opiniones, ideas y cualquier comentario que permita enriquecer dichos posts.

El primero de estos artículos va a tratar sobre el ESB, cómo usarlo, sus aplicaciones reales más comunes, etc…

Comenzemos pues, definiendo el ESB como un elemento de integración que combina mensajería, servicios web, transformación de datos, enrutación, políticas de seguridad, etc… y que permite la interacción entre diversas aplicaciones o sistemas de una Architectura Empresarial.
El ESB se ha convertido en una de las partes más importantes de una Arquitectura SOA ya que se presenta como el "pegamento" multiprotocolo y multipropósito para dicha arquitectura.

Las aplicaciones y características más comunes del ESB son las siguientes:

Enrutación basada en contenido:

Generalmente, el ESB cumple un cometido de enrutación entre sistemas o aplicaciones. Esa enrutación o decisión del punto final (endpoint) que debe invocarse se puede hacer en función del contenido del mensaje. Para ello, el mensaje en cuestión debe llevar información asociada que permita determinar el endpoint en cuestión (es lo que suele llamarse metadatos o metainformación del mensaje).

Por ejemplo, podemos hacer una invocación a un servicio web u otro por medio de sus endpoints (esto es, las url’s de invocación de los servicios) en función de algún parámetro del mensaje.
El caso práctico más común, es un mensaje con información sobre concesión de un préstamo de dinero para el sector bancario. La decisión de aceptación del préstamo puede definirse como automática para cantidades por debajo de un umbral o manuales si se supera dicho límite. El ESB sería capaz de analizar dicha cantidad (sería información inclusa en el mensaje) e invocar un servicio web de resolución automática o manual según el caso que esté manejando.

Transformación de mensajes:

La mayoría de los ESB suelen incorporar motores de transformación y parseadores de mensajes que permiten y facilitan la transformación de los mismos. La manera más común suele ser por medio de un fichero XSLT de Transformación de mensajes, aunque algunas herramientas utilizan otros sistemas, incluso propietarios.

Por ejemplo, disponemos de un modelo de datos común de nuestra arquitectura y queremos invocar un servicio web con un modelo de datos particular y único. El ESB nos permite realizar la transformación del mensaje de un modelo a otro por medio de un fichero XSLT (o cualquier otro sistema que utilice) y así desacoplar completamente la implementación de uno y otro. De esta manera, un futuro cambio de uno u otro modelo, solo debería, en principio, aceptar a la transformación del mensaje, nunca a las implementaciones de ambos modelos involucrados.

Configuración y no codificación:

Una de las cosas más ventajosas de un ESB es que suele realizarse todo por medio de configuración y no codificación. Independientemente del producto que estemos utilizando (hoy en día la mayoría incluyen IDE’s gráficos que facilitan la configuración de los elementos del ESB; aunque algunos pueden necesitar de configuración por medio de ficheros y manualmente) suele ser suficiente con la configuración de los componentes del ESB que vayamos a utilizar. No suele necesitarse la codificación, lo que limita el número de errores y da fiabilidad al bus que se monte.
No obstante, si fuera necesario, la codificación (sea por medio de Java, .NET, o cualquier otro lenguaje) suele ser posible para casos concretos en que los componentes del ESB manejado no implementen o faciliten la configuración deseada.

Proxy de Servicios:

Una de las mayores ventajas del ESB es la de crear una capa de proxy por encima del servicio. Ello, nos permite abstraer su implementación (que al final, puede ser como una caja negra, de la que solo disponemos la interfaz, normalmente su WSDL) y añadirle información o requisitos para su ejecución.

El caso más práctico sería el de un servicio web con dos operaciones. Una de ellas, permite la consulta online en una base de datos de libros. La otra operación permite la compra de un libro y por tanto requiere del manejo de información confidencial como puede ser una tarjeta de crédito.
El ESB nos permite generar un proxy por encima de dicho servicio y dar lugar a dos nuevos servicios (que serán los que realmente se permitan invocar a traves de aplicaciones cliente). Uno de los dos proxy’s podría ser el servicio con la operación de consulta (sin requisito adicional). El otro servicio podría resultar en un proxy con requisito de seguridad añadido sobre la operación del servicio original. El proxy podría ser requerído para su invocación, por ejemplo, por medio de HTTPS que llamaría finalmente a la operación del servicio original no securizada.

Conversión de protocolos:

Como ya hemos comentado, una de las características del ESB es su funcionalidad multiprotocolo. Esto es, que permite la conexión a distintas aplicaciones o sistemas por medio de numerosos protocolos. Además, suelen incorporar la posibilidad de añadir conectores a todo tipo de aplicaciones que pueden ser desarrollados por el mismo fabricante del ESB, por terceros o incluso por el propio desarrollador a través de un API estandarizada.

El ejemplo más práctico sería un servicio web por HTTP, al que se le quiere dar fiabilidad por medio de mensajería JMS. El ESB sería el encargado de exponer el servicio de manera fiable a través de un proveedor de JMS y luego realizar la conversión de protocolo necesaria para la invocación via HTTP.

Auditorías y Logs de Mensajes:

Otra característica importante del ESB es su función como auditor de mensajería y "logado" de mensajes. La comunicación de información a través del ESB nos permite centralizar sistemas de log y persistencia de información susceptible de ser auditada. Además, luego con herramientas de BAM o incluso Business Intelligence pueden explotarse dichos datos y realizar monitorizaciones exhaustivas que permitan la optimización del ESB, la Arquitectura SOA y en definitiva el negocio de la empresa.

Manejo de Excepciones:

Generalmente los servicios web tienen un comportamiento de respuesta correcta y en algunos casos pueden devolver excepciones de manera controlada (o no). El ESB nos permite gestionar las excepciones de una manera estandarizada (por ejemplo SOAP Fault) y realizar las correcciones oportunas al ocurrir dichos errores.

El ejemplo más práctico consistiría en definir un modelo estándar de nuestra arquitectura para el manejo de excepciones. Por medio del ESB podríamos tratar cualquier tipo de error (independientemente del protocolo o el modelo de datos de los servicios involucrados) de una manera común a todo nuestro entorno y así poder unificar criterios, facilitar la internacionalización de mensajes de error, etc…

Securización de Servicios:

Los servicios que suelen integrarse por medio de un ESB pueden o no estar securizados. A veces, la información es necesaria de securizarse en mayor o menor medida dependiendo del cliente externo que vaya a utilizarla. Por medio del ESB se pueden definir políticas de seguridad para los servicios y establecer más o menos requisitos para la invocación / ejecución de los mismos.

El ejemplo práctico consistiría en securizar con SSL un servicio sin seguridad (por ejemplo, un servicio adaptado de un sistema legado que carece de elementos securizantes) por medio de certificados digitales.

Acceso a Repositorio de Servicios:

Un Repositorio de Servicios (no confundir con UDDI) nos permite acceder a metainformación de los servicios integrados que facilita el control de los mismos y el poder aplicar políticas y condiciones de una manera centralizada y jerarquizada (entre muchas otras características, muy ligadas a veces con la gobernabilidad de la arquitectura).

Un ejemplo práctico consistiría en resolver de manera dinámica los endpoints de invocacion de los servicios por medio del acceso a un repositorio de servicios que nos diera dicha información en tiempo de ejecución. De esta manera, por ejemplo, cambiar a la invocación de un servicio en pruebas u otro de respaldo, sería automático por medio de configuración del propio repositorio.

Validación, Enriquecimiento, Transformación y Operación de Mensajes:

Se puede decir, que estas son las 4 características estrella de un ESB:

Validación de la información, de los mensajes entrantes, sobre los que se pueden aplicar distintas condiciones y verificaciones que hagan cumplir los requisitos establecidos.
Enriquecimiento de los mensajes, posiblidad de añadir información o metainformación adicional para cumplir las necesidades de integración en cada momento.
Transformación de los mensajes, normalmente entre los diversos modelos de datos del conjunto de servicios y aplicaciones a integrar.
Operación de los mensajes o enrutación en función de directivas preestablecidas o a partir de metainformación inclusa en la propia comunicación.

Estas son solo algunas de las principales características y usos de un ESB. Dependiendo del producto que vayamos a utilizar será más o menos fuerte en ciertas cosas u otras.

¿Qué otras experiencias reales teneis con ESB’s? ¿Veis que falte algo? ¿Cuál es el producto del mercado que creeis mejor se adapta a vuestras necesidades o que cumple en mayor medida con estos requisitos?

Links interesantes:

ESB Integration Patterns by Dave Chappel
Patterns: Implementing an SOA using an Enterprise Service Bus
Patterns: Integrating Enterprise Service Buses in a Service-Oriented Architecture
Application Integration::Broker application pattern::Runtime patterns
Enterprise Service Bus (O’Reilly Safari Books Online)
ESB Patterns that "Click" (The Art and Science of Being an I/T Architect)

7 Responses to “Usos Prácticos de un ESB”

  1. Creo que en la parte de monitorización, no debería hablarse de BAM. La monitorización de negocio, debe recaer sobre el motor de procesos (BPM). Lo que pasa en el ESB lo llamaría monitorización técnica y creo que con herraminetas tipo Tivoli o OpenView (o cualquier opensource) tendriamos información suficiente.
    Otra cosa es el BAM del que espero hables más adelante.

  2. Estoy de acuerdo contigo Alberto, las herramientas de BAM tienen más aplicacion construidas justo por encima de las de BPM, para así monitorizar el “negocio” que al fin y al cabo es su objetivo. La monitorización más adecuada en el ESB sería la llevada a cabo por herramientas de análisis y monitorización técnica (para ver rendimientos, cuellos de botella, etc…) como las que indicas.
    Hablaré a futuro en otro post sobre BAM y sus aplicaciones y usos reales…
    Gracias por tu apunte!

  3. Bueno, perdonadme pero discrepo:

    La existencia de un flujo en un ESB puede también ser denominada como un proceso de “short running”, es decir, pueden ser procesos de negocio que tienen un tiempo de vida de ejecución muy corto. En este caso, es un proceso de negocio el que se ejecuta en el ESB, por lo que deberíamos ser capaces de monitorizarlo.
    Con esto lo que quiero decir es que no solo es un tema técnico lo que va en un ESB, sino que a su vez puede ser un proceso de negocio, típicamente sin interacción humana y además que se ejecuta rápidamente. La cuestión es que realmente si son procesos de negocio lo que va en un ESB, ¿No debería ser BPEL o XPDL su motor de ejecución? En fin, esta es una guerra (abierta) que tengo con mis clientes y aún no tengo una respuesta clara.

  4. Hola Manuel, gracias por tu comentario,

    Entiendo perfectamente lo que dices, porque he llegado a encontrarme con el mismo problema. No obstante, a la referencia de porqué no se usa BPEL o XPDL como motor de ejecución de un ESB yo creo que es porque están pensados para cosas distintas.

    En realidad, si un proceso se considera de negocio (habría que intentar definir que se entiende por esto; y yo creo que realmente aquí es donde está la diferencia), aunque se pueda construir en un ESB como un proceso short running, no necesariamente implica que sea el mejor sitio. Si es verdad que por lo general, un motor BPEL llega a consumir y requerir más procesamiento que un flujo de un ESB montado, por ejemplo, encima de MQ. Por ello, a veces, el implementar un proceso de negocio muy simple y rápido en un ESB puede ser la solución más rápida y que mejor cumple los requisitos de rendimiento.

    Pero no hay que olvidar que la función del ESB es principalmente integradora por medio de comunicación multiprotocolo y transformadora. Si el proceso a desarrollar requiere lógica de negocio, mi observación es que debería ir construido necesariamente en un motor BPEL.

    Por ejemplo, una simple transformación de datos de un Modelo de Datos Común a un Modelo de Datos Particular de un servicio no necesita implementarse con un BPEL, puede ser perfectamente desarrollado como un flujo de un ESB (como un proxy del servicio). En este caso no hablaría de Proceso de Negocio sino más bien de Proxy de Servicio o Servicio de Negocio. Pero si además, necesitamos orquestación de servicios o interpretación de los datos de negocio, creo que debería transferirse su desarrollo a un motor BPEL.

    Aunque en un ESB se puedan hacer, a veces, las mismas cosas que en un BPEL, creo que el plano del Bus de Servicios debería ser a un nivel técnico y en el BPEL a un nivel de negocio (en lo que al manejo de la información se refiere). El tenerlo bien diferenciado permite saber donde realmente debe encajarse.

    Por ello, las herramientas de BAM suelen integrarse directamente con los BPM y no con los ESB; porque el manejo de la información de negocio, su manipulación e interpretación se hace en los procesos BPEL y no en un bus de servicios que suele utilizarse para solventar los problemas de integración de las distintas aplicaciones o sistemas de una Arquitectura Empresarial (problemas siempre a nivel técnico).

  5. MMM … si puede ser pero el gran tema de discucion en las arquitecturas distribuidas, siempre es la definicion de QUE para cada organizacion es tecnico y QUE es funcional … por eso es que para este tipo tecnologias no es claro que usar en cada caso hasta definir arquitecturas claras iniciales y sin un governance adecuado.

  6. Raul Kripalani on Abril 6th, 2008 at 2:25 am

    El ESB, además de aportar toda la funcionalidad que comentas en tu post, juega un papel muy importante en una arquitectura puramente EDA. Los eventos fluyen a través del bus sobre una solución de mensajería, bien MQ o Rendezvous (o incluso XMPP, por qué no), y no existe el concepto de procesos de negocio BPEL. Un problema menos ;)

  7. Creo que definir que cosa en que lugar, depende de realizar una clara arquitectura, de que es “tecnico” y que es “funcional”, para una organización, y a partir de esto hacer un desarrollo combinado.

Leave a Reply