You are on page 1of 42

Modle client-serveur

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)

Application dans l'environnement Java


Java Remote Method Invocation (RMI)

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

Modle client-serveur Communication par messages

Deux messages (au moins) changs


Le premier message correspondant la requte est celui de l'appel de procdure, porteur des paramtres d'appel. Le second message correspondant la rponse est celui du retour de procdure porteur des paramtres rsultats.
Procdure n_proc (p_in, p_out) begin end

appel n_proc (p_in, p_out)

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

Slection Requtes Traitement Rponses


5

Modle client-serveur
Gestion des processus

Client et serveur sont dans des processus distincts


Le client est suspendu lors de lexcution de la requte Eventuellement, excution concurrente de plusieurs requtes chez le serveur
Plusieurs processus (une mmoire virtuelle associe chaque processus) Plusieurs processus lgers (thread) dans le mme espace virtuel (contexte restreint: pile, mot d'tat, registres)

Diffrents types de service



Pas de modification de donnes rmanentes sur le serveur
ex: calcul fonction ou lecture donne

Modification du contexte dexcution sur le site distant


ex: serveur de fichiers ou d'objets problmes de la concurrence et des pannes

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)

Remote Procedure Call (RPC)


Principes

Gnration du code
d'envoi et rception des messages De dtection et rmission des messages perdus

Objectif : le programmeur dveloppe son application comme si elle tait centralise

RPC [Birrel & Nelson84]


Principe de ralisation
Service RPC Protocole de (talon)
Protocole de Service RPC communication (talon)

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

le protocole de transport dlivre le message au service de RPC (talon serveur/skeleton) au point B


le talon dsassemble les arguments (dpaquetage - unmarshalling) lidentificateur de RPC est enregistr

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

Rle des talons

Talon client - stub Cest la procdure dinterface du site client


qui reoit lappel en mode local le transforme en appel distant en envoyant un message reoit les rsultats aprs l'excution retourne les paramtres rsultats comme dans un retour de procdure

Talon serveur - skeleton Cest la procdure sur le site serveur


qui reoit lappel sous forme de message fait raliser lexcution sur le site serveur par la procdure serveur (choix de la procdure) retransmet les rsultats par message

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 ?

Performance Dsignation Aspects pratiques


Adaptation des conditions multiples (protocoles, langages, matriels)

17

RPC

IDL : spcification des interfaces


Utilisation d'un langage de description dinterface (IDL)
Spcification commune au client et au serveur Dfinition des types et natures des paramtres (IN, OUT, IN-OUT)

Utilisation de ces dfinitions pour gnrer automatiquement :


le talon client (ou proxy, stub) le talon serveur (ou squelette, skeleton)

18

IDL

Mode opratoire (gnral)


Procdure du client stub compilateur Programme client

Description dinterface

Gnrateur de talons Gnrateur de talons

Dfinitions communes Dfinitions communes

bibliothque

bibliothque Programme serveur


19

Procdure du serveur

skeleton compilateur

Java Remote Method Invocation


RMI

Un RPC objet intgr Java Interaction d'objets situs dans des espaces d'adressage diffrents (des Java Virtual Machines - JVM) sur des machines distinctes Simple mettre en uvre : un objet distribu se manipule comme tout autre objet Java

20

Java RMI
Principe

objet client
rfrence

objet serveur
tat Methode_1 Talon client

appel

Talon serveur Methode_n

Systme de communication

Rfrence d'objet + mthode + arguments Rsultat ou exception

dsignation envoi de requtes excution de requte retour de rsultat 21

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

Java RMI Manuel d'utilisation

Dfinition de l'interface de l'objet rparti


interface publique interface : "extends java.rmi.Remote" methodes : "throws java.rmi.RemoteException" paramtres srializables : "implements Serializable" paramtres rfrences : "implements Remote"

Ecrire une implmentation de l'objet rparti


classe : "extends java.rmi.server.UnicastRemoteObject"

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) { } }

Ralisation du serveur (suite)

ATTENTION : dans cet exemple le serveur de nom doit tre activ avant la cration du serveur
30

Java RMI

Activation du serveur de nom par le serveur


public static void main(String args[]) { int port; String URL; fichier HelloServeur.java

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

Gnration des talons


rmic HelloServeur
skeleton dans HelloServeur_Skel.class stub dans HelloServeur_Stub.class.

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

Principe de lappel de mthode

Java VM Client
R_objet1.m ()

Java VM R_objet1
m ()

Stub R_objet1

Skeleton R_objet1

35

Java RMI

Passage en paramtre dun objet srialisable

Java VM O2 Client
R_objet1.m ( O2 )

Java VM R_objet1
m ( O2 )

clone_O2 Skeleton R_objet1


36

Stub R_objet1

Java RMI

R_O2

Passage en paramtre dun objet remote

Java VM Stub 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

Passage en paramtre dun objet remote

Java VM Stub R_O2

Java VM Objet objet1


m ( R_O2 )

Client
R_objet1.m ( R_O2 )

Stub R_O2

Stub R_objet1

Skeleton R_objet1
38

Java RMI : bilan

Trs bon exemple de RPC


facilit dutilisation intgration au langage Java Passage de rfrence -> srialisation ou rfrence distance Absence de talon -> chargement dynamique des talons et des classes srialisables Dsignation par des URL

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

Les limites du modle clientserveur

Services pour la construction dapplications rparties


le RPC est un mcanisme de bas niveau des services additionnels sont ncessaires pour la construction dapplications rparties (dsignation, fichiers rpartis, scurit, etc.)
CORBA, EJB ...

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

You might also like