¿Qué es la arquitectura orientada a servicios?

La arquitectura orientada a servicios (SOA) surgió a principios de este siglo como una evolución de la informática distribuida. Antes de SOA, los servicios se entendían como el resultado final del proceso de desarrollo de aplicaciones. En SOA, la propia aplicación se compone de servicios. Los servicios se pueden brindar individualmente o combinados como componentes en un servicio compuesto más grande.

Los servicios interactúan a través del cable utilizando un protocolo como REST o SOAP (Protocolo simple de acceso a objetos). Los servicios están débilmente acoplados , lo que significa que la interfaz del servicio es independiente de la implementación subyacente. Los desarrolladores o integradores de sistemas pueden componer uno o más servicios en una aplicación sin saber necesariamente cómo se implementa cada servicio.

Este artículo es una descripción general de Java SOA y las características clave de una arquitectura orientada a servicios implementada utilizando servicios web basados ​​en SOAP. También compararé brevemente SOA y microservicios y analizaré la diferencia entre los servicios web basados ​​en RESTful y SOAP en Java.

Servicios web y SOA

SOA y los servicios web se combinan con frecuencia, pero no son lo mismo. SOA es una arquitectura que permite a los desarrolladores combinar múltiples servicios de aplicaciones en un servicio compuesto más grande. SOA se puede implementar utilizando servicios web basados ​​en SOAP o API REST, o en ocasiones una combinación de ambos. Es importante comprender que en SOA, un servicio es cualquier recurso disponible de forma remota que puede responder a las solicitudes. Un servicio web se implementa mediante protocolos específicos.

¿Por qué la arquitectura orientada a servicios?

SOA aborda tres desafíos empresariales comunes:

  • Responda rápidamente a los cambios comerciales.
  • Aproveche las inversiones en infraestructura existentes.
  • Apoyar nuevos canales de interacción con clientes, socios y proveedores.

La infraestructura empresarial es heterogénea en todos los sistemas operativos, aplicaciones, software del sistema e infraestructura de aplicaciones. Como resultado, muchos sistemas empresariales están compuestos por aplicaciones complejas e inconsistentes que brindan una variedad de servicios interdependientes. Las aplicaciones existentes que ejecutan los procesos comerciales actuales son fundamentales, por lo que comenzar desde cero o modificarlas es una propuesta delicada. Pero las empresas deben poder modificar y ampliar la infraestructura técnica para satisfacer las demandas comerciales.

SOA y microservicios

Los microservicios es un estilo arquitectónico desarrollado a partir de SOA. Ambas son arquitecturas distribuidas y ambas ofrecen un paradigma desacoplado. Mientras que la arquitectura orientada a servicios es más pesada en infraestructura, los microservicios ofrecen un estilo de desarrollo más flexible y ligero. Ambos tienen pros y contras, y ambos se utilizan ampliamente. En términos generales, SOA es implementado o mantenido con mayor frecuencia por empresas establecidas que tienen los recursos para respaldar más formalidad. Los microservicios a menudo atraen a organizaciones nuevas o en crecimiento que requieren agilidad.

En comparación con una arquitectura monolítica, la naturaleza débilmente acoplada de SOA hace que sea relativamente sencillo conectar nuevos servicios o actualizar los servicios existentes para los nuevos requisitos comerciales. También ofrece la opción de hacer que los servicios sean consumibles a través de diferentes canales y exponer aplicaciones heredadas como servicios, salvaguardando así las inversiones en infraestructura.

Debido a que están débilmente acoplados, los componentes SOA se pueden cambiar con un impacto mínimo en otros componentes. Los componentes también se pueden agregar a la arquitectura de manera estandarizada y se pueden escalar para abordar la carga.

Como ejemplo, considere cómo una empresa podría utilizar un conjunto de aplicaciones existentes para crear una nueva aplicación compuesta de cadena de suministro. Si bien las aplicaciones existentes son heterogéneas y están distribuidas en varios sistemas, su funcionalidad se expone y se accede a ellas mediante interfaces estándar.

Matthew Tyson

Características clave de SOA

SOA puede ser tan simple como un solo componente que consume servicios proporcionados por otro componente o tan sofisticado como una gama de componentes que interactúan a través de un bus de servicio empresarial como el ESB de MuleSoft. Independientemente de la escala, la clave para una implementación SOA exitosa es utilizar la menor complejidad posible para lograr sus objetivos. Su primera y última pregunta siempre debe ser: ¿Este diseño satisface nuestros requisitos comerciales?

Independientemente de la escala o la complejidad, el patrón de una arquitectura orientada a servicios es más o menos el mismo:

  • Los proveedores de servicios exponen los puntos finales y describen las acciones disponibles en cada punto final.
  • Los consumidores de servicios emiten solicitudes y consumen respuestas.
  • Los proveedores de servicios generan mensajes para manejar solicitudes.

