Articulo de referencia

Programación orientada al servicio

La programación orientada a servicios (SOP) es un paradigma de programación que utiliza "servicios" como unidad de trabajo informático para diseñar e implementar aplicaciones em...

La programación orientada a servicios (SOP) es un paradigma de programación que utiliza "servicios" como unidad de trabajo informático para diseñar e implementar aplicaciones empresariales integradas y programas de software de misión crítica . Los servicios pueden representar pasos de procesos empresariales , por lo que una de las principales aplicaciones de este paradigma es la entrega rentable de aplicaciones empresariales independientes o compuestas que pueden "integrarse de adentro hacia afuera". Promueve inherentemente la arquitectura orientada a servicios (SOA), sin embargo, no es lo mismo que SOA. Mientras que SOA se centra en la comunicación entre sistemas mediante "servicios", [ 1 ] SOP proporciona una nueva técnica para construir módulos de aplicaciones ágiles utilizando servicios en memoria como unidad de trabajo.

En SOP, un servicio en memoria puede externalizarse de forma transparente como una operación de servicio web . Gracias a sus estándares de servicios web independientes del lenguaje y la plataforma, SOP abarca todos los paradigmas de programación, lenguajes y plataformas existentes. En SOP, el diseño de los programas se centra en la semántica de las llamadas a servicios, el enrutamiento lógico y la descripción del flujo de datos a través de interfaces de servicio bien definidas. Todos los módulos de programa de SOP se encapsulan como servicios, y un servicio puede estar compuesto por otros servicios anidados de forma jerárquica, con una profundidad prácticamente ilimitada en esta jerarquía de servicios. Un servicio compuesto también puede contener construcciones de programación, algunas de las cuales son específicas y exclusivas de SOP. Un servicio puede ser un componente de sistema externalizado al que se accede mediante cualquier API propietaria o estándar de servicio web, utilizando una técnica de complemento en memoria.

Si bien SOP admite las estructuras de programación básicas para la secuenciación, la selección y la iteración, se distingue por una serie de nuevas estructuras de programación que proporcionan capacidades nativas integradas orientadas a la manipulación de listas de datos, la integración de datos , la multihilo automatizada de módulos de servicio, la gestión declarativa del contexto y la sincronización de servicios. El diseño de SOP permite a los programadores sincronizar semánticamente la ejecución de servicios para garantizar su corrección, o bien declarar un módulo de servicio como límite de transacción con comportamiento de confirmación/reversión automatizado.

Se pueden crear herramientas de diseño semántico y plataformas de automatización en tiempo de ejecución para dar soporte a los conceptos fundamentales de la SOP. Por ejemplo, se puede diseñar una máquina virtual de servicio (SVM) que cree automáticamente objetos de servicio como unidades de trabajo y gestione su contexto para que se ejecute a partir de los metadatos del programa SOP almacenados en XML y creados por una herramienta de automatización en tiempo de diseño. En términos de SOA, la SVM actúa tanto como productor como consumidor de servicios.

Conceptos fundamentales

Los conceptos de SOP proporcionan una base sólida para un enfoque semántico de la integración de la programación y la lógica de las aplicaciones. Este enfoque ofrece tres ventajas significativas:

  • Desde el punto de vista semántico, puede elevar el nivel de abstracción para la creación de aplicaciones empresariales compuestas y, por lo tanto, aumentar significativamente la capacidad de respuesta al cambio (es decir, la agilidad empresarial ).
  • Esto da lugar a la unificación de las técnicas de integración y desarrollo de componentes de software bajo un único concepto, reduciendo significativamente la complejidad de la integración. Este enfoque unificado permite la integración de adentro hacia afuera sin necesidad de replicar datos, lo que reduce considerablemente el costo y la complejidad de la explicación general.
  • Automatice la multihilo y la virtualización de aplicaciones a nivel granular (unidad de trabajo).

A continuación se presentan algunos de los conceptos clave de los SOP:

Encapsulación

En SOP, los módulos de software en memoria se encapsulan rigurosamente mediante interfaces de servicio bien definidas que pueden externalizarse bajo demanda como operaciones de servicio web. Esta unidad mínima de encapsulación maximiza las oportunidades de reutilización dentro de otros módulos de servicio en memoria, así como entre activos de software existentes y heredados . Al utilizar interfaces de servicio para ocultar información , SOP extiende los principios de diseño orientado a servicios empleados en SOA para lograr la separación de responsabilidades entre los módulos de servicio en memoria.

