• No results found

Muchos de los sistemas de tiempo real actuales incluyen dentro de sus requisi- tos la capacidad de trabajar en entornos dinámicos, donde las características de la carga computacional no siempre son predecibles [182]. El diseño de estos sistemas requiere conjugar flexibilidad y dinamismo con predictibilidad temporal, no siendo ya adecuado aplicar la aproximación clásica de diseño de los sistemas de tiempo real, basada en el cálculo de peores tiempos de ejecución y asignación de recursos en el peor caso, que asegura determinismo temporal, pero que podría implicar, en un sistema dinámico, un gasto de recursos prohibitivo. En estos momentos se está realizando un esfuerzo por parte de la comunidad de tiempo real para la adaptación a entornos dinámicos [41], tanto a un nivel bajo de abstracción, donde es necesaria más investigación en algoritmos de gestión de recursos, nuevos modelos de tareas, control de admisión, monitorización y algoritmos de adaptación, como a alto nivel donde para obtener sistemas flexibles se deberán desarrollar protocolos que manejen niveles de calidad, así como arquitecturas que les den soporte.

Por otra parte, los sistemas distribuidos han experimentado una gran evolución desde su nacimiento, con la posibilidad de ejecutar remotamente aplicaciones en otros ordenadores conectados en red [230]. Desde mediados de los años setenta, la capacidad de procesamiento de los ordenadores ha aumentado notablemente y las redes de ordenadores se han popularizado, permitiendo la aparición de nuevos y más sofisticados paradigmas de distribución de procesos que a su vez favorecieron la aparición de nuevos paradigmas de programación, como pueden ser el Distri-

buted Shared Memory (DSM) (Memoria compartida distribuida mediante pagina-

do) [161, 215] o la llamada a procedimiento remoto (RPC) [34], implementación del paradigma Cliente-Servidor.

La evolución experimentada por Internet en los últimos 20 años, ha propicia- do que deje de ser una simple infraestructura que proporciona conectividad, con garantías best-effort, para pasar a ser un proveedor de aplicaciones, tales como sis- temas de transmisión multimedia o servicios Web [5], que ofrecen y necesitan dis- tintas calidades de servicio (QoS). Para garantizar dichas calidades de servicio, se han propuesto numerosas soluciones tanto a nivel de red (con arquitecturas como IntServ [113] y DiffServ [111], o protocolos como RSVP [112]) como de aplica- ción [158]. Otras soluciones [235, 88] han propuesto establecer el compromiso de provisión de QoS a través de un contrato a nivel de servicio (Service Level Agreement

contract, SLA) [111] cuya violación puede suponer penalizaciones no tolerables. Es-

tos esfuerzos están dirigidos a ofrecerle al usuario un servicio “personalizado”, es decir, ajustado a sus necesidades reales y a una serie de requisitos impuestos por el propio usuario. Además, la evolución de Internet no se ha circunscrito a su fun- cionalidad, sino que también se ha extendido al modelo de distribución de dichos servicios: el modelo centralizado, donde un servidor central proveía los contenidos, se está rápidamente transformando en un modelo descentralizado en el que las apli- caciones finales ofrecidas al usuario hacen uso de servicios y contenidos alojados en distintos proveedores dispersos geográficamente.

Cabe destacar que, gracias a la evolución de la tecnología hardware, cada vez hay más dispositivos con capacidad de cómputo y comunicación que nos acompa- ñan en todo momento, ofreciendo más funciones de las que en un principio tenían asociadas [48]: un teléfono móvil ya no sólo es un dispositivo desde el que pode- mos realizar llamadas, sino que además ofrece la posibilidad de escuchar música, ver vídeos, grabar conversaciones, gestionar una agenda o incluso acceder a Inter- net. Este nuevo entorno cambiante, saturado de elementos heterogéneos dispersos (desde teléfonos o PDAs a computadores con gran capacidad de cómputo, pasando por sensores y actuadores o dispositivos de función específica, como pueden ser una impresora o un frigorífico), de los que el usuario no es consciente pero de los cuales hace uso, hizo necesaria una evolución del paradigma de Computación distribuida, la Computación Ubicua [197], campo de investigación en el que se están realizando grandes esfuerzos hacia la visión ofrecida por Weiser en su artículo “Computer for

the 21st Century” [236], en la que los dispositivos estén completamente integrados

en el entorno (difuminándose y “desapareciendo” en él) y satisfagan las necesida- des del usuario atendiendo no sólo a la funcionalidad y características propias del dispositivo (en algunos casos con fuertes limitaciones de procesamiento, memoria, batería, etc.) sino también al entorno y situación personal de dicho usuario.

