Continuum

Continuum

Continuum Chile: Agilistas y Desarrolladores Web en Java, Ruby, Rails ..Java, Python, Ruby, Javascript, Ajax, Web 2.0, ESB, SOA…
Continuum

Middleware Abstraction Layer. Un MAL necesario.

Implementar una arquitectura orientada a servicios (SOA) no es una tarea trivial. Menos aliviar su implementación. Hoy esto es pan caliente para los críticos del buzzword, que intentan demostrar como es casi imposible hacer SOA con estadísticas como : 1 proyecto exitoso por 4 fracasos de cada 5 intentos.

No obstante SOA si es posible. SOA es abstracción, y cuando desarrollamos abstrayendo desarrollamos para reusar. Mientras más capaces seamos de abstraer y desacoplar a un cliente de un servicio, más capaces seremos de reusar y extender el servicio, así como probar el cliente en ambientes desconectados.

Lo que más complica la implementación de SOA es lo díficil que es crear capas de abstracción genéricas y reusables. SOA es caro porque necesita de desarrolladores capaces de crear mucha abstracción.

El proyecto
Hoy estamos intentando adjudicarnos un proyecto de consultoría para revelar el impacto que tendrá llevar a cabo SOA en una empresa cliente. Un problema es que el cliente ya tiene su propia solución de integración basada en una capa middleware que consta de servidores de mensajería y muchos conectores de inbound y outbound para invocar servicios legacy desde otros servicios legacy. Es una solución propietaria, desarrollada por una empresa proveedora. En principio un buen diseño, pero tiene falencias. No fue construida con una una visión SOA, su mantención es cara y en el tiempo será insustentable. No obstante digo que es un problema no por sus falencias (pues en un final funciona) sino porque definitivamente llevar a cabo SOA en este cliente va a estar condicionado en principio por que porciento de la solución actual es reusable cuando se seleccionen las herramientas y se diseñe una plataforma SOA. Y como ya dijimos que abstracción significa reusabilidad, entonces estará condicionado por cuan abstractos hayan sido diseñado los componentes que permiten el acceso a los servicios legacy en el middleware, o sea los conectores. Quedese sintonizado pues de adjudicarnos el proyecto crearemos una bitácora en nuestro blog sobre el trabajo que hagamos.

Middleware Abstraction Layer
Un buen diseño de una solución SOA está condicionado por un buen diseño de la capa de abstracción necesaria para desacoplar los clientes de los servicios. de nada sirve implementar una arquitectura donde los clientes de los servicios conozcan todos los detalles de su invocación como:
- Que tipo de servicio es?
- Cual es el protocolo de invocación?
- Como lo invoco?
- Como parseo la respuesta?
- Que códigos de error retorna?
- Es transaccional?

Los datos mínimos que el cliente de un servicio debe conocer son
- Su nombre.
- Que parámetros recibe como parte del contrato de invocación.
- Que estructura de datos retorna también como parte del contrato de invocación.

Con esto debiera bastar para poder invocarlo. Todo lo demás puede permanecer escondido detrás de la capa de abstracción.

Ejemplo de una capa MAL genérica bien diseñada
Pensando como un desarrollador cliente, invocar un servicio desde un lenguaje de programación debería ser tan sencillo como invocar un método de un objeto en el mismo lenguaje. Un buen diseño de una capa de invocación debe esconder tanto como se pueda del servicio en sí.

Por ejemplo invocar desde Java al servicio para obtener el libro de direcciones de una persona (que vive en una arquitectura SOA, quizas en un ESB) debería ser algo como:

// le pedimos a la fabrica de servicios que instancie
// el servicio getAddressBook
Service service = ServiceFactory.getService("getAddressBook");

// lo invocamos pasando como parámetro el nombre de la persona
// esta información forma parte del contrato de
// invocación de la interface del servicio documentada
Response response = service.call(new Object[] {"Mary Lebow"} );

// addressBook es lo que realmente esperamos
// forma parte del contrato de respuesta
// de la interface del servicio documentada
AddressBook addressBook = new AddressBook();

// le pedimos a la respuesta de la capa MAL
// que via instrospección llene el objeto addressBook
response.parseJSON(addressBook);

LOG.info("Mary Lebow vive en la calle: " + addressBook.getAddress().getStreet());
LOG.info("Su telefono de casa es " + addressBook.getPhoneNumbers()[0]);

Otro ejemplo. En caso que la respuesta venga en formato XML (quizás por definición del servicio) podriamos ejecutar consultas a la respuesta usando XPath, que tal algo como:

// se ejecuta una consulta a través de XPath
// al objeto response que delega en el XML
LOG.info("Su telefono celular es " + response.xPathQuery("/addressbook/phoneNumbers[0]"));

En este caso las clases ServiceFactory y Response pertenecen a la capa MAL. El cliente se abstrae de saber definiciones relacionadas a metadata del servicio. Al mismo tiempo La responsabilidad de la capa MAL es la de traducir la llamada delegando el requerimiento hacia la capa de servicios (por ejemplo invocar un endpoint HTTP como un Web Service REST o colocar un mensaje en una cola MQ) e interpretar la respuesta. Por ejemplo arrojar una excepción si el reason code es diferente de 200, u otro ejemplo invocando diferentes dominios de parsers de la respuesta (JSON, XML, YAML) para formar objetos en el lenguaje nativo (en el ejemplo Java).