Interfaz de servicio

En SOP, una interfaz de servicio es un objeto en memoria que describe una tarea de software bien definida con estructuras de datos de entrada y salida también bien definidas . Las interfaces de servicio se pueden agrupar en paquetes. Una interfaz de servicio de SOP se puede externalizar como una operación WSDL , y un servicio individual o un paquete de servicios se puede describir mediante WSDL. Además, las interfaces de servicio se pueden asignar a uno o varios grupos de servicios en función de propiedades compartidas.

En SOP, las propiedades de tiempo de ejecución almacenadas en los metadatos de la interfaz de servicio sirven como contrato con la máquina virtual de servicio (SVM). Un ejemplo del uso de propiedades de tiempo de ejecución es la sincronización declarativa de servicios . Una interfaz de servicio puede declararse como una interfaz totalmente sincronizada, lo que significa que solo una instancia de ese servicio puede ejecutarse a la vez. O bien, puede sincronizarse en función del valor real de las entradas clave en tiempo de ejecución, lo que significa que no pueden ejecutarse simultáneamente dos instancias de ese servicio con el mismo valor para sus datos de entrada clave. Además, la sincronización puede declararse entre interfaces de servicio que pertenecen al mismo grupo de servicios. Por ejemplo, si dos servicios, "CreditAccount" y "DebitAccount", pertenecen al mismo grupo de servicios de sincronización y están sincronizados en el campo de entrada accountName, entonces no pueden ejecutarse simultáneamente dos instancias de "CreditAccount" y "DebitAccount" con el mismo nombre de cuenta.

Invocador de servicio

Un invocador de servicios realiza solicitudes de servicio. Se trata de una interfaz en memoria conectable que abstrae la ubicación del productor de servicios, así como el protocolo de comunicación utilizado entre el consumidor y el productor al transmitirse a través de la memoria del ordenador , del entorno de ejecución SOP, como una máquina virtual de servicios (SVM). El productor puede estar en el mismo proceso (es decir, en memoria), fuera del proceso en el mismo servidor o virtualizado en un conjunto de servidores en red. El uso de un invocador de servicios en SOP es clave para la transparencia de ubicación y la virtualización. Otra característica importante de la capa del invocador de servicios es la capacidad de optimizar el ancho de banda y el rendimiento al comunicarse entre máquinas. Por ejemplo, un "invocador SOAP" es el invocador de servicios predeterminado para la comunicación remota entre máquinas mediante los estándares de servicios web . Este invocador puede intercambiarse dinámicamente si, por ejemplo, el productor y el consumidor desean comunicarse a través de una API propietaria empaquetada para una mayor seguridad y un uso más eficiente del ancho de banda.

oyente de servicio

Un receptor de servicios recibe solicitudes de servicio. Se trata de una interfaz en memoria conectable que abstrae el protocolo de comunicación para las solicitudes de servicio entrantes dirigidas al entorno de ejecución de SOP, como la SVM. Mediante esta capa abstracta, el entorno de ejecución de SOP puede integrarse virtualmente en la dirección de memoria de cualquier entorno de programación tradicional o servicio de aplicación.

Implementación del servicio

En SOP, un módulo de servicio puede implementarse como un servicio compuesto o atómico. Es importante destacar que los módulos de servicio creados mediante el paradigma SOP tienen una naturaleza extrovertida y pueden externalizarse de forma transparente a través de estándares como SOAP o cualquier protocolo propietario .

Enfoque basado en la semántica

Una de las características más importantes de SOP es su capacidad para admitir un enfoque de programación totalmente semántico. Además, este enfoque semántico puede integrarse en un entorno visual construido sobre una capa totalmente basada en metadatos para almacenar las definiciones de la interfaz y los módulos de servicio. Asimismo, si el entorno de ejecución de SOP es compatible con una máquina de vectores de soporte (SVM) capaz de interpretar la capa de metadatos, se elimina la necesidad de generar código automáticamente. El resultado es un aumento considerable de la productividad durante el desarrollo, una mayor facilidad de prueba y una agilidad significativa en la implementación.

Implementación del servicio: servicio compuesto

Una implementación de servicio compuesto es la definición semántica de un módulo de servicio basada en técnicas y conceptos de SOP. Si se examina la definición de interfaz de un servicio compuesto , se pueden observar otras interfaces de servicio interconectadas y vinculadas a construcciones de programación SOP. Un servicio compuesto tiene una definición recursiva, lo que significa que cualquier servicio interno ("servicio interno") puede ser otro servicio atómico o compuesto. Un servicio interno puede ser una referencia recursiva al mismo servicio compuesto contenedor.

