La arquitectura orientada a servicios (SOA) define una forma de hacer que los componentes de software sean reutilizables e interoperables a través de interfaces de servicio. Los servicios utilizan estándares de interfaz comunes y un patrón arquitectónico para que puedan incorporarse rápidamente a nuevas aplicaciones.
La SOA elimina las tareas del desarrollador de aplicaciones que antes rediseñaba o duplicaba funciones existentes, o que tenía que saber cómo conectar o proporcionar interoperabilidad con funciones existentes.
Cada servicio de una SOA incorpora el código y los datos necesarios para ejecutar una función empresarial completa y discreta (por ejemplo, comprobar la solvencia de un cliente, calcular la cuota mensual de un préstamo o tramitar una solicitud de hipoteca.). Las interfaces de servicio proporcionan un acoplamiento flexible. Esto significa que se pueden invocar con poco o ningún conocimiento sobre la implementación del servicio en segundo plano, lo que reduce las dependencias entre aplicaciones.
Esta interfaz es un contrato de servicio entre el proveedor de servicios y el consumidor de servicios. Las aplicaciones que hay detrás de la interfaz de servicio pueden estar escritas en Java, Microsoft .Net, Cobol o cualquier otro lenguaje de programación. Dichas aplicaciones pueden suministrarse como software empaquetado por un proveedor (por ejemplo, SAP), como aplicaciones SaaS (por ejemplo, Salesforce CRM) o como aplicaciones de código abierto.
Las interfaces de servicio se definen con frecuencia mediante el lenguaje de definición de servicios web (WSDL), que es una estructura de etiquetas estándar basada en xml (lenguaje de marcado extensible).
Los servicios se exponen mediante el uso de protocolos de red estándar, como el protocolo simple de acceso a objetos (SOAP)/HTTP o Restful HTTP (JSON/HTTP), para enviar solicitudes de lectura o modificación de datos. El gobierno del servicio controla el ciclo de vida del desarrollo y, en la etapa adecuada, los servicios se publican en un registro que permite a los desarrolladores encontrarlos rápidamente y reutilizarlos para ensamblar nuevas aplicaciones o procesos de negocio.
Estos servicios se pueden crear desde cero, pero a menudo se crean exponiendo funciones de sistemas heredados como interfaces de servicio.
De este modo, la SOA representa una etapa importante en la evolución del desarrollo y la integración de aplicaciones en las últimas décadas. Antes de que surgiera la SOA a finales de la década de 1990, conectar una aplicación a datos o funciones alojados en otro sistema requería una integración punto a punto compleja, integración que los desarrolladores tenían que recrear, en parte o en su totalidad, para cada nuevo proyecto de desarrollo. Exponer esas funciones a través de servicios SOA permitió al desarrollador reutilizar fácilmente la capacidad existente y conectarse a través de la arquitectura SOA ESB (véase más abajo).
Aunque la SOA y la arquitectura de microservicios más reciente comparten muchos términos (es decir, "servicio" y "arquitectura"), solo están vagamente relacionadas y, de hecho, operan en ámbitos diferentes, como se explica más adelante en este artículo.
Boletín del sector
Manténgase al día sobre las tendencias más importantes e intrigantes del sector en materia de IA, automatización, datos y mucho más con el boletín Think. Consulte la Declaración de privacidad de IBM.
Su suscripción se enviará en inglés. Encontrará un enlace para darse de baja en cada boletín. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.
Un ESB, o bus de servicio empresarial, es un patrón arquitectónico mediante el cual un componente de software centralizado realiza integraciones entre aplicaciones. Realiza transformaciones de modelos de datos, gestiona la conectividad y la mensajería, realiza enrutamiento, convierte protocolos de comunicación y gestiona potencialmente la composición de múltiples solicitudes.
El ESB puede hacer que estas integraciones y transformaciones estén disponibles como interfaz de servicio para su reutilización por aplicaciones nuevas. El patrón ESB suele implementarse mediante un tiempo de ejecución de integración y un conjunto de herramientas especialmente diseñados que ayudan a garantizar la mejor productividad posible.
Es posible implementar una SOA sin un ESB, pero en ese caso se trataría simplemente de un conjunto de servicios. Cada propietario de aplicación tendría que conectarse directamente a cualquier servicio que necesite y realizar las transformaciones de datos necesarias para cumplir cada una de las interfaces de servicio.
Esto supone mucho trabajo (incluso si las interfaces son reutilizables) y crea un importante reto de mantenimiento en el futuro, ya que cada conexión es punto a punto. De hecho, los ESB se consideraron, finalmente, un elemento tan de facto de cualquier implementación SOA que los dos términos a veces se utilizan como sinónimos, creando confusión.
En comparación con las arquitecturas que la precedieron, la SOA ofreció beneficios significativos a la empresa:
En 2010, las implementaciones de SOA iban a toda máquina en las principales empresas de prácticamente todos los sectores. Por ejemplo:
Delaware Electric recurrió a la SOA para integrar sistemas que antes no se comunicaban entre sí, lo que se tradujo en eficiencias de desarrollo que ayudaron a la organización a mantenerse solvente durante una congelación de las tarifas eléctricas de cinco años exigida por el estado.
Cisco adoptó la SOA para asegurarse de que su experiencia de pedido de productos fuera coherente en todos los productos y canales al exponer los procesos de pedido como servicios que las divisiones, adquisiciones y business partners de Cisco podrían incorporar a sus sitios web.
Independence Blue Cross (IBC) de Filadelfia implementó una arquitectura orientada a servicios (SOA) para garantizar que los diferentes componentes que gestionaban datos de pacientes (agentes de atención al cliente de IBC, consultas médicas y usuarios del sitio web de IBC) utilizaran la misma fuente de datos (una "única fuente fiable").
Los expertos han escrito miles de páginas impresas y digitales comparando SOA y microservicios, y analizando en profundidad su relación. A los efectos de este artículo, las principales diferencias entre ambos son el acoplamiento de los componentes y el ámbito de uso:
la SOA es un estilo arquitectónico de integración y un concepto para toda la empresa. Permite exponer las aplicaciones existentes a través de interfaces débilmente acopladas, cada una de las cuales corresponde a una función empresarial que permite a las aplicaciones de una parte de una empresa ampliada reutilizar funciones en otras aplicaciones.
La arquitectura de microservicios es un estilo arquitectónico de aplicación y un concepto de ámbito de aplicación. Permite dividir el interior de una única aplicación en pequeñas piezas que se pueden cambiar, escalar y administrar de forma independiente. No define cómo se comunican las aplicaciones entre sí, por lo que volvemos al ámbito empresarial de las interfaces de servicio proporcionadas por la SOA.
La arquitectura de microservicios surgió y ganó fuerza con el auge de la virtualización, el cloud computing, las prácticas de desarrollo ágil y DevOps. La mayoría de las ventajas de los microservicios en estos contextos surgen del desacoplamiento de los componentes, lo que simplifica y mejora lo siguiente:
Para profundizar en las diferencias entre SOA y microservicios, consulte SOA frente a microservicios: ¿cuál es la diferencia?
Del mismo modo que la arquitectura de microservicios tiene el potencial de aportar mejoras en agilidad, escalabilidad y resiliencia al diseño de aplicación, estas mismas técnicas también pueden aplicarse a la integración.
Esto es importante porque, con el tiempo, el patrón ESB altamente centralizado y su equipo centralizado de especialistas en integración pueden convertirse en un cuello de botella. Si adoptamos los principios de los microservicios, podemos dividir el ESB en una integración más detallada y descentralizada. Esta es una de las premisas fundamentales de la integración ágil.
Un servicio totalmente gestionado y de inquilino único para desarrollar y entregar aplicaciones Java.
Utilice el software y las herramientas de DevOps para crear, implementar y gestionar aplicaciones nativas de la nube en varios dispositivos y entornos.
El desarrollo de aplicaciones en la nube significa crear una vez, iterar rápidamente e implementar en cualquier lugar.