Muchos de los sistemas de tiempo real actuales son de planificación estática, es decir, están formados por un conjunto de servicios fijos, previamente seleccionados, que son asignados a los recursos disponibles y, para asegurar que todas las restric- ciones temporales son satisfechas, se realizan comprobaciones previas al tiempo de ejecución. En contraste, los sistemas de tiempo real adaptativos del futuro necesita- rán [41, 182] más flexibilidad durante la fase de ejecución, ajustando el funciona- miento del sistema a nueva información dinámica que procederá tanto del entorno en el que se ejecuta como del propio sistema. Bajo estas circunstancias, las deman- das al sistema cambiarán dinámicamente y estos sistemas adaptativos deberán poder modificar el conjunto de servicios que soportan y extender sus funciones para poder satisfacerlas.
Como ya se comentó en el apartado anterior, el paradigma de computación orien- tada a servicios puede aportar esta flexibilidad a los sistemas, permitiendo la crea- ción dinámica de aplicaciones a partir de servicios existentes remotos, pudiendo ser usada ventajosamente en el desarrollo de sistemas de tiempo real. Aplicándose en entornos tan dispares como sistemas de control de red, donde diferentes sensores y
filtros pueden ser vistos como servicios que pueden ser compartidos y actualizados
on-line, o sistemas multimedia distribuidos en los que los servicios pueden corres-
ponder a filtros y codificadores/decodificadores que ofrezcan diferentes calidades de servicios. Así, la composición dinámica de servicios puede ser interesante no sólo desde el punto de vista del desarrollo de aplicaciones, a través de la composición automática de elementos software, sino también como un medio para dar soporte a la actualización dinámica y reconfiguración de servicios, por ejemplo para la gestión dinámica de QoS, equilibrado de carga o tolerancia a fallos:
Actualización dinámica: cada vez que una nueva versión de un servicio apa-
rece en el sistema, ésta será analizada para comprobar si el uso de esta nueva versión en las aplicaciones presentes en el sistema mejora el rendimiento de las mismas de acuerdo con una métrica especificada previamente. Dependien- do de este análisis, el sistema podría cambiar las versiones de los servicios usadas y recomponer las aplicaciones que los usan.
Tolerancia a fallos: las diferentes implementaciones de un servicio pueden ser
usadas como backups, para asegurar la supervivencia del sistema si uno de los nodos involucrados se cae. En esta situación, frente a un fallo de una imple- mentación de un servicio, un detector de fallos solicita su retirada y substitu- ción por otra implementación disponible del mismo servicio, causando así la recomposición de las aplicaciones que usaban la implementación defectuosa.
Equilibrado de carga: la carga excesiva en un determinado nodo puede provo-
car un degradamiento en las prestaciones ofrecidas por los servicios residentes en el mismo que, por su parte, pueden provocar un empobrecimiento en las prestaciones de una o varias aplicaciones. En esta situación, el sistema puede buscar otras implementaciones del mismo servicio alojadas en nodos diferen- tes que exhiban mejores calidades de servicio en ese momento. Así, el sistema podrá invocar la recomposición de la aplicación para explorar dichas alternati- vas, permitiendo maximizar sus prestaciones en cada momento. El análisis de tiempos de respuestas de ejecución en el peor caso puede ser usado para dedu- cir la QoS actual ofrecida por una determinada implementación de un servicio como función de la carga en el nodo en el que está alojado.
Como un ejemplo práctico, considérese un sistema de visión artificial para ins- pección textil basado en un cluster de computadores en paralelo [50]. Cada nodo dedicado a la adquisición de imágenes envía cuadros a un nodo de computación de un conjunto de n. En este tipo de sistemas, a veces los nodos de adquisición están desocupados, por ejemplo cuando se cambian los rollos de tejido, provocando que la carga en los nodos de computación varíe. Usando un entorno que facilite la com- posición de aplicaciones basadas en servicios, podemos considerar el procesamiento de cada flujo de datos proveniente de cada cámara como una aplicación y distribuir la carga de los nodos de computación para mejorar las prestaciones del conjunto del
sistema. Otro ejemplo son los sistemas de alta disponibilidad, como los involucra- dos en el transporte de energía [65], en los que debe ser implementado un sistema que les proporcione tolerancia a fallos. Las soluciones ad hoc a nivel de aplicación carecen de la flexibilidad, reusabilidad y portabilidad que podría proporcionar una solución basada en la composición dinámica de servicios, pudiendo además resultar más caras. Por otra parte, las soluciones que sólo operan a nivel hardware o de sis- tema operativo no resuelven todos los problemas formales de estos sistemas como indica el argumento extremo a extremo (end-to-end argument) [196].
Dentro de las numerosas propuestas que intentan dotar de flexibilidad a siste- mas distribuidos de tiempo real, como pueden ser la utilización de un paradigma determinado de comunicación [177, 132], el uso conjunto de la tecnología de com- ponentes y aspectos [231, 217] para el diseño y desarrollo de sistemas, o middleware (software de intermediación o intermedio) de tiempo real como puede ser RTCOR- BA [169] o DRTSJ [126, 238, 237] (cuyo proceso de especificación está en este momento en curso), todavía no se han definido arquitecturas con características de tiempo real flexibles en las cuales se apliquen de manera ventajosa conceptos del campo de la orientación a servicios. Las primeras aproximaciones se han realizado desde grupos de investigación especializados en SOA, identificando qué caracterís- ticas debería poseer una arquitectura de tiempo real que dé soporte a SOA, pero sin realizar una definición de los elementos que debería poseer [228]. También se han realizado esfuerzos en el campo de los servicios Web, para extender el protocolo utilizado en éstos para intercambiar datos, SOAP [37, 86], de tal forma que pue- da soportar tiempo real, pero todavía no se llegado a una especificación [99]. Esto justifica la necesidad de la definición de métodos y metodologías, así como de una arquitectura de tiempo real genérica que aplique este paradigma.
En esta tesis se pretende realizar aportaciones en el ámbito de sistemas de tiempo real distribuidos para flexibilizarlos con conceptos y aportaciones técnicas inspira- dos en la computación orientada a servicios. En concreto, se propone la aplicación de los conceptos de SOA al campo de los sistemas de tiempo real, mediante la de- finición de un modelo de aplicaciones basadas en servicios y de una arquitectura genérica que les dé soporte, así como de los protocolos necesarios para ello. Asimis- mo, se integrará dicha arquitectura con mecanismos y protocolos de tiempo real ya existentes.