Estructuras de programación

SOP admite las estructuras de programación básicas para la secuenciación, la selección y la iteración, así como comportamientos avanzados integrados. Además, SOP admite estructuras semánticas para el mapeo, la traducción, la manipulación y el flujo automáticos de datos entre los servicios internos de un servicio compuesto.

Secuenciación

Un servicio dentro de la definición de un servicio compuesto (un "servicio interno") se secuencia implícitamente mediante la conectividad semántica de los puertos de éxito o fallo integrados de otros servicios internos con su puerto de activación integrado. Cuando un servicio interno se ejecuta correctamente, todos los servicios internos conectados a su puerto de éxito se ejecutarán a continuación. Si un servicio interno falla, todos los servicios conectados a su puerto de fallo se ejecutarán a continuación.

Selección

La selección lógica se realiza mediante estructuras de ramificación basadas en datos y otras estructuras configurables. En general, las estructuras configurables son servicios integrados en la plataforma SOP con entradas y salidas que pueden adoptar la estructura de entrada/salida de otros servicios conectados. Por ejemplo, una estructura configurable utilizada para filtrar los datos de salida de los servicios puede tomar una lista de pedidos de venta, pedidos de compra o cualquier otra estructura de datos, y filtrar sus datos según las propiedades de filtro declaradas por el usuario y almacenadas en la interfaz de esa instancia de la estructura de filtro. En este ejemplo, la estructura que se va a filtrar se convierte en la entrada de la instancia particular de la estructura de filtro, y la misma estructura que representa los datos filtrados se convierte en la salida de la estructura configurable.

Iteración

Un servicio compuesto puede declararse para ejecutarse en bucle. El bucle puede limitarse a un número fijo de iteraciones con un retardo opcional entre iteraciones y puede finalizar dinámicamente mediante una construcción de "salida de servicio con éxito" o "salida de servicio con fallo" dentro del servicio compuesto en bucle. Además, cualquier interfaz de servicio puede ejecutarse automáticamente en modo bucle o " foreach " si se le proporcionan dos o más componentes de entrada durante la preparación automática. Este comportamiento es compatible en tiempo de diseño cuando una estructura de lista de datos de un servicio se conecta a un servicio que toma una única estructura de datos (es decir, no plural) como entrada. Si una propiedad de tiempo de ejecución de la interfaz del servicio compuesto se declara para admitir "foreach" en paralelo, el entorno de automatización de tiempo de ejecución puede automáticamente multihilo para el bucle y ejecutarlo en paralelo. Este es un ejemplo de cómo las construcciones de programación SOP proporcionan funcionalidad avanzada integrada.

Transformación, mapeo y traducción de datos

Las estructuras de mapeo , traducción y transformación de datos permiten la transferencia automática de datos entre servicios internos. Un servicio interno está listo para ejecutarse cuando se activa y se resuelven todas sus dependencias de entrada. Todos los servicios internos preparados dentro de un servicio compuesto se ejecutan en paralelo en un ciclo denominado "hiperciclo". Este es uno de los mecanismos mediante los cuales SOP admite el procesamiento paralelo automático. La definición de un servicio compuesto contiene un grafo dirigido implícito de dependencias de servicios internos. El entorno de ejecución de SOP puede crear un grafo de ejecución basado en este grafo dirigido, instanciando y ejecutando automáticamente los servicios internos en paralelo siempre que sea posible.

Manejo de excepciones

En Java, el manejo de excepciones es un error de tiempo de ejecución. En SOP, el manejo de excepciones se logra simplemente conectando el puerto de fallo de los servicios internos a otro servicio interno o a una estructura de programación. Las estructuras "salir con fallo" y "salir con éxito" son ejemplos de estructuras utilizadas para el manejo de excepciones . Si no se realiza ninguna acción en el puerto de fallo de un servicio, el servicio externo (padre) fallará automáticamente y los mensajes de salida estándar del servicio interno que falló se propagarán automáticamente a la salida estándar del padre.

Límite transaccional

Un servicio compuesto puede declararse como límite de transacción . El entorno de ejecución de SOP crea y gestiona automáticamente un contexto jerárquico para los objetos de servicio compuesto que se utilizan como límite de transacción. Este contexto confirma o revierte automáticamente la transacción tras la ejecución exitosa del servicio compuesto.

Compensación por servicio