Para adaptarse a este nuevo entorno, se está consolidando la utilización del paradigma de computación orientada a servicios (Service Oriented Computing, SOC) [103]. Este paradigma está basado en un modelo de computación distribuida

fundamentado en la existencia de proveedores y consumidores de servicios, y regis- tros para la publicación y búsqueda de los mismos. Entendiendo como servicio [124]

“un dominio de control de una envergadura acotada que contiene un conjunto de tareas que cooperan para alcanzar objetivos relacionados”. A partir de ahora, nos

referiremos a servicio como a una entidad software autocontenida que proporciona una determinada funcionalidad.

El ámbito de aplicación de la SOC [9] son tanto entornos internos a una organi- zación como entornos de computación colaborativa entre distintas organizaciones. Las principales características que debe cumplir una arquitectura que dé soporte a este paradigma son, según se expone en [103]:

Acoplamiento débil entre proveedores y consumidores de servicios.

Independencia con respecto a la implementación (lenguajes de programación, bibliotecas de código, plataformas de ejecución, etc.)

Configuración flexible y dinámica. Robustez y fiabilidad.

Modelado de interacciones a un nivel de abstracción alto. Colaboración.

Dado el planteamiento de los servicios como elementos básicos de este tipo de arquitecturas, una de las extensiones naturales al concepto es el de composición de servicios, que permite crear nuevos servicios y aplicaciones a partir de servicios ya existentes. Así, una entidad software puede proveer un servicio compuesto, basado en una combinación adecuada de otros servicios. Es decir, la entidad actúa al mismo tiempo como proveedora de un servicio y consumidora de otros, siendo un medio de añadir valor al entorno en el que se ejecuta. Dicha composición de servicios ya se aplica en numerosos entornos, como pueden ser los portales de información que agregan información; aplicaciones B2C que involucran una agregación de productos para ajustarse a las necesidades de un determinado usuario; empresas virtuales que hacen uso de los servicios que ofrecen otros muchos proveedores (desde servicios de red hasta de aplicación) para ofrecer, a su vez, otros nuevos servicios diferentes, etc.

Así, se puede observar que la utilización de la composición de servicios además de permitir decrementar el tiempo de desarrollo de un proyecto, a través del uso de piezas ya existentes para crear una mayor, permite una sencilla gestión de la

flexibilidad de los servicios seleccionados, pudiendo elegir de entre un conjunto de

proveedores aquél que, implementando la misma funcionalidad, sea el que más se ajuste a nuestras necesidades actuales, seleccionando otro proveedor cuando éstas cambien (selección dinámica de servicios). Esta flexibilidad puede ser utilizada para proporcionar tolerancia a fallos a nivel de aplicación, ya que servicios que ya no

funcionan pueden ser cambiados por otros y, además, este tipo de arquitecturas suele dar facilidades [103] para poder capturar y manipular el estado de una transacción. Al permitir agregar recursos, también puede ser usado para superar las restricciones impuestas por las características físicas de determinados dispositivos.

Existen entornos, como los sistemas de tiempo real distribuidos, que se podrían beneficiar de las características de este paradigma, pero en los que, debido a las res- tricciones que deben cumplir, como fiabilidad, predictibilidad y alta disponibilidad, tradicionalmente se han desarrollado de forma ad hoc y/o monolítica. Durante los últimos años, se ha experimentado un auge en la aplicación de la tecnología ba- sada en componentes a sistemas de tiempo real [117, 231, 217], tanto a nivel de modelado [127, 85] como a nivel de lenguajes y plataformas [170, 169] como una forma de dotar a estos sistemas de cierta flexibilidad. Sin embargo, los trabajos de investigación relacionados con la aplicación de los conceptos relacionados con la computación orientada a servicios a este campo, son muy recientes, encontrándose en una fase muy preliminar de investigación, sin haber alcanzado todavía resultados relevantes. Se restringen a la identificación de problemas a resolver en una arqui- tectura genérica de tiempo real basada en servicios [228], y a la extensión de los protocolos de comunicación utilizados por los servicios Web para que puedan so- portar tiempo real [99, 96], sin llegar en ningún caso a proponer una arquitectura completa de tiempo real que dé soporte a este paradigma.

En este documento se plantea la realización de una tesis doctoral en el campo de la aplicación de conceptos propios de la computación orientada a servicios a sistemas de tiempo real.