42
Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes http://sardes.inrialpes.fr/~depalm a [email protected]

Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma [email protected]

Embed Size (px)

Citation preview

Page 1: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Introduction aux applications réparties

Noël De Palma

Projet SARDES

INRIA Rhône-Alpeshttp://sardes.inrialpes.fr/~depalma

[email protected]

Page 2: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Applications réparties

• Intérêt des applications réparties• Caractéristiques et besoins• Outils de bases• Modèles d’applications réparties

Def : Application s’exécutant sur plusieurs sites reliés par un réseau de communication

Page 3: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Intérêt des applications réparties

• Besoin de communication et de partage d’information

• Besoin de tolérance aux fautes

• Besoin de puissance de calcul

Page 4: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Web

• Accès universel à de l’information

Client Http Serveur Http

Get/post

html

Page 5: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Qq problèmes de base en distribué

• Hétérogénéité ?• Passage à grande échelle ?• Tolérance aux pannes ?• Sécurité ?

Plus difficiles à concevoir, à programmer, à déployer et à administrer

Besoin de modèles & d’outils adaptés

Page 6: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Outils de programmation

• Outils de base : socket• Middleware (Intergiciel)

– Couche logiciel (répartie) destinée à :• Masquer la répartition des traitements et des données • Masquer l ’hétérogénéité des machines & des systèmes• Fournir des services associés pour gérer :

– Fiabilité

– Sécurité

– Scalabilité

– …

Applications

“Middleware”

Site 1 Site 2

Interface

Système decommunication

Services de gestion de la distribution

Page 7: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Catégorie d’intergiciel

• Différents types d ’intergiciels pour adresser différents problèmes

• Analyse du problème => choix de l’ intergiciel• Différents Modèle d’exécution

– Modèle client serveur– Modèle de communication par message

Page 8: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Modèle de communication par messages

• Message Passing (communication par messages)

• Message Queuing (communication par file de message)

• Publish/Subscribe (communication par abonnements)

Page 9: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Message passing• Principes directeurs

– communication asynchrone

– communication directe ou indirecte (via des “portes”)• problème de désignation, localisation des entités coopérantes

– messages éventuellement typés

producteur consomateur

exécution

du

service

Port_SPort_C

(nom_de_service, paramètres, port_C)

Page 10: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Message Queuing

• Queue de messages– persistantes asynchronisme et fiabilité

• Indépendance de l'émetteur et du destinataire– Le destinataire n’est pas forcément actif

send recv

Client Serveur

Page 11: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Publish/Subscribe (1)

• Désignation anonyme– L’émetteur envoie un message

• Basé sur un sujet (subject-based)• Basé sur un contenu (content-based)

– Le récepteur s’abonne (à un sujet ou un contenu)

• Communication 1-N– Plusieurs récepteurs peuvent s’abonner

Page 12: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Publish/Subscribe (2)

consommateur

publish

producteur

subscribe

recv

Page 13: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Modèle client-serveur définition

• Application client/serveur– Appel synchrone d’un service au travers d’un

échange de messages (requête/réponse) plutôt que par un partage de données (mémoire ou fichiers)

– serveur• programme offrant un service sur un réseau (par

extension, machine offrant un service)– client

• programme qui émet des requêtes (ou demandes de service). Il est toujours l’initiateur du dialogue

Page 14: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Modèle client-serveur• Deux messages (au moins) échangés

– Le premier message correspondant à la requête est celui de l'appel de procédure, porteur des paramètres d'appel.

– Le second message correspondant à la réponse est celui du retour de procédure porteur des paramètres résultats.

appel n_proc (p_in, p_out)

client

Procédure n_proc (p_in, p_out)begin

end

serveur

Retour(p_out)

Appel(p_in)

Page 15: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Client/Serveur en mode connecté

établissement de la connexion

bloqué jusqu'à la réception de la réponse

bloqué jusqu'à la réception de la requête

envoi requête

Client Serveur

socket()

connect()

write()

read()

close()

socket()

bind()

write()

read()

close()

Création de la socket

traitement de la requête

envoi réponse

traitement de la réponse

Fermeture de la socket

listen()

accept()

Page 16: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Client/Serveur en mode non connecté

bloqué jusqu'à la réception de la réponse

bloqué jusqu'à la réception de la requête

envoi requête

Client Serveur

socket()

bind()

sendto()

recvfrom()

close()

socket()

bind()

sendto()

recvfrom()

close()

Création de la socket

Assignation n°port - @ IP

traitement de la requête

envoi réponse

traitement de la réponse

Fermeture de la socket

Page 17: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Un exemple TCP + serialisationPassage d’objets par valeur à l’aide de la serialization

L’objet à passer à passer au serveur :

public class voiture implements Serializable{public String type;public int imm;

public voiture(String type, int imm) {this.type = type;this.imm = imm;

}public String toString() {

return this.type+" "+this.imm;}

}

