• Aucun résultat trouvé

Auto-adaptativité des applications distribuées

2.2.1 Définition de l’auto-adaptativité

Afin de tirer entièrement profit de toute la puissance disponible et de la flexibilité des plates- formes telles que les grappes ou les grilles de calcul, les applications doivent être en mesure

de présenter un degré satisfaisant de parallélisme de calcul et de données. Pour pouvoir atteindre cet objectif de performances optimales, il est intéressant d’utiliser des applications ou des algorithmes qui possèdent un caractère auto-adaptatif. Une application est dite auto- adaptative, si elle est capable de changer automatiquement son comportement en fonction des variations de son environnement d’exécution. La répartition de ses différents composants exécutés sur la plate-forme varie dans le temps, en fonction de la disponibilité des ressources et des variations de la puissance disponible des nœuds. L’auto-adaptativité peut se faire également en fonction des variations des états du calcul et des ressources des données manipulées.

L’auto-adaptativité s’appuie sur des stratégies de décision qui déterminent le comportement général de l’exécution de l’application sur la plate-forme. Ces stratégies peuvent ou non dépendre de la configuration matérielle de l’environnement (nombre de processeurs ou de cœurs, hiérarchie des caches). En particulier, une application et un algorithme sont indépendants des ressources lorsque les stratégies de décision n’utilisent aucun de ces paramètres de configuration et qu’elles peuvent changer en fonction des seules variations de l’environnement de calcul et de la charge induite par les autres utilisateurs.

2.2.2 Gestion de l’auto-adaptativité au niveau de l’application

Les différentes parties d’une application auto-adaptative doivent être en mesure de s’exécuter en parallèle avec un grain de calcul adéquat pour leur distribution sur la plate-forme. Pour cela, elles doivent évaluer automatiquement les caractéristiques sous-jacentes du support et se reconfigurer dynamiquement en fonction de l’état et de l’évolution de ce dernier, pour maintenir un niveau de performance requis à l’avance. Cette reconfiguration dynamique implique qu’une telle application puisse redéployer sur la plate-forme, pendant l’exécution, les différentes parties qui la composent. L’application doit donc posséder une aptitude à changer son degré de parallélisme ou son déploiement, au gré de l’évolution des calculs et des variations de configuration au sein de la plate-forme. Cette adaptativité traduit des actions et des corrections sur des déséquilibres de charge qui peuvent, bien sûr, être pris en compte au niveau des applications elles-mêmes. Généralement face à des quantités de données énormes à traiter, et face à une exigence de ressources intensives de calcul, ces applications ne disposent que d’un nombre limité de moyens, en termes de processus coopérants. De plus, ces applications ne possèdent que très peu d’informations sur l’environnement dans lequel elles sont mises en concurrence entre elles. Tous ces éléments, auxquels s’ajoute une certaine complexité pour le développement d’applications ad hoc, rendent la gestion d’une haute dynamicité de la plate-forme très difficile au niveau de l’application.

2.2.3 Gestion de l’auto-adaptativité par un middleware

Gérer les reconfigurations dynamiques sur de grandes plates-formes hétérogènes ne devrait pas être directement du ressort du développeur de l’application distribuée. Ce travail devrait être le plus transparent possible pour lui. Les différents niveaux de reconfiguration qui permettent de gérer l’auto-adaptativité de l’application en réaction aux modifications de la plate-forme d’exécution, incorporent des opérations telles que le lancement, l’arrêt, le redémarrage ou la migration des tâches qui composent les différentes parties de l’application. Ces opérations exigent de la part du programmeur de maîtriser des techniques complexes liées à des langages ou à des modèles de programmation sophistiqués. Ces modèles

fournissent des outils spécifiques pour permettre cet usage. Ils fournissent des abstractions de hauts niveaux qui permettent de structurer l’application en entités parallèles ou distribuées qui coopèrent pour accomplir des tâches spécifiques.

Il semble donc plus opportun de confier la tâche de la gestion de la plate-forme d’exécution elle-même, à un intergiciel qui sera, lui, mieux à-même de déployer efficacement l’application et de la redéployer le cas échéant de manière transparente. Alors que les modèles de programmation permettent de structurer convenablement l’application parallèle et/ou distribuée, les mécanismes du middleware, quant à eux, doivent encapsuler tous les détails intrinsèques à la gestion de la plate-forme d’exécution et à la politique de reconfiguration. Modèles de programmation et middleware travaillent ainsi en symbiose et permettent à l’application de répondre convenablement aux décisions de reconfigurations du middleware. Les reconfigurations de type fonctionnel, comme la migration des entités de l’application ou des changements de la granularité de ces entités, dépendent donc fortement du modèle de programmation et du langage qui ont été choisis pour le développement de l’application. Pour aider le middleware à fonctionner correctement, il est nécessaire de disposer d’un ensemble d’entités autonomes qui puisse fournir assez d’informations sur les états internes de l’application et sur leurs interconnections. Ces informations concernent les ressources courantes auxquelles l’entité est liée, les performances attendues, le profil des performances sur une période de temps donnée et des prédictions de performances pour le futur. Si ces informations sont disponibles, le middleware pourra les utiliser pour automatiser le processus de l’auto-adaptation de l’application dans un environnement d’exécution dynamique. Le middleware évite ainsi au programmeur de devoir gérer des cas de reconfiguration très complexes. En particulier, ce dernier n’aura plus à décider d’avance quand et où il faudra faire migrer telle ou telle partie de l’application, et quelle entité aura besoin d’être reconfigurée.