Google

jueves, junio 22, 2006

Principios de la orientación a servicios

Un problema con el que nos podemos encontrar a la hora de construir una aplicación SOA es si la aplicación construida realmente es una aplicación "SOA Compliant". Para comprobar si una aplicación lo es, la mejor forma de hacerlo es chequeando que la aplicación cumpla con los Principios de la Orientación a Servicios.

No existe una definición estándar de cuales son los Principios de la Orientación a Servicios, por lo tanto, lo único que se puede proporcionar es un conjunto de Principios que estén muy asociados con la Orientación a Servicios. Estos Principios según Thomas Erl son:


  • Los Servicios deben ser reusables: Todo servicio debe ser diseñado y construido pensando en su reutilización dentro de la misma aplicación, dentro del dominio de aplicaciones de la empresa o incluso dentro del dominio público para su uso masivo.

  • Los Servicios deben proporcionar un contrato formal: Todo servicio desarrollado, debe proporcionar un contrato en el cual figuren: el nombre del servicio, su forma de acceso, las funcionales que ofrece, los datos de entrada de cada una de las funcionalidades y los datos de salida. De esta manera, todo consumidor del servicio, accederá a este mediante el contrato, logrando así la indepencia entre el consumidor y la implementación del propio servicio. En el caso de los Servicios Web, esto se logrará medienta la definición de interfaces con WSDL.
  • Los Servicios deben tener bajo acoplamiento: Es decir, que los servicios tienen que ser independientes los unos de los otros. Para lograr ese bajo acoplamiento, lo que se hará es que cada vez que se vaya a ejecutar un servicio, se accederá a él a través del contrato, logrando así la independencia entre el servicio que se va a ejecutar y el que lo llama. Si conseguimos este bajo acoplamiento, entonces los servicios podrán ser totalmente reutilizables.
  • Los Servicios deben permitir la composición: Todo servicio debe ser construido de tal manera que pueda ser utilizado para construir servicios genéricos de más alto nivel, el cual estará compuesto de servicios de más bajo nivel. En el caso de los Servicios Web, esto se logrará mediante el uso de los protocolos para orquestación(WS-BPEL) y coreografía (WS-CDL).
  • Los Servicios deben de ser autónomos: Todo Servicio debe tener su propio entorno de ejecución. De esta manera el servicio es totalmente independiente y nos podemos asegurar que así podrá ser reutilizable desde el punto de vista de la plataforma de ejecución.
  • Los Servicios no deben tener estado: Un servicio no debe guardar ningún tipo de información. Esto es así porque una aplicación está formada por un conjunto de servicios, lo que implica que si un servicio almacena algún tipo de información, se pueden producir problemas de inconsistencia de datos. La solución, es que un servicio sólo contenga lógica, y que toda información esté almacenada en algún sistema de información sea del tipo que sea.
  • Los Servicios deben poder ser descubiertos: Todo servicio debe poder ser descubierto de alguna forma para que pueda ser utilizado, consiguiendo así evitar la creación accidental de servicios que proporcionen las mismas funcionalidades. En el caso de los Servicios Web, el descubrimiento se logrará publicando los interfaces de los servicios en registros UDDI.

Cuando se desarrollan aplicaciones SOA es muy útil y necesario tener en cuenta siempre estos principios, ya que nos van a dar las pautas necesarias para tomar ciertas decisiones de diseño complejas.

Como se habrá podido observar, una característica muy importante de los Principios de la Orientación a Servicios, es que todos ellos se inter-relacionan. El siguiente gráfico muestra la inter-relación de los diferentes principios:


Como se puede observar en el gráfico, el objetivo de la Orientación a Servicios es obtener software totalmente reutilizable a través de un conjunto de técnicas y principios como los descritos anteriormente.

viernes, junio 09, 2006

SOA y los Servicios Web (II)

Este artículo se centra en el segundo tipo de Arquitecturas Orientadas a Servicios, que yo he denominado SOA de segunda generación.

Es el tipo utilizado actualmente, porque está basado en el SOA tradicional, añadiendo lo necesario para cubrir sus carencias. Es decir, proporciona los elementos necesarios para cumplir con todos los principios de la orientación a objetos.

El esquema básico de una SOA de segunda generación es el mostrado en el siguiente gráfico:

Como se puede observar, una SOA de segunda generación está formada por un conjunto de Funciones y por la Calidad del Servicio.