Dentro de SOP, se pueden asociar servicios compuestos especiales, denominados servicios de compensación, a cualquier servicio. Cuando un servicio compuesto declarado como límite de transacción falla sin un enrutamiento de manejo de excepciones, el entorno de ejecución de SOP despacha automáticamente los servicios de compensación asociados a todos los servicios internos que ya se hayan ejecutado correctamente.

Implementación del servicio: servicio atómico

Un servicio atómico es una extensión en memoria del entorno de ejecución de SOP a través de una interfaz nativa de servicio (SNI); es esencialmente un mecanismo de complemento. Por ejemplo, si SOP se automatiza mediante una SVM , un complemento de servicio se carga dinámicamente en la SVM cuando se consume cualquier servicio asociado. Un ejemplo de complemento de servicio sería un complemento de comunicador SOAP que puede traducir en tiempo real cualquier dato de entrada de servicio en memoria a una solicitud SOAP de servicio web, enviarla a un productor de servicio y luego traducir la respuesta SOAP correspondiente a datos de salida en memoria en el servicio. Otro ejemplo de complemento de servicio es un complemento SQL de base de datos estándar que admite operaciones de acceso, modificación y consulta de datos. Un ejemplo adicional que puede ayudar a establecer la importancia fundamental de los servicios atómicos y los complementos de servicio es el uso de un invocador de servicio como complemento de servicio para virtualizar servicios de forma transparente en diferentes instancias de una plataforma SOP. Esta virtualización única a nivel de componentes se denomina "virtualización de la red de servicios" para distinguirla de la virtualización tradicional a nivel de aplicación o de proceso .

Preocupaciones transversales

SOP ofrece importantes oportunidades para abordar aspectos transversales en todas las aplicaciones desarrolladas con esta técnica. Las siguientes secciones definen algunas de estas oportunidades:

Instrumentación de servicio

El entorno de ejecución de SOP puede proporcionar sistemáticamente funciones integradas y optimizadas de creación de perfiles, registro y medición para todos los servicios en tiempo real.

Almacenamiento en caché de servicios declarativo y sensible al contexto

Basándose en los valores de entrada clave declarados de una instancia de servicio, el entorno de ejecución de SOP puede almacenar en caché las salidas de un servicio interno no sensible al tiempo cuando se ejecuta en el contexto de un servicio compuesto específico. Cuando un servicio se almacena en caché para determinados valores de entrada clave, el entorno de ejecución de SOP recupera las salidas almacenadas correspondientes a las entradas clave de su caché de servicios en lugar de consumir el servicio. La disponibilidad de este mecanismo integrado para el desarrollador de la aplicación SOP puede reducir significativamente la carga en los sistemas de back-end.

Disparadores de servicio

SOP proporciona un mecanismo para asociar un tipo especial de servicio compuesto, el servicio de activación, a cualquier otro servicio. Cuando se consume dicho servicio, la plataforma SOP crea y consume automáticamente una instancia del servicio de activación asociado con una copia en memoria de las entradas del servicio que lo activa. Este consumo no interfiere con la ejecución del servicio que lo activa. Se puede configurar un activador de servicio para que se ejecute al activarse, fallar o completarse con éxito el servicio que lo activa.

Comunicación entre servicios

Además de la capacidad de invocar cualquier servicio, los eventos de solicitud de servicio y la memoria compartida son dos de los mecanismos integrados de SOP para la comunicación entre servicios. El consumo de un servicio se trata como un evento en SOP. SOP proporciona un mecanismo de eventos basado en correlación que permite la interrupción de un componente compuesto en ejecución que ha declarado, mediante una estructura de espera, la necesidad de esperar a que se produzcan uno o más eventos de consumo de servicio con valores de datos de entrada específicos. La ejecución del componente compuesto continúa cuando se consumen servicios con entradas de clave de correlación específicas asociadas a la estructura de espera. SOP también proporciona un espacio de memoria compartida con control de acceso donde los servicios pueden acceder y actualizar una estructura de datos bien definida , similar a la estructura de entrada/salida de los servicios. Se puede acceder programáticamente al mecanismo de memoria compartida de SOP a través de las interfaces de servicio.

Anulaciones de servicio

En SOP, las personalizaciones se gestionan mediante una innovadora función llamada Anulaciones de Servicio. Gracias a esta función, una implementación de servicio puede ser anulada de forma estática o dinámica por una de las muchas implementaciones posibles en tiempo de ejecución. Esta función es análoga al polimorfismo en la programación orientada a objetos . Cada posible implementación de anulación puede asociarse a uno o más portafolios de configuración de anulaciones para gestionar la activación de grupos de anulaciones relacionadas en diferentes instalaciones de la aplicación SOP en el momento del despliegue .

