Partiel Systèmes répartis et client/serveur (SRCS)

Transcription

Partiel Systèmes répartis et client/serveur (SRCS)
Université Pierre et Marie Curie
Master Informatique – M1
Spécialité : Systèmes et applications réparties (SAR)
Module : Systèmes répartis et client/serveur (SRCS)
Avril 2005
Partiel
Systèmes répartis et client/serveur (SRCS)
Documents autorisés. 2 heures.
Le barème est donné à titre indicatif.
Ce sujet comporte 3 pages.
1 Questions de cours (4 points)
1.1
Qu'est-ce qu'un consensus dans un système réparti ? Comment peut-on le réaliser ? (2 points)
1.2
Dans le cadre de communications distantes, qu'est-ce qu'une souche ? (1 point)
1.3
Lors de l’invocation d’une méthode distante Java RMI, quelle est la différence entre le passage d’un
objet par valeur et le passage d’un objet par référence ? (1 point)
2 RPC (3 points)
2.1
Indiquer brièvement quels sont les avantages de la couche basse des RPC par rapport à la couche
moyenne.
2.2
En utilisant la couche basse, indiquer comment redéfinir le timeout par défaut et rendre l'appel asynchrone.
2.3
Dans le cas d'un appel RPC asynchrone, et en l'absence d'erreur, quelle est la valeur de retour de
l'appel ?
1/3
3 RMI et HTTP (9 points)
On considère des objets RMI situés dans deux réseaux locaux différents séparés par Internet (voir figure
ci-dessous). Les routeurs des sous réseaux laissent passer le trafic HTTP mais pas le trafic RMI. Pour
communiquer avec l’objet serveur S1, les objets clients C1 et C2 doivent donc passer par les serveurs web
W1 et W2. Le but de cet exercice est d’étudier la transmission d’invocations de méthodes RMI par le protocole HTTP.
C1
W1
W2
S1
C2
S1
L’objet serveur S1 fournit les méthodes suivantes :
- setTime : positionne l’heure courante et le fuseau horaire courant. Cette méthode prend en paramètre
une chaîne de caractères représentant l’heure courante et un entier correspondant au fuseau horaire.
Ne retourne rien.
- getTime : retourne l’heure courante dans le fuseau horaire donné. Cette méthode prend en paramètre
un entier correspondant au fuseau horaire et retourne une chaîne de caractères correspondant à l’heure
courante dans le fuseau horaire transmis.
3.1
Ecrire l’interface ServeurItf Java RMI de l’objet serveur S1. (1 point)
W1
On s’intéresse au serveur Web W1 qui reçoit les requêtes des objets C1 et C2 et les transmet à W2.
3.2
Vis-à-vis de C1 et C2, W1 est-il client Web, client RMI, serveur Web ou Serveur RMI ? Même
question vis-à-vis de W2 ? (0,5 point)
Pour envoyer une invocation de méthode (setTime ou getTime) provenant de C1 ou de C2, à W2, W1
utilise une requête GET (HTTP version 1.1). On supposera que l’adresse et le port de W2 sont respectivement w2.com et 80. La classe W1Impl fournit le code de W1.
3.3
Dans le cas de l’invocation setTime("10h15",1), indiquer qu’elle pourrait être la requête HTTP
envoyée par W1 ? Il n’y a pas une seule réponse possible. Justifier votre choix. (1 point)
3.4
Ecrire le code Java de la méthode setTime de la classe W1Impl. Pour simplifier on pourra considérer que la classe OutputStream possède une méthode write qui permet d’envoyer une chaîne de
caractères. (1,5 point)
3.5
En quoi le code de la méthode getTime diffère de celui de setTime (on ne vous demande pas le
code de la méthode getTime) ? (0,5 point)
3.6
On se place dans le cas où C1 et C2 utilisent chacun plusieurs threads et invoquent simultanément
les méthodes setTime et getTime de la classe W1Impl. Y a-t-il un nouveau problème à résoudre ?
Pourquoi ? (1 point)
W2
3.7
Ecrire en français l’algorithme du serveur W2. (1,5 point)
2/3
Côté serveur
On suppose qu’il y a maintenant un objet serveur RMI supplémentaire, S2, et que C1 et C2 peuvent choisir l’objet serveur (S1 ou S2) auquel ils veulent envoyer leur requête.
3.8
Les deux objets serveurs RMI S1 et S2 peuvent-ils être instances de la même classe ? Quelles sont
les règles d’écriture propre à Java RMI que doit respecter une classe d’objets serveurs (on ne vous
demande pas d’écrire cette classe) ? (1 point)
3.9
Pour C1, C2 et W1, est-ce que l’introduction de S2 change quelque chose ? Si non, pourquoi ? Si
oui, quoi ? (1 point)
4 Protocole client/serveur de diffusion de messages (4 points)
On considère un protocole client/serveur qui permet de diffuser des messages à un ensemble de sites organisés selon une topologie en arbre. Chaque nœud de l’arbre propage le message à ses fils. Par exemple,
dans la figure ci-dessous, pour diffuser son message, le site 1 l’envoie à 2 et 5, puis 2 l’envoie à 3 et 4
tandis qu’en parallèle, 5 l’envoie à 6.
1
2
3
4.1
5
4
6
Quel peut-être l’avantage d’une diffusion en arbre par rapport à une diffusion habituelle (par exemple de type Multicast IP) ? (1 point)
On considère que les sites communiquent en UDP sur le port 5000 en envoyant des messages de 2048
octets, et que chaque site a :
- une variable pere qui contient l’adresse de son père dans l’arbre,
- un tableau fils qui contient les adresses de ses fils.
4.2
Ecrire en Java le code d’un nœud intermédiaire (dans l’exemple 2 et 5 sont des nœuds intermédiaires). (2 points)
On suppose maintenant que les nœuds feuille (3, 4 et 6 dans l’exemple), renvoient à l’émetteur, un accusé
de réception lorsque le message arrive. Cet accusé est transmis immédiatement par le nœud intermédiaire
à la racine.
4.3
De quoi faut-il s’assurer par rapport au code de la question précédente pour que la transmission de
l’accusé à la racine soit faite instantanément lorsqu’il est reçu par le nœud intermédiaire ? (1 point)
3/3