La mise à disposition par des internautes des ressources inutilisées ou d’informations susceptibles d’intéresser d’autres, est un mode d’interaction qui se développe rapidement sur l’Internet. Cette évolution permet de tirer profit des ressources non utilisées ainsi que les données répliquées à travers l’Internet. Ce mode de coopération soulève beaucoup de problèmes difficiles concernant la découverte de ressources, la répartition de charge, la protection de la vie privée, la sécurité et la sûreté de fonctionnement, etc.
Nos travaux dans ce domaine se concentrent aujourd’hui sur la définition d’un protocole de publication et de localisation de ressources qui passe à l’échelle. Ce travail reprend et étend nos précédents travaux sur Relais, un service de répertoire répliqué que nous avions utilisé précédemment pour mettre en oeuvre des caches Web coopérants. Ce travail fait l’objet du contrat RNRT Cyrano.
L’Internet est un réseau hautement dynamique. Le nombre de serveurs ainsi que leurs contenus évoluent rapidement. Le nombre, la localisation et les profils des utilisateurs évoluent aussi très rapidement au fil du temps. Enfin, les caractéristiques des réseaux sont en constante évolution. Toute cette dynamique a une influence sur les caractéristiques du trafic et sur les performances des protocoles et services Internet. Nous nous intéressons à la détection des évolutions, à la mesure de leurs impacts sur les services et applications Internet, et à la dissémination de ces informations à tous ceux qu’elles intéressent.
Notre recherche sur ce domaine est donc axée sur deux sous-thèmes. Le premier concerne la conception d’un système flexible d’observation et de métrologie de l’Internet. Ce système doit être capable de capturer efficacement les métriques classiques concernant le fonctionnement des protocoles Internet ; il doit aussi permettre aux applications et aux utilisateurs de définir, de déployer et d’exploiter leurs propres métriques. Le deuxième aspect de notre travail sur ce sujet consiste en la définition d’un système de souscriptions de grande échelle. Les événements pour lesquels on peut souscrire sont de types quelconques. Nous anticipons que la détection de ces événements nécessitera la définition et le déploiement de systèmes d’observation et de mesures dédiés en fonction des phénomènes.
La qualité de service proposée par un système de réplication de grande échelle résulte d’un compromis entre les attentes des utilisateurs en terme de disponibilité, de tolérance aux fautes, de performances et de cohérence des états accédés par les différents réplicats de l’application. La satisfaction des utilisateurs repose donc sur la justesse du compromis (qui elle-même dépend de la correction de l’analyse des besoins et des caractéristiques de l’application) entre les différents aspects du service de réplication.
Compte tenu de la diversité des applications, des évolutions des attentes des utilisateurs, et de la variabilité des profils d’usage des applications, la mise en oeuvre d’un compromis unique n’est pas satisfaisante. Le système de réplication doit donc s’adapter afin d’offrir aux utilisateurs de chaque application la qualité de service qui convient.
Notre activité dans ce domaine concerne tout d’abord, le développement d’un système de liaison capable : de créer et de placer des réplicats en fonction des caractéristiques dynamiques de l’infrastructure support et de la localisation des utilisateurs ; de gérer la coopération inter-réplicats ; et de lier chaque utilisateur au réplicat le plus approprié. Ce système de liaison collabore étroitement avec le système d’observation et de métrologie pour suivre les évolutions des paramètres dynamiques ayant un impact sur la qualité du service de réplication.
Notre travail sur ce domaine concerne ensuite le développement d’un support langage capable de traduire les spécifications de contrats de réplication en terme de stratégie d’adaptation (métriques à surveiller) et de politiques internes (création et placement de réplicats, coopération inter-réplicats, liaison des requêtes d’accès aux réplicats).
Pour certaines informations répliquées, les utilisateurs peuvent se satisfaire d’un certain relâchement de la cohérence des réplicats. Par exemple, pour une application de gestion de stock répliqué, les clients peuvent observer momentanément des incohérences entre les réplicats de l’état du stock, sans que cela nuise à la correction de l’application, dès lors qu’il y a suffisamment d’articles dans le stock pour servir toutes les requêtes. Les systèmes distribués de placement de tâches (en vue d’équilibrer les charges de différentes machines) constituent aussi des exemples de systèmes qui tolèrent le relâchement de cohérence entre les réplicats d’informations accédées sur différents sites.
Pour de tels systèmes ou applications, une connaissance approximative de l’état des informations partagées est suffisante. Ces applications utilisent donc des réplicats qui peuvent être divergents sans que cela nuise à leur correction. Pour ce type d’application, maintenir une divergence entre les réplicats en deçà de certaines bornes suffit pour garantir leur correction.
L’objectif de notre recherche dans ce domaine est de définir des protocoles de contrôle de divergence des réplicats d’objets partagés déployés dans des environnements faiblement connectés. Pour capturer l’état global de l’objet répliqué à instant donné, nous recherchons des méthodes de prédiction capable d’aider chaque réplicat à déterminer l’ensemble des opérations initiées sur les autres réplicats et non encore connues de ce réplicat.
Lorsque le système de réplication décide de créer un réplicat d’une application sur un nouveau site, il faut y déployer le code et les données de cette application. De plus, il faut aussi mettre en place sur ce site d’accueil un environnement d’exécution approprié pour cette application.
Notre travail dans ce domaine comprend trois aspects : (i) la définition d’un noyau présent sur tout site d’hébergement ; (ii) la définition d’un protocole actif de déploiement d’application. En particulier, ce protocole doit être capable de prendre en charge la mise en place de l’environnement d’exécution ainsi que l’adaptation de l’application en fonction des caractéristiques de ressources disponibles. (iii) les applications confiées au système doivent être repertoriées et conservées par le système. Ces applications peuvent être accédées à tout moment et n’importe où sur le réseau. Pour supporter cela, on développe un entrepôt réparti d’applications Deal.
La plupart des systèmes d’exploitation sont mal adaptés aux paradigmes de programmation actuels. Ils sont difficilement spécialisables pour répondre aux besoins d’une application donnée. Or, les programmes, les données et leurs politiques de gestion doivent être spécialisables et adaptables afin de prendre en compte par exemple les évolutions technologiques, les besoins spécifiques d’un domaine applicatif, ou les caractéristiques de l’environnement d’exécution.
Un environnement d’exécution virtuel et un langage de programmation à objets réduisent la complexité des développements, facilitent la ré-utilisation, tout en améliorant la qualité des logiciels. Si dans le passé la technologie des machines virtuelles a été considérée comme trop coûteuse pour des systèmes d’exploitation, cette objection tombe avec les nouvelles générations d’architectures processeurs à haute performance et les nouvelles techniques de compilation. La construction d’un système d’exploitation basé sur une machine virtuelle et un langage de programmation à objets, de manière similaire à Java, est donc une approche attrayante. Cependant, les machines virtuelles existantes sont encore trop rigides et imposent un contrôle strict sur ce que l’application peut effectuer. Autrement dit, si la machine virtuelle ne contient pas explicitement toutes les opérations dont le langage de programmation a besoin, il n’y a pas d’autres solutions que de modifier la machine virtuelle. Ceci entraîne une multiplication de machines virtuelles différentes et incompatibles, la difficulté de ré-utilisation des logiciels et l’absence de coopération entre applications écrites dans des langages différents.
Nos recherches dans ce domaine visent à unifier les environnements d’exécution virtuelle, au moyen d’une Machine Virtuelle Virtuelle (MVV). À la différence d’une machine virtuelle « classique », la MVV est capable d’étendre à la volée son jeu d’instructions de manière à s’adapter dynamiquement à de nouveaux types d’applications. Cette approche de MVV présente les avantages suivants :
elle n’impose pas un langage d’exécution unique, mais permet d’exécuter simultanément des applications écrites dans différents langages ;
la représentation interne des objets manipulés par la MVV étant neutre du point de vue de l’application, il n’y a pas de limite à l’interopérabilité des différents langages qui s’exécutent ;
les techniques de recompilation dynamique et de ré-organisation de bytecode sont incluses dans la MVV.
Ainsi, les performances ne devraient pas être dégradées par rapport à une machine virtuelle « classique », tout en diminuant la difficulté de programmation.
Parallèlement à l’aspect environnement d’exécution, la MVV vise à intégrer au coeur du système d’exploitation des techniques langage, de façon à simplifier, optimiser et maximiser l’extensibilité possible du système en fonction des besoins applicatifs. L’approche choisie est donc à la fois de pousser dans ses retranchements le paradigme des micro-noyaux, en ayant un noyau système encore plus restreint en fonctionnalités que ce qui se fait dans des approches de type Exokernel, et de maximiser l’extensibilité en permettant à tout élément du système d’être dynamiquement adapté, modifié ou ajouté selon des besoins applicatifs réversibles et de granularité variable.