Examen de Programmation répartie de décembre 2000
Tous documents autorisés. Durée 2h.
1. Question de cours (6 points)
Répondre aux questions en justifiant brièvement (3 ou 4 phrases) vos réponses.
- Qu'est-ce qu'une invocation de méthode semi-synchrone ? En quoi cela permet-il
d'introduire de la concurrence dans les programmes ?
- Dans le cadre de communications distantes, qu'est-ce qu'une souche ? Quel(s)
type(s) de souche rencontre-t-on ?
- Que permet de faire le langage IDL de CORBA ? Quel est son intérêt ?
- Quelles sont les fonctionnalités de l'adaptateur d'objets dans un environnement CORBA ?
- Quelle est la différence entre les modes d'invocation de méthode statique et dynamique
présents dans CORBA et dans DCOM ?
- Dans les modèles de composants vus en cours (EJB, CCM, DCOM) qu'est-ce qu'une fabrique ?
2. Répartiteur de charges (14 points)
Cet exercice a pour but d'étudier dans le cadre d'un environnement de programmation
répartie un aiguilleur de requètes. Celui-ci permet de répartir la charge de traitements
entre plusieurs machines.
La figure ci-dessous présente l'architecture envisagée qui comprend deux utilisateurs,
un aiguilleur et trois machines identiques (i.e. fournissant les mêmes services).
Les utilisateurs, l'aiguilleur et les machines sont des objets CORBA.
Les utilisateurs soumettent des requètes à l'utilsateur. Pour chaque requète,
l'aiguilleur choisit de la redirider à une machine et une seule. La machine choisie
traite la requète, fournit le résultat à l'aiguilleur qui le retransmet à l'utilisateur.
Pendant le temps de traitement de la requète, l'aiguilleur peut aiguiler une nouvelle
requète vers une autre machine ou vers la même. L'aiguilleur est donc un objet concurrent.
Le degré de concurrence des machines est étudié dans la partie 3.
2.1 Interfaces (3 points)
2.1.1 Pour chcun des trois types d'objets CORBA (utilisateur, aiguilleur, machine),
dire s'ils sont client (de qui), serveur (pour qui) ou client/serveur (de qui et pour qui). (1 point)
2.1.2 Chaque objet machine fournit deux services :
- un service dit lecture qui à partir d'un nom de fichier (une chaîne
de caractères) fourni en entrée, retourne les données (un tableau de taille
non déterminée d'octets) correspondant au contenu du fichier,
- un service dit écriture qui à parti d'un nom de fichier (une chaîne de caractères)
et de données (un tableau de taille non déterminée d'octets) fourni en entrée, écrit
les données dans le fichier. Ce service retourne un booléen qui vaut vrai en cas
de succès de l'opération écriture.
On suppose dans un premier temps que tous les objets machines ont accès aux mêmes
fichiers et que l'écriture dans un fichier est répercutée de façon immédiate et
automatique sur toutes les machines. Donner en IDL CORBA la définition de l'interface
Machine contenant ces 2 services. (2 points)
2.2 Aiguilleur (5 points)
2.2.1 Sans anticiper sur les questions suivantes et sans en donner la définition
explicite, expliquer à partir des indications fournies jusqu'à présent, quelle doit être
l'interface de l'aiguilleur. (1 point)
2.2.2 On souhaite maintenant que des objets machines puissent être ajoutés et retirés
en cours d'exécution au "pool" d'objets géré par l'aiguilleur.
Quelle(s) méthode(s) faut-il définir pou prendre en compte ces fonctionnalités ?
Pour quel(s) objet(s) ? Définir en IDL CORBA ou en pseudo code, l'interface Controle,
réunissant ces fonctionnalités. Donner en français la signification précise de
chaque élément (méthodes, paramètres, etc) défini. (1 point)
2.2.3 Proposer en français ou en pseudo code un algorithme, le plus
simple possible, pour effecruer la répartition de charge. L'algorithme doit répartir
équitablement les requêtes entre toutes les machines sans tenir compte du fait que
certaines requêtes peuvent être plus longues que d'autres. (1 point)
2.2.4 On souhaite maintenant prendre en compte les charges des machines.
Périodiquement les machines informent laiguilleur de leur niveau de charge. Celui-ci
est représenté par un entier donnant le nombre de requête en attente sur la machine.
On suppose que ces notifications sont des informations non prioritaires dont la perte
est sans conséquence.
Quelle(s) méthode(s) faut-il définir pour prendre en compte cette fonctionnalité ?
Pour quel(s) objet(s) ? Définir en IDL CORBA ou en pseudo code, l'interface Notification
compenant cette fonctionnalité. (1 point)
2.2.5 Finalement, comment construit-on l'interface complète de l'aiguilleur
prenant en compte l'ensemble des fonctionnalités le concernant ? (1 point)
2.3 Concurrences des traitements (3 points)
2.3.1 Expliquer quel peut être le degré de concurrence acceptable pour une machine
en fonction des deux types de requètes lecture et écriture. (1 point)
2.3.2 On considère maintenant que lors d'une opération d'écriture,la mise à jour
du fichier sur toutes les machines est à la charge de la machine qui traite la requète
d'écriture.
Faut-il ajouter les définitions aux interfaces précédentes pour prendre en compte
ce cas ? Si oui, le(s)quelle(s) ? Si non, pourquoi ? (1 point)
2.3.3 On s'intéresse maintenant aux incohérences qui peuvent survenir lorsque
l'aiguilleur répartit successivement deux requètes d'écriture pour un même fichier
sur deux machines différentes.
Expliquer en quoi consiste cette incohérence. Proposer pour gérer ce problème
au niveau de l'aiguilleur, une solution simple qui ne modifie aucune interface. (1 point)
2.4 Performances (3 points)
2.4.1 L'aiguilleur étant un point de passage obligé et de ce fait un goulet
d'étranglement pour les requètes et les réponses, proposer une solution n'introduisant
pas de nouvelles entités pour alléger sa charge, notamment en ce qui concerne la
gestion des réponses.
Expliquer sans forcément les définir explicitement quelle(s) conséquence(s)
cela entraîne sur les interfaces. (1 point)
2.4.2 Pour palier au problème du goulet d'étranglement, on propose en plus de
la solution précédente, de mettre en place plusieurs aiguilleurs dont la répartition
des rôles sera définit (codée "en dur" chez les utilisateurs).
Proposer deux façon de répartir le travail entre les aiguilleurs, autres que
celle de l'algorithme que vous avez proposé en 2.2.3. (2 points)