Además el diseño de mi capa MAL está basado en la especificación del protocolo HTTP. Por ejemplo el objeto Response puede contener metadata sobre la invocación que podría ser interpretada por clientes agentes para tomar decisiones:
- response.getType() // retorna XML, JSON, HTML, LARGO-POSICION
- response.status() // versión y nombre del protocolo de invocación usado, por ejemplo HttpXmlRequest v1.1
- response.reasonCode() // el código de respuesta, 200 OK, 404 Servicio no encontrado, etc.
- response.authenticate() // si necesita de autenticacion y cual es el m+etodo de hacerlo

Lo que debemos tener es una única capa MAL por plataforma o lenguaje de programación usado como cliente, por ejemplo una capa para Java, otra para Python, otra para C, etc.

Conclusiones
La principal ventaja de SOA es conseguir reusar servicios. Su principal desventaja es lo díficil que es facilitar el uso de los servicios abstrayendo a los clientes de la arquitectura. La abstracción debería estar siempre en la mente de un buen desarrollador, por tanto SOA es posible.

WOA y la web como ESB (Enterprise Service Bus)

Con la Web 2.0, las APIs Web de colaboración, la masificación de AJAX y la creciente conectividad de dispositivos a la internet, la pregunta es si estamos listos para asumir que la nueva tendencia es WOA.

WOA

Que es WOA?

  1. Acronismo de Web Oriented Architecture
  2. Sigue los principios REST. La información es representada en forma de recursos y accedida y modificada por protocolos y métodos especificados en la URI (contrato). El protocolo estándar es HTTP.
  3. Existen varias formas de representación del recurso, y son los componentes involucrados los encargados de conocer cual es la forma. Por ejemplo HTML, JSON, XML, MP3, AVI, JPEG, PNG, JavaScript.
  4. El contrato del servicio está implicito en la URL + la forma en que se recibe el recurso.

La Web como ESB

WOA + REST

La internet, especificamente la web fue desde el comienzo un BUS de SERVICIOS abierto, escalable, seguro, reusable, y extremadamente probado.

Diferencia más clara entre SOA y WOA

Mientras SOA tiende a ser un pequeño conjunto de “endpoints” mediante el cual es posible acceder a un conjunto grande de servicios basando su contrato en Schemas XML. WOA tiende a ser un conjunto grande de “endpoints” abiertos, cada uno identificando un servicio sobre un recurso (por ejemplo este post, o todos los post del mes de Junio) y basando su contrato en la URI del recurso y en su forma de representación (por ejemplo HTML).

SOA fue creado por los evangelistas en en presente siglo, mientras WOA existe desde que existe la Web.

Entonces la pregunta es: cual será la tendencia?

Referencias:

  1. http://franchute-para-los-amigos.blogspot.com/2008/04/el-fin-del-buzzword-soa.html
  2. http://hinchcliffe.org/archive/2006/08/05/8489.aspx

Stateless vs Statefull dentro de un Websphere Message Broker

Websphere Message Broker

El Websphere Message Broker (WMB), producto de IBM, es normalmente una buena opción para satisfacer necesidades de ruteo y manipulación de mensajes, permitiendo a las empresas mantener sus sistemas legacy haciendo pequeños cambios a las aplicaciones existentes para que estas envíen sus salidas a colas MQSeries, una vez hecho esto se emplea el WMB para enriquecer, reformatear y finalmente rutear el mensaje a nuevos ambientes.

Staless vs Statefull

Sin embargo WMB es un sistema “stateless”. Esto significa que no provee un método integral de seguimiento de la transacción de un mensaje en su transformación, y ruteo desde la fuente hasta el destino final. Y a pesar que hasta cierto punto se podría emular este comportamiento con el empleo de los nodos “Aggregate”, existen limitaciones como la de no tener una vista global del proceso de negocio. Entonces, si fuera necesario contar con un sistema “statefull” (contrario a “staless”), capaz de mantener un seguimiento integral de la transacción del mensaje desde el servicio que lo origina hasta el servicio que lo consume, se hace necesario el uso del producto WebSphere Process Server (WPS). De esta forma y empleando los beneficios brindados por el “Business Process Execution Language” (conocido en la literatura como BPEL), es posible controlar el estado de un mensaje generado incluso en sistemas remotos, dejando trazas de la transacción en cada operación de transformación, validación y ruteo a través de los múltiples sistemas por los que pase y manteniendo una vista global del proceso. El componente dentro del Process Server WPS encargado de proveer esta vista conocida como ‘end to end’ es el Process Choreographer.

Actualmente IBM ha emitido Enterprise Payment Processing (EPP) para emplearlo junto al WMB, adicionalmente provee una interfaz de usuario y un modelo de datos y ofrece también un equivalente al Process Choreographer para WMB que permite mantener estados de ambientes para transacciones que fluyen a través de una o mas manipulaciones realizadas en un ambiente de WMB..

Algunas ventajas del EPP

A continuación listamos algunas de las ventajas del uso del Enterprise Payment Processing:

Skill set – Facilidades para encontrar recursos de WMB.
Financial data model – significa que no necesita emplear su tiempo en construir un modelo de datos. IBM basa sus formatos internos en el estandar 20022 que provee un modelo abierto que permite a las instituciones fucionar sus modelos unicos de datos con los modelos estándares.
Process Choreographer – Orquestador de transacciones para WMB.

Monitoring and Reporting – usando el Process Choreographer, puede costumizar reportes con datos obtenidos de la data warehouse de EPP.

Nuestra recomendación:

Si está interesado en el uso de WPS y/o ya está empleando el WMB, dedique un tiempo a analizar si el IBM EPP puede satisfacer sus requerimientos.

Entradas Siguientes »

 
Copyright © 2012 Continuum Ltda. Coronel Pereira 72. Oficina 903. Las Condes. Santiago. Chile
Tel: +56 2 9341951