Construction d'applications réparties - Programme de rechercheMots clés : programmation constructive, composant, intégration d'applications, reconfiguration dynamique, applications adaptables, code mobile, agents mobiles .Résumé :L'objectif d'adaptabilité
des applications conduit à développer le thème de
la construction d'applications réparties selon deux axes principaux.
La poursuite des objectifs 1) et 2) a fait l'objet de nombreux travaux depuis les années 80. Elle a conduit à l'émergence de plusieurs modèles d'organisation des applications (client-serveur, communication par événements, partage d'objets) et des mécanismes nécessaires à leur mise en oeuvre (appel de procédure à distance, bus logiciel, mémoire virtuelle répartie). Dans les années 1987-95, nous avons nous-mêmes contribué à ces recherches, à travers le projet Guide (dont est issu le projet Sirac). Les contributions de Guide ont porté sur le langage [3] et le support d'exécution ([1], [6]); on en trouvera une synthèse rétrospective dans [2]. Les résultats des recherches sont aujourd'hui intégrés dans un ensemble de produits largement utilisés (Corba, DCOM, Java), s'appuyant sur des normes officielles ou des standards de fait. Concernant les objectifs c) et d), la diffusion industrielle des techniques à base d'objets dans les années 1990 a contribué à améliorer la qualité globale du logiciel et particulièrement la réutilisation de programmes et la maintenabilité des applications. Néanmoins, ces techniques seules ne répondent pas entièrement aux objectifs visés, car elles laissent de côté plusieurs aspects: la description globale d'une architecture logicielle, la composition d'une application par assemblage de pièces élémentaires, l'évolution dynamique d'une application. C'est pour intégrer ces aspects qu'a été introduite la notion de composant logiciel [Szy98]. Les composants [19] possèdent des propriétés analogues à celles des objets (encapsulation de code et de données, séparation entre interface et réalisation, polymorphisme, mécanismes d'héritage), mais présentent en outre des caractéristiques facilitant la composition, la réutilisation et l'évolution:
La caractérisation ci-dessus n'est qu'indicative. En effet, la notion de composant n'est pas stabilisée et fait encore l'objet de discussions, notamment au sein des instances de normalisation telles que l' Object Management Group (OMG). Nous avons choisi de privilégier deux domaines de recherche autour des composants logiciels : 1) l'élaboration de modèles de composants, la définition des architectures logicielles, les langages pour la composition d'applications et l'expression des propriétés ; 2) les mécanismes de base et le support système pour l'adaptabilité (mobilité, duplication, reconfiguration). Nous développons ci-après ces deux domaines, avec un accent particulier sur les aspects touchant la répartition.
La description globale d'une application fait intervenir trois types d'entités[SDK+95]: les composants proprement dits; les connecteurs, qui représentent les interactions entre les composants; et enfin les configurations, qui définissent la structure globale d'une application au moyen de composants et de connecteurs. Ce schéma de description peut être utilisé récursivement (une configuration pouvant être utilisée comme composant dans une description à plus gros grain). Les langages de description d'architecture ( Architecture Description Languages, ou ADL) sont des notations permettant de décrire formellement des applications structurées selon le schéma ci-dessus. Il en existe une grande variété selon le mode de définition des composants et connecteurs, et selon la sémantique attachée à la description. Les ADL les plus simples ont une sémantique très pauvre, la seule information étant la signature des interfaces. Des langages plus élaborés permettent une spécification du comportement. Les travaux récents visent à spécifier les propriétés dites ``non-fonctionnelles'' (performances, sécurité, disponibilité) au moyen d'interfaces supplémentaires associées aux composants. C'est par exemple la démarche de l' Aspect Oriented Programming[KLM+97] ou des langages de spécification de la qualité de service[FK99]. Néanmoins, ces propriétés restent attachées aux composants et sont encore peu intégrées dans les ADL. Outre leur intérêt pour l'aide au développement
et à la maintenance des applications, les ADL peuvent servir, selon
leur nature, pour la vérification formelle de propriétés,
ou pour l'aide à la génération de programmes permettant
d'administrer les applications, tels que des scripts d'installation
ou de reconfiguration. Les travaux de Sirac sur l'environnement Olan [4]
ont suivi cette dernière voie.
L'objectif est ici de permettre à une application répartie, supposée organisée comme un assemblage de composants, d'adapter son comportement à des modifications de son environnement ou de ses conditions d'utilisation. La réactivité étant une qualité requise dans beaucoup d'applications, il est souhaitable que cette adaptation puisse être réalisée dynamiquement. L'adaptation utilise différents mécanismes: évolution, remplacement ou suppression de composants existants, introduction de nouveaux composants, migration de composants d'un site à un autre, duplication de composants, modification des connexions entre composants. Une voie d'approche pour l'évolution dynamique des composants consiste à leur associer un ``méta-protocole'' comportant des primitives pour l'observation et la modification, en cours d'exécution, de certaines caractéristiques spécifiées. L'introduction de mécanismes de réflexivité[KJB91] dans les langages de programmation permet aussi d'atteindre cet objectif. L'adaptabilité peut également s'appliquer aux composants de l'infrastructure ( middleware); le système doit alors lui-même être extensible. Toutes ces formes d'adaptabilité sont considérées dans le projet Sirac. La modification des composants n'est pas toujours possible, notamment lorsque l'on ne dispose pas des sources ou des droits d'accès nécessaires. Une approche consiste alors à interposer dans le schéma global de l'application des entités réactives chargées d'intercepter des événements significatifs et d'y réagir de manière appropriée. Cette méthode permet de localiser les fonctions d'adaptation dans ces entités intermédiaires, ``agents'' ou représentants ( proxies), et elle a été notamment utilisée pour garantir la qualité de service dans des applications mobiles[GWBC99]. Nous l'avons appliquée avec succès dans un travail mené en collaboration avec Bull dans le cadre du GIE Dyade (voir 7.1). La migration de composants d'une application ou d'entités intermédiaires fournit un moyen d'améliorer les performances d'une application répartie, par exemple en rapprochant un programme des données qu'il doit traiter, ou en réagissant à des variations de performances d'un réseau. La réalisation pratique de cette mobilité pose néanmoins des problèmes délicats, que nous avons abordés dans nos travaux récents: Construction d'applications réparties - Résultats récentsRésumé :L'objectif est de fournir des outils
et services pour le développement et l'exécution d'applications
réparties adaptables. Nous avons développé et validé
expérimentalement plusieurs méthodes pour faciliter l'adaptabilité
des applications selon trois directions : a) Extensibilité
(possibilité d'inclure dynamiquement de nouvelles fonctions dans
un composant). b) Mobilité du code et des
données. c) Reconfiguration (méthodes
permettant d'apporter des modifications de composition ou de structure
à une application construite par assemblage de composants).
Dans le cadre d'actions contractuelles avec des partenaires extérieurs, nous avons commencé à expérimenter les méthodes et outils ci-dessus sur diverses plates-formes expérimentales, existantes ou en cours de mise en place : environnements étendus pour Enterprise Java Beans, bus logiciel à agents, environnement pour applications à base de cartes à puce. Dans de nombreux domaines d'application de l'informatique répartie, on constate une évolution de plus en plus rapide des besoins et des conditions d'utilisation. Le développement d'applications réparties adaptables vise à y répondre. L'adaptation peut prendre différentes formes (changement de structure, de contenu, de localisation des programmes ou des données, etc.). Des exigences de réactivité imposent souvent une adaptation dynamique. L'objectif de nos travaux dans ce domaine est de développer des méthodes et outils pour faciliter l'adaptation des applications réparties conçues à base de composants. Les domaines d'applications visés sont prioritairement (mais non exclusivement) ceux des applications dites mobiles, dans lesquelles les utilisateurs et/ou des composants matériels ou logiciels de l'application peuvent se déplacer. 1. Méthodes et outils pour l'extensibilitéParticipants : Eric Bruneton, Fabienne Boyer, Daniel Hagimont, Vania Marangozova, Michel Riveill.Cette recherche vise à étudier les mécanismes de base pour produire des applications configurables et extensibles. Nous avons développé un environnement expérimental pour la construction de telles applications, sous la forme d'une extension de l'environnement Java appelée JavaPods, qui comporte les éléments suivants :
2. Méthodes et outils pour la mobilité et la duplicationParticipants : Sara Bouchenak, Daniel Hagimont, Fabienne Boyer, Leila Ismail, Vania Marangozova, Michel Riveill.La mobilité des données, associée à des techniques de gestion de caches répartis, permet à la fois de diminuer la latence d'accès aux informations et de modifier dynamiquement l'environnement d'exécution d'une application pour répondre à des besoins changeants. La mobilité du code permet de déplacer dynamiquement l'exécution d'un processus client vers un serveur de données pour remédier à la variabilité des performances d'un réseau. Nous travaillons dans trois directions.
3. Méthodes et outils pour la reconfigurationParticipants : Luc Bellissard, Noël De Palma, David Féliot, Michel Riveill.Nous travaillons dans trois directions:
|
Michel RIVEILL
Laboratoire I3S
|