Académique Documents
Professionnel Documents
Culture Documents
Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr Remerciements Michel Riveill
Plan
Principes gnraux
Modle client-serveur Appel de procdure distance (Remote Procedure Call)
Modle client-serveur
Dfinition
Application client/serveur
application qui fait appel des services distants au travers dun change de messages (les requtes) plutt que par un partage de donnes (mmoire ou fichiers) serveur
programme offrant un service sur un rseau (par extension, machine offrant un service)
client
programme qui met des requtes (ou demandes de service). Il est toujours linitiateur du dialogue
Appel(p_in)
Retour(p_out)
client
serveur
Modle client-serveur
Principe
Vu du client client Vu du serveur Rponse
Gestion des requtes (priorit) Excution du service (squentiel, concurrent) Mmorisation ou non de l'tat du client
Requte
Service distant
Modle client-serveur
Gestion des processus
Modle client-serveur
Exemple
Serveur Serveur Serveur Serveur Serveur de fichiers (nfsd) d'impressions (lpd) de calcul base de donnes de noms (annuaire des services)
communication
Appelant
Appel
A
Appel
B
appel
rseau E
return
return
client
serveur
10
RPC (A)
Principe de fonctionnement
Ct de lappelant
Le client ralise un appel procdural vers la procdure talon client (stub)
transmission de lensemble des arguments
au point A
le talon collecte les arguments et les assemble dans un message (empaquetage - parameter marshalling) un identificateur est gnr pour le RPC et joint au message Un dlai de garde est arm Pb : dtermination de ladresse du serveur (annuaire de services) le talon transmet les donnes au protocole de transport pour mission sur le rseau
11
RPC (B et C)
Cot de lappel
Principe de fonctionnement
lappel est ensuite transmis la procdure distante requise pour tre excut (point C) Le retour de la procdure redonne la main au service de RPC et lui transmet les paramtres rsultats (point D)
12
RPC (D)
Principe de fonctionnement
Cot de lappel
au point D
les arguments de retour sont empaquets dans un message un autre dlai de garde est arm le talon transmet les donnes au protocole de transport pour mission sur le rseau
13
RPC (E)
Principe de fonctionnement
Cot de lappelant
lappel est transmis au service de RPC (point E)
les arguments de retour sont dpaquets le dlai de garde arm au point A est dsarm un message dacquittement avec lidentificateur du RPC est envoy au talon serveur (le dlai de garde arm au point D peut tre dsarm) les rsultats sont transmis lappelant lors du retour de procdure
14
RPC
15
RPC
Perte de message
Cot client
Si le dlai de garde expire
Rmission du message (avec le mme identificateur) Abandon aprs N tentatives
Cot serveur
Si le dlai de garde expire Si on reoit un message avec un identificateur identique
Rmission de la rponse Abandon aprs N tentatives
Cot client
Si on reoit une rponse avec un identificateur dj reu
Rmission du message d'acquittement
16
RPC
Problmes
Traitement des dfaillances
Congestion du rseau ou du serveur
la rponse ne parvient pas avant une date fixe par le client (systme temps critique)
Problmes de scurit
authentification du client authentification du serveur confidentialit des changes
Panne du client pendant le traitement de la requte Panne du serveur avant ou pendant le traitement de la requte Panne du systme de communication Quelles garanties ?
17
RPC
18
IDL
Description dinterface
bibliothque
Procdure du serveur
skeleton compilateur
20
Java RMI
Principe
objet client
rfrence
objet serveur
tat Methode_1 Talon client
appel
Systme de communication
Java RMI
Cot serveur
rmiregistry
stub
2
Naming
1
Client
3
stub Skeleton JVM Client
Serveur
JVM Serveur 22
Java RMI
Cot serveur
0 - A la cration de lobjet, un stub et un skeleton (avec un port de communication) sont crs cot serveur 1 - L'objet serveur s'enregistre auprs d'un annuaire (rmiregistry) en utilisant la classe Naming (mthode rebind) 2 L'annuaire (rmiregistry) enregistre le stub de lobjet 3 L'annuaire est prt donner des rfrences lobjet serveur
23
Java RMI
Cot client
5
Naming
rmiregistry
stub Naming
4
Client
Serveur
Stub
Skeleton
JVM Client
JVM Serveur 24
Java RMI
Cot client
4 - L'objet client fait appel l'annuaire (rmiregistry) en utilisant la classe Naming pour localiser l'objet serveur (mthode lookup) 5 L'annuaire dlivre une copie du stub 6 - Lobjet stub est install et sa rfrence est retourne au client 7 - Le client effectue l'appel lobjet serveur par appel lobjet stub
25
Java RMI
Utilisation
codage
description de linterface du service criture du code du serveur qui implante linterface criture du client qui appelle le serveur
compilation
compilation des sources (javac) gnration des stub et skeleton (rmic)
activation
lancement du serveur de noms (rmiregistry) lancement du serveur lancement du client
26
27
Java RMI
Exemple : Interface
fichier Hello.java public interface Hello extends java.rmi.Remote { public void sayHello() throws java.rmi.RemoteException; }
Description de linterface
28
Java RMI
Exemple : Serveur
fichier HelloServeur.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class HelloServeur extends UnicastRemoteObject implements Hello { String message;
Ralisation du serveur
// Implmentation du constructeur public HelloServeur(String msg) throws java.rmi.RemoteException { message = msg; } // Implmentation de la mthode distante public void sayHello() throws java.rmi.RemoteException { System.out.println(message); }
29
Java RMI
Exemple : Serveur
fichier HelloServeur.java
public static void main(String args[]) { try { // Cre une instance de lobjet serveur. Hello obj = new HelloServeur(); // Enregistre l'objet crer auprs du serveur de noms. Naming.rebind("//ma_machine/mon_serveur", obj); System.out.println("HelloServeur " + " bound in registry"); } catch (Exception exc) { } }
ATTENTION : dans cet exemple le serveur de nom doit tre activ avant la cration du serveur
30
Java RMI
try { // transformation dune chane de caractres en entier Integer I = new Integer(args[0]); port = I.intValue(); } catch (Exception ex) { System.out.println(" Please enter: Server <port>"); return; } try { // Cration du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port); // Cration dune instance de lobjet serveur Hello obj = new HelloServeur();
// Calcul de lURL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+ port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) { ...}
31
Java RMI
Exemple : Client
fichier HelloClient.java import java.rmi.*;
public class HelloClient { public static void main(String args[]) { try { // Rcupration d'un stub sur l'objet serveur. Hello obj = (Hello) Naming.lookup("//ma_machine/mon_serveur"); // Appel d'une mthode sur l'objet distant. obj.sayHello(); } catch (Exception exc) { } } }
Ralisation du client
32
Java RMI
Compilation
Compilation de linterface, du serveur et du client
javac Hello.java HelloServeur.java HelloClient.java
33
Java RMI
Dploiement
1) Activation du serveur de nom
rmiregistry &
2) Activation du serveur
java HelloServeur java -Djava.rmi.server.codebase=http://ma_machine/
path indiquant quelle endroit la machine virtuelle cliente va pouvoir chercher le code du stub Ncessaire si le client et le serveur ne sont pas sur la mme station
3) Activation du client
java HelloClient
34
Java RMI
Java VM Client
R_objet1.m ()
Java VM R_objet1
m ()
Stub R_objet1
Skeleton R_objet1
35
Java RMI
Java VM O2 Client
R_objet1.m ( O2 )
Java VM R_objet1
m ( O2 )
Stub R_objet1
Java RMI
R_O2
Java VM R_objet1
m ( R_02 )
Client
R_objet1.m ( R_O2 )
Stub R_objet1
Skeleton R_objet1
37
Java RMI
R_O2
Client
R_objet1.m ( R_O2 )
Stub R_O2
Stub R_objet1
Skeleton R_objet1
38
39
Ouverture :
RPC asynchrone
Le client poursuit son excution aprs lmission du message dappel
la procdure distante sexcute en parallle avec la poursuite du client et retourne les paramtres rsultats en fin de son excution le client rcupre les rsultats quand il en a besoin (primitive spciale de lecture)
la lecture rend un rsultat nul si le rsultat nest pas disponible la lecture bloque le client si le rsultat nest pas disponible
avantage : paralllisme plus important critique : le client ne retrouve pas la smantique de lappel de procdure
40
Outils de dveloppement
limits la gnration automatique des talons peu (ou pas) doutils pour le dploiement et la mise au point d'applications rparties (CCM)
41
Rfrences
A.D. Birrell and B.J. Nelson, "Implementing remote procedure calls", ACM Transactions on Computer Systems, vol. 2(1), pp. 39-59, February 1984 Java Remote Method Invocation (Java RMI) http://java.sun.com/products/jdk/rmi/
42