SOA, arquitectura orientada a servicios
Entremos en materia, SOA es una arquitectura distribuida orientada a servicios. Un servicio es un componente que encapsula la lógica requerida para ejecutar un proceso de negocio, lo que implica dividir los procesos de negocio en diferentes unidades lógicas (servicios) que hacen parte de una solución empresarial distribuida. Cada uno de estos procesos de negocio debe identificarse y habilitarse para alcanzar los objetivos del negocio.(Christudas, Barai, & Caselli, 2008) .
Un servicio puede estar compuesto por otros servicios, y requiere de una descripción que indique nombres, parámetros y ubicación, para que pueda ser utilizado. Esta información se especifica en un contrato o interfaz. En tal sentido, el contrato de un servicio es un acuerdo entre el proveedor y el consumidor, que especifica los datos de entrada y salida, además del formato (XML, JSON, Java Object, etc.) en el que va intercambiarse esta información. (Richards, 2016)
Veamos cuáles son los principios de la orientación a servicios, de acuerdo con Erl (2016):
Principio | Descripción |
Estandarización | Los servicios deben seguir estándares en su diseño y en la definición de sus interfaces o contratos, para facilitar su uso y evolución controlada. |
Reducció del acoplamiento | Al definir las relaciones dentro y fuera de los límites del servicio, debe haber una constante tendencia a la reducción de dependencias entre el contrato del servicio, su implementación y sus consumidores. Lo que se busca es mantener la independencia en el diseño y evolución del servicio, asegurando una línea base de interoperabilidad. |
Abstracción | Los contratos de los servicios deben contener la mínima información necesaria para exponer en sus contratos o interfaces, ocultando los detalles del diseño e implementación del mismo. |
Reusabilidad | Siempre se debe diseñar un servicio pensando en que sus características sirvan a más de un propósito y varios consumidores, buscando que sea un activo reutilizable de la empresa. La reusabilidad es una de las bases del modelo orientado a servicios. |
Autonomía | El servicio debe tener el control significativo sobre el ambiente en donde se ejecuta y los recursos de que dispone. |
Sin estado | Mantener excesiva información de estado en un servicio puede comprometer la disponibilidad y predictibilidad de su comportamiento. En este sentido, los servicios pv. deben ser diseñados para mantener el estado, solo cuando sea requerido. |
Descubrimiento | Los servicios deben contar con los metadatos necesarios para facilitar su descubrimiento e interpretación. Es decir, deben proveer información suficiente para que los consumidores puedan identificarlo, utilizarlo y reutilizarlo. |
Composición | Los servicios deben estar en capacidad de participar como miembros efectivos en una composición para crear servicios compuestos, independiente del tamaño y complejidad de estos últimos. |
Ahora bien ¿Qué tecnologías o herramientas tenemos disponibles para implementar SOA?, hay gran variedad de opciones que se vienen utilizando, para implementar este tipo de arquitectura, tenemos:
- RMI - Remote Method Invocation: Método de invocación remota del stack de tecnologías Java.
- Remoting .Net: Método de invocación remota del stack de tecnologías .Net.
- JMS - Java Message Service: Servicio de mensajería de java.
- MSMQ - Microsoft Message Queuing: Servicio de mensajería de .Net.
- SOAP -Simple Object Access Protocol: Protocolo para intercambio de mensajes, que utiliza el formato XML y es transmitido a través de HTTP.
- REST - Representational State Transfer: Permite la interoperabilidad entre sistemas, haciendo uso de los comandos HTTP e intercambiando información en formatos XML y JSON.
Dato importante: Antes de continuar, aclaremos la diferencia entre servicio y servicio web, en palabras sencillas, el servicio tiene una connotación conceptual y de diseño, mientras que el servicio web corresponde a la materialización del diseño, haciendo uso de protocolos estándares de la World Wide Web, como lo es el HTTP.