Aprovisionamiento de cuentas de consumidores

Los servicios seleccionados pueden implementarse de forma segura para su consumo programático externo mediante una capa de presentación ( GUI ) u otras aplicaciones. Una vez definidas las cuentas de servicio, el entorno de ejecución de SOP gestiona automáticamente el acceso a través de mecanismos de aprovisionamiento de cuentas de consumidor .

Seguridad

El entorno de ejecución de SOP proporciona sistemáticamente autenticación y autorización de servicios integradas . Para la autorización, los proyectos de desarrollo, las cuentas de usuario, los paquetes y los servicios de SOP se tratan como recursos con control de acceso. De esta forma, el entorno de ejecución de SOP ofrece autorización integrada. La seguridad de la comunicación y la autorización, ya sean estándar o propietarias, se personalizan mediante anulaciones de servicio, invocadores de complementos y módulos de escucha de servicios.

Virtualización y multihilo automático

Dado que todos los artefactos de SOP son servicios bien encapsulados y todos los mecanismos de SOP, como la memoria compartida, pueden proporcionarse como servicios distribuibles, la virtualización a gran escala puede automatizarse mediante el entorno de ejecución de SOP. Además, la pila de servicios jerárquica de un servicio compuesto, con los múltiples gráficos de ejecución asociados a sus servicios internos en cada nivel, ofrece enormes oportunidades para la automatización del procesamiento multihilo en el entorno de ejecución de SOP.

Historia

El término programación orientada a servicios (SOP) fue publicado por primera vez en 2002 por Alberto Sillitti, Tullio Vernazza y Giancarlo Succi en un libro titulado "Reutilización de software: métodos, técnicas y herramientas". La SOP, tal como se describió anteriormente, refleja algunos aspectos del uso del término propuesto por Sillitti, Vernazza y Succi.

Actualmente, el paradigma SOP se encuentra en las primeras etapas de su adopción generalizada. Existen cuatro factores de mercado que impulsan esta adopción:

  • Arquitectura de procesador multinúcleo : debido a los problemas de disipación de calor con velocidades de reloj de procesador superiores a 4  GHz, los principales proveedores de procesadores, como Intel, han recurrido a la arquitectura multinúcleo para ofrecer un rendimiento cada vez mayor. Consulte el artículo "Se acabó el almuerzo gratis ". Este cambio de diseño obliga a un cambio en la forma en que desarrollamos nuestros módulos de software y aplicaciones: las aplicaciones deben escribirse para la concurrencia con el fin de utilizar procesadores multinúcleo y escribir programas concurrentes es una tarea desafiante. SOP proporciona una oportunidad integrada para la multihilo automatizada .
  • Virtualización de aplicaciones : SOP promueve un microcontrol integrado sobre la transparencia de ubicación de los componentes de servicio de cualquier módulo de servicio. Esto da como resultado una virtualización automática y granular de los componentes de la aplicación (en lugar de un proceso de aplicación completo) en un clúster o red de plataformas de ejecución de SOP.
  • Arquitectura orientada a servicios (SOA) y demanda de aplicaciones integradas y compuestas: inicialmente, la adopción de SOP seguirá la curva de adopción de SOA con un ligero desfase. Esto se debe a que los servicios generados mediante SOA se pueden ensamblar y consumir fácilmente a través de SOP. Cuanto más se generalicen los servicios web, más sentido tendrá aprovechar la naturaleza semántica de SOP. Por otro lado, dado que SOA es inherente a SOP, SOP proporciona una forma rentable de llevar SOA a los mercados mayoritarios.
  • Software como servicio (SaaS): las capacidades de las plataformas SaaS actuales no permiten abordar las complejidades de personalización e integración que requieren las grandes empresas. SOP puede reducir significativamente la complejidad de la integración y la personalización. Esto impulsará a SOP hacia la próxima generación de plataformas SaaS.

Véase también

Referencias

  1. Laskey, Kathryn B.; Laskey, Kenneth (2009). "Arquitectura orientada a servicios". WIREs Computational Statistics . 1 (1): 101. doi : 10.1002/wics.8 .
  • Programación Orientada a Servicios: Un Nuevo Paradigma de Reutilización de Software
  • Virtualización de redes y soluciones basadas en Itanium®