La Funciones están formadas por:

  • Transporte: Mecanismo utilizado para trasladar las peticiones desde el cliente, hasta el proveedor del servicio, y viceversa.
  • Protocolo de comunicación: Es el sistema de comunicación entre el cliente y el proveedor de servicios.
  • Descripción del servicio: Es un esquema utilizado para describir qué servicio es, como se le puede invocar, y cuales son los datos necesarios para realizar su invocación.
  • Servicio: Es la implementación del servicio.
  • Proceso de negocio: Es una colección de servicios, invocados en una determinada secuencia, con un conjunto particular de reglas para satisfaces un requisito de negocio.
  • Registro de servicios: Es un repositorio de servicios y datos, usado por los proveedores de servicio y publicar los servicios, y para los clientes, donde buscarlos.

La calidad del servicio por:

  • Política: Son un conjunto de reglas bajo las cuales, un proveedor de servicio hace que el servicio esté disponible para los clientes (WS-Policy).
  • Seguridad: Son un conjunto de reglas que podrían ser aplicadas en la identificación, autorización y control de acceso a los servicios, por parte del cliente (WS-Security).
  • Transacción: Conjunto de atributos que podrían ser aplicados sobre un grupo de servicios para devolver un conjunto de datos consistentes (WS-Transaction, WS-Coordination).
  • Gestión: Conjunto de atributos que podrían ser aplicados para gestionar los servicios proporcionados (WS-Manageability).

Es decir, las SOA de segunda generación se basan en ampliar su funcionalidad mediante el uso de los estándares WS, que proporcionan funcionalidades como gestión de transacciones, seguridad, etc..

martes, junio 06, 2006

SOA y los Servicios Web (I)

En la actualidad el concepto de SOA ha resurgido, gracias al auge y madurez de una nueva tecnología: los Servicios Web.

Los Servicios Web se han convertido en el estandarte de SOA, ya que esta tecnología posee un conjunto de características que permiten cubrir todos los principios de la orientación a servicios, no como otras posibles tecnologías de implementación como colas de mensajes o CORBA.

Centrándonos en los Servicios Web, podemos decir que con ellos se pueden generar dos tipos de Arquitecturas Orientadas a Servicios:

  • Arquitectura Orientada a Servicios Tradicional.
  • Arquitectura Orientada a Servicios de segunda generación.

En el presente artículo describiré la primera de ellas.

La SOA Tradicional es aquella que utiliza los principios y tecnologías básicos de los Servicios Web. Esto significa utilizar SOAP como lenguaje de intercambio, WSDL como lenguaje para la descripción de los servicios y UDDI para la publicación o registro de los mismos. En el dibujo que se muestra a continuación, se puede ver la estructura básica de funcionamiento de una SOA tradicional.

En el gráfico anterior, se puede observar la existencia de tres roles claramente diferenciados:

  • Cliente del servicio: Es el que solicita la ejecución del servicio web, y por lo tanto el que lo consume.
  • Proveedor del servicio: Es el encargado de implementar el servicio web y ofrecerlo a los clientes.
  • Registro del servicio: Es un repositorio donde se almacenan las descripciones de los servicios, para que así los clientes puedan buscar el servicio web que mejor se adapte a sus necesidades.

La secuencia de ejecución es la siguiente:

1. El proveedor del servicio da de alta el servicio web en el registro. Para realizar esto, el proveedor almacena en el registro el documento de descripción de este.

2. El solicitante del servicio busca en el registro un servicio web que pueda adaptarse a sus necesidades.

3. Una vez seleccionado el servicio, el solicitante lo invoca mediante el envío de un mensaje SOAP, en el cual se indica la acción a realizar y los datos de entrada.

4. El servicio web recibe la petición y ejecuta la funcionalidad. Para finalizar envía un mensaje SOAP al solicitante con los resultados obtenidos.

Por lo tanto, una SOA tradicional estará compuesta por un conjunto de servicios que reciben y envían mensajes SOAP en base a una descripción WSDL. Este tipo de arquitecturas hoy en día es muy utilizado, pero no es el más óptimo debido a que no porpociona una serie de características esenciales a la hora de crear una Arquitectura profesional. Estas características son:

  • Seguridad
  • Transaccionabilidad
  • Garantía de entrega
  • Orquestación
  • Coreografía
  • Direccionamiento
  • etc...

Estas características las ofrecen las SOA de segunda generación, que serán el tema central de otro artículo.