Arquitecturas Orientadas a Servicios (SOA)


Ingeniería del Software Arquitectura del Software Service-Oriented Architecture SOA TIC B2B Integración Mantenibilidad Process-Oriented Architecture Diseño Software Patrones de Diseño Java J2EE ESB

Tradicionalmente, la interacción y el diseño de aplicaciones se ha orientado en base al uso y acceso directo de los usuarios por medio de las capas de presentación e interfaces de usuario (User Interfaces, UI). Para proporcionar nueva funcionalidad, la capa de procesamiento funcional podría necesitar añadir otros componentes y módulos de negocio, así como una capa de datos apropiada a las necesidades. Este tipo de aplicaciones generalmente solucionan los problemas de ámbito local del departamento. Sin embargo, las organizaciones disponen de múltiples departamentos y todos ellos tienen relaciones y dependencias, trabajando en conjunto para satisfacer los propósitos, servicios y objetivos comunes de la organización. De esta forma, es probable que este tipo de operaciones involucren múltiples aplicaciones.

A medida que los procesos de automatización y las necesidades integradoras aumentan, las aplicaciones requieren acceso a la funcionalidad proporcionada por otras aplicaciones. Esto es muy habitual en los sistemas de gestión, como por ejemplo un gestor de las relaciones con los clientes (Customer Relation Management, CRM), elaborado por la organización, es consultado por el sistema de procesamiento de pedidos bajo la orden "obtener factura del primer pedido del cliente X". Si la aplicación está bien diseñada, existirá una función de grano grueso que proporcione esta funcionalidad. De esta forma, la aplicación y sus servicios estarán preparados para ser accedidos por otras aplicaciones que así lo requieran, estando amparadas bajo el concepto de Integración Empresarial. Esta concepción de los servicios, su composición y uso supone el núcleo del concepto Arquitectura Orientada a Servicios (Service-Oriented Architecture, SOA).

Aplicaciones de arquitectura tradicional anteriores a los enfoques de las Arquitecturas Orientadas a Servicios (SOA)

Aplicaciones de arquitectura tradicional anteriores a los enfoques de las Arquitecturas Orientadas a Servicios (SOA).

Estas dos figuras muestran las diferencias principales entre el modelo tradicional arquitectónico y los nuevos diseños basados en arquitecturas orientadas a servicios. Tradicionalmente se producía un acoplamiento entre capas, no estando bien diferenciadas y llegando a compaginar aspectos de presentación e interfaces de usuario con la propia lógica de negocio. Por otro lado, las arquitecturas SOA emergentes tienen como principio fundamental la posibilidad de ser accedidas tanto por usuarios finales, como por aplicaciones y servicios externos. Para ello, requieren de un grado de desacoplamiento superior entre capas, además de facilitar funciones de grano grueso que permitan ser descritas y usadas fácilmente, a menudo compuestas y operadas por medio de patrones de diseño y componentes Façade. En las Arquitecturas Orientadas a Servicio es inevitable la separación entre capas, de forma que la flexibilidad y composición de servicios sea sencilla de realizar, caracterizándola como una entidad de primer orden.

La Arquitectura Orientada a Servicios (SOA) sustituye a las aplicaciones y arquitecturas organizativas y software tradicionales

La Arquitectura Orientada a Servicios (SOA) sustituye a las aplicaciones y arquitecturas organizativas y software tradicionales.

Las SOA son Arquitecturas Empresariales en donde las aplicaciones son diseñadas y expuestas para proporcionar servicios de grano grueso independientes. Estos servicios son accedidos por procesos de negocio, otros servicios y aplicaciones de integración. Por este motivo, SOA es tanto un concepto de diseño, ofreciendo aplicaciones y sistemas con interfaces accesibles bien definidos que componen procesos de negocio, así como una arquitectura, ya que se ofrecen mecanismos simples para usar esos interfaces con el objetivo de realizar integraciones empresariales efectivas y flexibles.

Gracias a las arquitecturas SOA se permite que los sistemas puedan hablar unos con otros de forma sencilla a través de mecanismos comunes y estándares, tales como XML/JSON sobre HTTP o protocolos JSONB con WebSockets, con el objetivo de garantizar servicios de bajo acoplamiento. Estas arquitecturas facilitan la creación de infraestructuras empresariales estables y escalables con un elevado grado de calidad de servicio.

Este paradigma de diseño supone tanto la definición de los esquemas UI y sus flujos, como la especificación de los servicios de negocio (no asociados a interfaces de usuario) por parte de los arquitectos de la aplicación. Los requisitos funcionales de la aplicación para ser accedidos desde otras aplicaciones se proporcionan mediante métodos de servicio accesibles, aunque no es una tarea trivial y puede haber diversas vías de orquestación. Las arquitecturas distribuidas de múltiples capas y las buenas prácticas de diseño para elaborar aplicaciones Java Edición Empresarial (J2EE, JAVA EE) con Enterprise Java Beans (EJB) ya diferencian la UI y presentación de las capas de procesamiento de negocio, estableciendo interfaces bien definidos. Sin embargo, estos son requisitos de SOA, además de la necesidad de establecer funciones de grano grueso que permitan el acceso por parte de cualquier consumidor (usuarios finales, aplicaciones, integraciones, servicios de terceros, etc). Estas funciones de negocio exponen vías para que cada servicio sea accedido por un método específico.