Implementando arquitectura orientada a servicios

Para implementar SOA, comienza con la arquitectura de servicio básica, luego proporciona la infraestructura, es decir, protocolos y otras herramientas que permiten la comunicación y la interoperabilidad. La Figura 2 muestra un diagrama de una arquitectura de servicio típica.

Matthew Tyson

En este diagrama, tres consumidores invocan servicios enviando mensajes a un bus de servicio empresarial, que transforma y enruta los mensajes a una implementación de servicio adecuada. Un motor de reglas comerciales incorpora reglas comerciales en un servicio o entre servicios. Una capa de gestión de servicios gestiona actividades como auditoría, facturación y registro.

Los componentes de esta arquitectura están débilmente acoplados, por lo que se pueden cambiar o actualizar con un impacto relativamente mínimo en la aplicación en su conjunto. Esto le da a la empresa flexibilidad para agregar o actualizar procesos comerciales según sea necesario. En su mayor parte, los cambios en los servicios individuales no deberían afectar mucho a otros servicios.

Servicios web SOAP vs RESTful

Es posible adoptar el estilo SOA e implementarlo con REST, por ejemplo, usando la API JAX-RS o Spring Boot Actuator, pero esa discusión está fuera del alcance de este artículo. Consulte "SOAP vs REST vs JSON" para una comparación útil de los servicios web SOAP vs RESTful. También existe cierta superposición entre los servicios web RESTful y el estilo más ligero asociado con los microservicios.

Servicios web basados ​​en SOAP

Los servicios web implementados mediante SOAP son aún más rígidos que los servicios web RESTful o la implementación de microservicios, pero mucho más flexibles que los primeros días de SOA. Aquí solo veremos los protocolos de alto nivel requeridos para los servicios web basados ​​en SOAP.

SOAP, WSDL y XSD

SOAP, WSDL y XSD son la infraestructura fundamental de la implementación de un servicio web basado en SOAP. WSDL se utiliza para describir el servicio y SOAP es la capa de transporte para enviar mensajes entre consumidores y proveedores de servicios. Los servicios se comunican con mensajes definidos formalmente mediante XML Schema (XSD). Puede pensar en WSDL como la interfaz del servicio (ligeramente análoga a una interfaz Java). La implementación se realiza en clases de Java y la comunicación a través de la red se realiza a través de SOAP. Funcionalmente, un consumidor buscaría un servicio, obtendría el WSDL para ese servicio y luego invocaría el servicio usando SOAP.

Seguridad del servicio web

La especificación WS-I Basic Profile 2.0 aborda la seguridad de los mensajes. Esta especificación se centra en el intercambio de credenciales, la integridad del mensaje y la confidencialidad del mensaje.

Descubrimiento de servicios web

Una vez que la piedra angular del descubrimiento de servicios web, UDDI (Descripción, Definición e Integración Universal) se ha desvanecido en la historia. Hoy en día es común exponer un servicio web basado en SOAP de la misma forma que lo haría con cualquier otro servicio, a través de una URL de punto final. Como ejemplo, puede utilizar la interfaz de punto final de servicio JAX-WS y sus anotaciones @WebServicey @WebMethod.

Construyendo e implementando servicios web

Los desarrolladores de Java tienen varias opciones para crear e implementar servicios web basados ​​en SOAP, incluidos Apache Axis2 y Spring-WS; sin embargo, el estándar de Java es JAX-WS, la API de Java para servicios web XML. La idea central detrás de JAX-WS es crear clases de Java y anotarlas para crear los artefactos necesarios. Debajo del capó, JAX-WS utiliza varios paquetes de Java, incluido JAXB, una biblioteca de propósito general para vincular clases de Java a XML.

JAX-WS oculta la complejidad y los protocolos subyacentes al desarrollador, lo que agiliza el proceso de definición y despliegue de servicios SOAP basados ​​en Java. Los IDE de Java modernos como Eclipse incluyen soporte completo para desarrollar servicios web JAX-WS. La especificación JAX-WS también ha sido seleccionada para su desarrollo continuo en Yakarta EE.

Conclusión

La arquitectura orientada a servicios implementada con servicios web basados ​​en SOAP requiere definiciones de servicio más rígidas y formales que los servicios web RESTful o microservicios. Sin embargo, algunas organizaciones más grandes continúan favoreciendo el estilo más formal impuesto por SOAP. Muchos sistemas heredados a gran escala también se basan en SOAP, y algunos sistemas internos y B2B eligen servicios web basados ​​en SOAP para sus contratos API definidos de manera más formal. Ya sea que esté desarrollando o manteniendo un sistema empresarial a gran escala, comprender el patrón SOA y poder evaluar sus opciones para implementarlo le será de gran utilidad en su carrera de programación.

Esta historia, "¿Qué es la arquitectura orientada a servicios?" fue publicado originalmente por JavaWorld.