Page 18: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Un exemple :TCP + serialisationpublic class client {

public static void main (String[] str) {try {

voiture v0 = new voiture("peugeot",171838);Socket CNX = new Socket("electron.inria.fr",6666);ObjectOutputStream po = new

ObjectOutputStream (CNX.getOutputStream());ObjectInputStream pi = new

ObjectInputStream (CNX.getInputStream());po.writeObject(v0);voiture v1 = (voiture) pi.readObject();CNX.close();System.out.println(’’v0 :’’+v0 );System.out.println(’’v1 :’’+v1 );

}catch (Exception e) {

System.out.println("An error has occurred ...");}

}}

Page 19: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Un exemple : TCP + serialisation

Le serveur

public static void main (String[] str) {ServerSocket ss;int port = 6666;ss= new ServerSocket(port);System.out.println("Server ready ...");

while (true) { slave rh = new slave(ss.accept()); rh.start();}

}

Page 20: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Un exemple TCP + serialisationpublic class slave extends Thread {

Socket currentRq;

public slave(Socket currRq) {this.currentRq = currRq;

}

public void run() {ObjectInputStream pi = new

ObjectInputStream(currentRq.getInputStream()); ObjectOuputStream po = new

ObjectOutputStream(currentRq.getOuputStream());voiture v = (voiture)pi.readObject();System.out.println("voiture recu : "+ v);v.imm = 381817;po.writeObject(v);currentRq.close();}

}

Page 21: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Appel de procédure à distance (RPC)

• Outils de base pour réaliser le mode client-serveur.– L'opération à réaliser est présentée sous la

forme d'une procédure que le client peut faire exécuter à distance par un autre site : le serveur.

• Forme et effet identique à ceux d'un appel local– Simplicité (en l'absence de pannes)– Sémantique identique à celle de l'appel local

Page 22: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

client serveur

RPC [Birrel & Nelson 84] Principe de réalisation

Service RPC(talon)

appel

réseau

Appelant

Appel

Service RPC(talon)

return

Protocole decommunication

Protocole decommunication

Appelé

return

A

E

B

D

C

Page 23: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Evolution des architectures client/serveur : application 3-tiers

ClientWeb

ServeurWeb SGBD

HTTPServlet

ClientWeb

ServeurWeb SGBD

HTTPServlet

JDBC

EJB

• Implantation ad-hoc

• J2EE

• Présentation/logique applicative/données

Page 24: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Appel de méthode à distanceRemote Method Invocation (RMI)

Methode_1

Methode_n

état

objet serveurobjet client

appel

Système de communication

Talonserveur

Talonclient

référence

Référence d'objet + méthode + arguments

Résultat ou exception

désignationenvoi de requêtesexécution de requêteretour de résultat

Page 25: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

JVMJVM

Java RMIArchitecture

Objet ClientObjet ClientObjet ClientObjet Client Objet ServeurObjet ServeurObjet ServeurObjet Serveur

ProxyProxyProxyProxy SkeletonSkeletonSkeletonSkeleton

Remote Reference LayerRemote Reference LayerRemote Reference LayerRemote Reference Layer

TransportTransportTransportTransport

Page 26: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIArchitecture

JVM ClientJVM Serveur

ClientClientClientClient

SkeletonSkeletonSkeletonSkeleton

rmiregistryrmiregistryrmiregistryrmiregistry

ServeurServeurServeurServeur

NamingNamingNamingNaming

Œ

Ž

stubstubstubstub

stubstubstubstub

Page 27: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIMode opératoire coté serveur

• 0 - A la création de l ’objet, un stub et un skeleton (avec un port de communication) sont créés coté serveur

• 1 - L'objet serveur s'enregistre auprès du Naming de sa JVM (méthode rebind)

• 2 - Le Naming enregistre le stub de l’objet (sérialisé) auprès du serveur de noms (rmiregistry)

• 3 - Le serveur de noms est prêt à donner des références à l’objet serveur

Page 28: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIArchitecture

JVM ClientJVM Serveur

NamingNamingNamingNaming

ClientClientClientClient

StubStubStubStubSkeletonSkeletonSkeletonSkeleton

rmiregistryrmiregistryrmiregistryrmiregistry

ServeurServeurServeurServeur

NamingNamingNamingNaming

’ ’ ’

stubstubstubstub

Page 29: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIMode opératoire coté client

• 4 - L'objet client fait appel au Naming pour localiser l'objet serveur (méthode lookup)

• 5 - Le Naming récupère le stub vers l'objet serveur, ...

• 6 - installe l’objet Stub et retourne sa référence au client

• 7 - Le client effectue l'appel à l’objet serveur par appel à l’objet Stub

Page 30: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIManuel d'utilisation

• Définition de l'interface de l'objet réparti– interface : "extends java.rmi.Remote"– methodes : "throws java.rmi.RemoteException"– paramètres sérializable : "implements Serializable"– paramètres référence : "implements Remote"

• Ecrire une implémentation de l'objet serveur– classe : "extends

java.rmi.server.UnicastRemoteObject"

Page 31: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIMode opératoire

• codage– description de l’interface du service– écriture du code du serveur qui implante l’interface– écriture du client qui appelle le serveur

• compilation– compilation des sources (javac)– génération des stub et skeleton (rmic)

• activation– lancement du serveur de noms (rmiregistry)– lancement du serveur– lancement du client

Page 32: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

fichier Hello_itf.java

