La arquitectura orientada a los servicios (SOA)
La arquitectura orientada a los servicios (SOA) es un tipo de diseño de software que permite reutilizar sus elementos gracias a las interfaces de servicios que se comunican a través de una red con un lenguaje común.
Un servicio es una unidad autónoma de una o más funciones del software diseñada para realizar una tarea específica, como recuperar cierta información o ejecutar una operación. Contiene las integraciones de datos y código que se necesitan para llevar a cabo una función empresarial completa y diferenciada. Se puede acceder a él de forma remota e interactuar con él o actualizarlo de manera independiente.
En otras palabras, la SOA integra los elementos del software que se implementan y se mantienen por separado, y permite que se comuniquen entre sí y trabajen en conjunto para formar aplicaciones de software en distintos sistemas.
¿Cómo funciona la arquitectura orientada a los servicios?
Antes de que se empezara a utilizar la SOA a fines de los noventa, era muy difícil conectar una aplicación con los servicios alojados en otro sistema, y se necesitaba una integración profunda de punto a punto (conectividad, enrutamiento, traducción de los modelos de datos, etc.). Luego, los desarrolladores debían repetir el proceso para cada proyecto nuevo. Este modelo se conocía como "monolítico", ya que el código para toda la aplicación formaba parte de una sola implementación. Si algo no funcionaba correctamente, debía darla de baja por completo hasta que se solucionaran los problemas y luego volver a implementarla como una versión nueva.
Dado que la SOA expone los servicios utilizando protocolos estándar de red para enviar solicitudes o acceder a los datos (p. ej., SOAP, JSON, ActiveMQ o Apache Thrift), no es necesario que los desarrolladores realicen las integraciones desde cero. De hecho, pueden utilizar los patrones llamados buses de servicios empresariales (ESB) para integrar un elemento centralizado y los sistemas de backend, y ponerlos a disposición de todos como interfaces de servicios. Asimismo, pueden reutilizar las funciones actuales en vez de volver a crearlas.
En este tipo de arquitectura, los servicios se comunican por medio de un sistema "sin conexión directa". Se trata de un método para interconectar los elementos en un sistema o una red, de modo que puedan transmitir información o coordinar un proceso empresarial, mientras se reduce la dependencia entre ellos. En consecuencia, esto da origen a una nueva aplicación.
Ventajas de la arquitectura SOA frente al enfoque monolítico
- Comercialización más rápida y mayor flexibilidad: la posibilidad de reutilizar los servicios agiliza y simplifica el proceso de ensamblaje de las aplicaciones. Los desarrolladores no tienen que empezar siempre desde cero, tal como sucede con las aplicaciones monolíticas.
- Uso de la infraestructura heredada en los mercados nuevos: la SOA permite que los desarrolladores tomen las funciones de una plataforma o un entorno y las ajusten e implementen en otros nuevos.
- Reducción de los costos gracias a una mayor agilidad y un desarrollo más eficiente
- Mantenimiento sencillo: dado que todos los servicios son autónomos e independientes, se puede modificar y actualizar cada uno cuando sea necesario, sin afectar al resto.
- Escalabilidad: la SOA posibilita la ejecución de los servicios en varios lenguajes de programación, servicios y plataformas, lo cual aumenta la escalabilidad de forma considerable. Además, utiliza un protocolo de comunicación estandarizado con el que las empresas pueden disminuir la interacción entre los clientes y los servicios, lo cual permite ajustar las aplicaciones con menos presiones e inconvenientes.
- Mayor confiabilidad: la SOA genera aplicaciones más confiables, ya que es más fácil depurar servicios pequeños que un código de gran volumen.
- Gran disponibilidad: las instalaciones de la SOA están disponibles para todos.
Elementos de la arquitectura SOA
Los elementos esenciales de la arquitectura orientada a los servicios consisten en tres funciones.
Proveedor de servicios
Se encarga de crear servicios web, ofrecerlos a un registro de servicios disponibles y gestionar sus condiciones de uso.
Agente o registro de servicios
Se encarga de brindar información acerca del servicio a quien lo solicite, y puede ser público o privado.
Usuario del servicio o persona que lo solicita
Buscará un servicio en el registro o por medio del agente, y se conectará con el proveedor para recibirlo.
Aún queda mucho por aprender acerca de Red Hat y los microservicios.
Diferencias entre la arquitectura orientada a los servicios y los microservicios
La arquitectura orientada a los servicios introdujo un concepto de servicios que se convirtió en un elemento central de la virtualización y el cloud computing modernos en aspectos como el middleware y los microservicios.
Los conceptos de la SOA y la arquitectura de microservicios son similares, por lo que la gente suele confundirlos. La principal característica que los distingue es su alcance: la SOA es un enfoque de arquitectura para toda la empresa, mientras que los microservicios son una estrategia de implementación que utilizan los equipos de desarrollo de aplicaciones.
Además, la comunicación con sus respectivos elementos también es diferente. La SOA utiliza un ESB, y los microservicios se pueden comunicar entre sí sin estado, a través de las API que no dependen de un lenguaje. La independencia de las API también permite que los equipos de desarrollo puedan elegir con qué herramientas desean trabajar. En este sentido, los microservicios pueden ser más adaptables y flexibles.
En algunas ocasiones, también se confunde a la SOA con el software como servicio (SaaS). Se trata de una forma de cloud computing que ofrece a los usuarios una aplicación en la nube junto con toda su infraestructura de TI y plataformas subyacentes. En la arquitectura orientada a los servicios, los proveedores pueden ofrecer servicios web como aplicaciones de SaaS. Por lo general, un proveedor de nube, como AWS, Azure o IBM Cloud, gestiona el entorno en el cual se aloja esta aplicación.
Los usuarios utilizan un navegador web en sus computadoras o dispositivos móviles para interactuar con el software y pueden conectarlo con otras funciones por medio de las API (p. ej., las API de REST o de SOAP).
Red Hat y los microservicios
Debido a los avances en la tecnología de contenedores, los microservicios se convirtieron en la base para las aplicaciones originales de la nube. Se trata de microservicios sin conexión directa que se implementan en los contenedores de Linux y se conectan por medio de API o de una malla de servicios para el enrutamiento de los mensajes.
Cada elemento implementa una función empresarial, y los pequeños equipos de DevOps que utilizan flujos de trabajo como la integración y la distribución continuas (CI/CD) se encargan de desarrollarlos de manera independiente. Esto permite que los sistemas de software se desarrollen más rápido, se implementen de forma automática y se actualicen con regularidad, sin las limitaciones que presentan los ciclos monolíticos.
Red Hat cuenta con una cartera de productos open source que incluye Red Hat®Enterprise Linux® y Red Hat OpenShift, y le permite asociarse con las empresas que desean trasladar la infraestructura y el desarrollo de las aplicaciones al entorno dinámico y adaptable del cloud computing de forma progresiva, sin dejar de aprovechar al máximo su infraestructura actual.