El acceso entre aplicaciones no es trivial cuando se disponen de múltiples soluciones y aplicaciones independientes que necesitan ser accedidas para materializar funciones de negocio, como pueden ser sistemas de planificación de recursos empresariales (SAP), ERPs, herramientas de gestión corporativa o aplicaciones J2EE para sistemas de gestión de almacenes (Warehouse Management Systems, WMS). Las necesidades integradoras siempre han existido, incluso utilizando plataformas del tipo Enterprise Application Integration (EAI), mediante su modelo de acceso basado en adaptadores. Sin embargo, en estos casos no hay una funcionalidad explícitamente expuesta e invocada, dificultando su accesibilidad y visibilidad como servicios.

Bajo el prisma planteado, SOA enfatiza la importancia de los servicios, siendo un aspecto fundamental en las arquitecturas de las aplicaciones. Estas son entidades independientes que están disponibles y son accesibles por toda la infraestructura de la empresa. Esto proporciona una base conceptual más fuerte que en otras arquitecturas, tanto en términos de abstracción como en posibilidades de explotación, ofreciendo un modelo de programación más sencillo a la hora de integrar tecnologías variadas. Por ejemplo, una macro-infraestructura empresarial con piezas elaboradas por décadas, cohesionando sofisticados componentes y aplicaciones heredadas (legacy) fuertemente validadas que requieren la compaginación de tecnologías en .NET, J2EE, módulos C++ 98/11, JavaScript/Node.js FFI v8-12 y PHP Ports desde la versión 5.

El principio central de diseño con SOA es, como su propio nombre indica, la Orientación de Servicios, de forma que las aplicaciones tienen que ser diseñadas desde un inicio en base a estos, mediante interfaces bien definidos y funciones de grano grueso para operar con las funcionalidades expuestas. Aquí las capas de presentación y negocio están también bien separadas, pero es importante facilitar mecanismos y establecer claramente los puntos de entrada para usar las Façades de los procesos de negocio. Sin embargo, identificar estos mecanismos en las capas intermedias (Mid-Tier) es una tarea algo más compleja, por lo que se deben establecer un conjunto de atributos de la aplicación:

  • La aplicación tiene una capa de funcionalidad bien definida y separada (desacoplamiento generalizado y entre Tiers).
  • La capa funcional tiene unos puntos de entrada bien definidos, generalmente propiciados por patrones de diseño façade y componentes especializados como entrada al sistema de servicios.
  • Los puntos de entrada son funciones de grano grueso, cada uno de los cuales realiza funcionalidad de negocio que se puede completar por sí misma. Son comportamientos generalmente atómicos e independientes, sin trabajo previo o posterior de otras unidades (e.g. una única llamada que solicita la recogida en 24h y envío en 48h a la empresa logística, gestiona el inventario, actualiza todos los estados de orden y pedido, así como notifica el mensaje de aviso personalizado a cada uno de los involucrados).

Este modelo arquitectónico y principio de diseño está fuertemente ligado a cómo funcionan las corporaciones, adecuándose a su funcionamiento organizativo, administrativo y operacional. Cada departamento conoce y suele ser responsable de sus procesos de negocio, está fuertemente ligado a las características de su ámbito operacional y los problemas con los que lidia, así como estar sujeto a un presupuesto IT asignado por departamento. De esta forma, se puede concluir que hoy en día las soluciones TIC resuelven problemas y ofrecen soluciones localizadas a problemas y negocios específicos, bien intra- (aplicaciones, servicios y departamentos) o inter-corporativos (aplicaciones de un grupo empresarial o entre terceros). Independientemente a su localización, todos ellos serán suficientemente independientes en sus funciones y procesos de negocio, dando lugar al concepto de islas TIC de aplicaciones y servicios.

Una vez realizada la consolidación e integración, todos los problemas entre aplicaciones, corporaciones o departamentos son resueltos, convergiendo en soluciones TIC localizadas (islas TIC), cada unas de las cuales solventa una función de negocio apropiadamente. Estos principios facilitan la mantenibilidad, flexibilidad y evolución de las aplicaciones de la organización, mejorando las labores de integración presentes y futuras.

En este artículo se ha introducido el estilo de arquitectura TIC basado en Orientación de Servicios, como contraposición al estilo "tradicional" de composición de aplicaciones y soluciones de integración. En SOA los servicios son una entidad de primer orden, parte fundamental del principio de diseño, donde cada uno de ellos es una unidad bien definida de funcionalidad a la que se puede acceder de forma remota y sobre la que se puede actuar de forma independiente, generalmente representando un proceso o actividad de negocio que tiene un resultado de negocio específico.

Este concepto del campo de la Ingeniería del Software y específicamente de la Arquitectura del Software y el Diseño Software es suficientemente abstracto para permitir un mayor grado de flexibilidad, ampliando la aplicabilidad con el objetivo de considerar toda la organización empresarial y sus procesos de negocio. De este modo, no está encorsetado a una tecnología, producto o fabricante concreto. Por si fuera de interés, ya que es un principio suficientemente complejo y es necesario comprender sus conceptos de diseño, principios y patrones, Group4Layers ha venido elaborando e impartiendo cursos específicos de integración B2B y arquitecturas SOA para entidades TIC, incluyendo ejemplos reales de construcción, composición y evolución integradora.

Curso de Integración B2B SOA para la elaboración de combinaciones software empresariales

Especialización en la integración de aplicaciones empresariales y combinación de procesos de negocio por medio de Arquitecturas Orientadas a Servicios (SOA). Principios y patrones específicamente demostrados con proyectos basados en tecnologías Java, ESB, BPEL, XML y WSDL.

Este sitio web emplea cookies propias y de terceros para analizar el tráfico y ofrecerle una mejor experiencia. Al navegar o utilizar nuestros servicios el usuario está aceptando su uso.Más información.