public interface Hello_itf extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException;}

fichier Hello_itf.java

public interface Hello_itf extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException;}

Java RMIExemple : Interface

Descriptionde

l’interface

Page 33: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

fichier HelloServeur.java

import java.rmi.*;import java.rmi.server.UnicastRemoteObject;

public class HelloServeur extends UnicastRemoteObject implements Hello_itf {

private String msg;

// Constructeur public HelloServeur(String msg) throws java.rmi.RemoteException {

this.msg = msg;}

// Implémentation de la méthode distante. public String sayHello() throws java.rmi.RemoteException {

return "Hello world: " + msg;}

fichier HelloServeur.java

import java.rmi.*;import java.rmi.server.UnicastRemoteObject;

public class HelloServeur extends UnicastRemoteObject implements Hello_itf {

private String msg;

// Constructeur public HelloServeur(String msg) throws java.rmi.RemoteException {

this.msg = msg;}

// Implémentation de la méthode distante. public String sayHello() throws java.rmi.RemoteException {

return "Hello world: " + msg;}

Java RMIExemple : Serveur

Réalisationdu

serveur

Page 34: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

fichier HelloServeur.java

public static void main(String args[]) {try {

// Crée une instance de l ’objet serveur.Hello_itf obj = new HelloServeur("Coucou");// Enregistre l'objet créer auprès du serveur de noms.Naming.rebind("//suldrun/mon_serveur", obj);System.out.println("HelloServeur " + " bound in registry");

} catch (Exception exc) {… }}

}

fichier HelloServeur.java

public static void main(String args[]) {try {

// Crée une instance de l ’objet serveur.Hello_itf obj = new HelloServeur("Coucou");// Enregistre l'objet créer auprès du serveur de noms.Naming.rebind("//suldrun/mon_serveur", obj);System.out.println("HelloServeur " + " bound in registry");

} catch (Exception exc) {… }}

}

Java RMIExemple : Serveur

Réalisationdu

serveur(suite)

ATTENTION : dans cet exemple le serveur de nomdoit être activé avant la création du serveur

Page 35: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

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

try { // transformation d ’une chaîne de caractères en entier Integer I = new Integer(args[0]); port = I.intValue(); } catch (Exception ex) { System.out.println(" Please enter: Server <port>"); return; }

try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port);

// Création d ’une instance de l’objet serveur Hello_itf obj = new HelloServeur("Coucou");

// Calcul de l’URL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) { ...

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

try { // transformation d ’une chaîne de caractères en entier Integer I = new Integer(args[0]); port = I.intValue(); } catch (Exception ex) { System.out.println(" Please enter: Server <port>"); return; }

try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port);

// Création d ’une instance de l’objet serveur Hello_itf obj = new HelloServeur("Coucou");

// Calcul de l’URL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) { ...

Java RMIActivation du serveur de nom par le serveur

Page 36: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMI Compilation

• Compilation de l’interface, du serveur et du client– javac Hello_itf.java HelloServeur.java

HelloClient.java

• Génération des talons– rmic HelloServeur

– skeleton dans HelloServeur_Skel.class– stub dans HelloServeur_Stub.class.

Page 37: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMI Déploiement

• 1) Activation du serveur de nom– start rmiregistry (W95) ou rmiregistry & (Unix)

• 2) Activation du serveur– java HelloServeur– java -Djava.rmi.server.codebase=http://suldrun/…

• path indiquant à quelle endroit la machine virtuelle cliente va pouvoir chercher le code du stub

• Nécessaire si le client et le serveur ne sont pas sur la même station

• 3) Activation du client– java HelloClient

Page 38: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIPrincipe de l’appel de procédure

Java VM Java VM

ClientR_objet1.m ()

StubR_objet1

SkeletonR_objet1

R_objet1m ()

Page 39: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIPassage en paramètre d’un objet sérialisable

Java VM Java VM

ClientR_objet1.m ( O2 )

StubR_objet1

SkeletonR_objet1

Objet objet1m ( O2 )

O2

clone_O2

Page 40: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIPassage en paramètre d’un objet remote

Java VM Java VM

ClientR_objet1.m ( R O2 )

StubR_objet1

SkeletonR_objet1

Objet objet1m ( R objet )

StubR_O2

Objet O2

Page 41: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Java RMIPassage en paramètre d’un objet remote

Java VM Java VM

ClientR_objet1.m ( R O2 )

StubR_objet1

SkeletonR_objet1

Objet objet1m ( R objet )

StubR_O2

Objet O2

StubR_O2

Page 42: Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes depalma Noel.depalma@inrialpes.fr

Chargement dynamique et sécurité

• Si le code du stub n’est pas présent sur le site local, le protocole RMI prévoit le chargement dynamique du stub en utilisant un serveur web et le protocole HTTP– java -Djava.rmi.server.codebase=http://suldrun/…

• Si chargement dynamique…– RMI impose l’utilisation d’un gestionnaire de sécurité

(SecurityManager)• interdit l’accès à des ressources protégées depuis du code

téléchargé– créer et installer le "gestionnaire de sécurité"

• System.setSecurityManager(new RMISecurityManager());