La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes

Présentations similaires


Présentation au sujet: "Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes"— Transcription de la présentation:

1 Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes

2 Applications réparties Intérêt des applications réparties Caractéristiques et besoins Outils de bases Modèles dapplications réparties Def : Application sexécutant sur plusieurs sites reliés par un réseau de communication

3 Intérêt des applications réparties Besoin de communication et de partage dinformation Besoin de tolérance aux fautes Besoin de puissance de calcul

4 Web Accès universel à de linformation Client Http Serveur Http Get/post html

5 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 & doutils adaptés

6 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 1Site 2 Interface Système de communication Services de gestion de la distribution

7 Catégorie dintergiciel Différents types d intergiciels pour adresser différents problèmes Analyse du problème => choix de l intergiciel Différents Modèle dexécution –Modèle client serveur –Modèle de communication par message

8 Modèle de communication par messages Message Passing (communication par messages) Message Queuing (communication par file de message) Publish/Subscribe (communication par abonnements)

9 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 producteu r consomateur exécution du service Port_S Port_C (nom_de_service, paramètres, port_C)

10 Message Queuing Queue de messages –persistantes asynchronisme et fiabilité Indépendance de l'émetteur et du destinataire –Le destinataire nest pas forcément actif send recv ClientServeur

11 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 sabonne (à un sujet ou un contenu) Communication 1-N –Plusieurs récepteurs peuvent sabonner

12 Publish/Subscribe (2) consommateur publish producteur subscrib e recv

13 Modèle client-serveur définition Application client/serveur –Appel synchrone dun service au travers dun é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 linitiateur du dialogue

14 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)

15 Client/Serveur en mode connecté

16 Client/Serveur en mode non connecté

17 Un exemple TCP + serialisation Passage dobjets par valeur à laide de la serialization Lobjet à 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; }

18 Un exemple :TCP + serialisation public 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..."); }

19 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(); }

20 Un exemple TCP + serialisation public 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 = ; po.writeObject(v); currentRq.close(); }

21 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

22 client serveur RPC [Birrel & Nelson 84] Principe de réalisation Service RPC (talon) appel réseau Appelant Appel Service RPC (talon) return Protocole de communication Protocole de communication Appelé return A E B D C

23 Evolution des architectures client/serveur : application 3-tiers Client Web Serveur Web SGBD HTTP Servlet Client Web Serveur Web SGBD HTTP Servlet JDBC EJB Implantation ad-hoc J2EE Présentation/logique applicative/données

24 RPC Java RMI Un RPC objet intégré à Java Interaction d'objets situés dans des espaces d'adressage différents sur des machines distinctes Simple à mettre en œuvre : un objet distribué se manipule comme tout autre objet Java

25 Appel de méthode à distance Remote Method Invocation (RMI) Methode_1 Methode_n état objet serveurobjet client appel Système de communication Talon serveur Talon client référence Référence d'objet + méthode + arguments Résultat ou exception désignation envoi de requêtes exécution de requête retour de résultat

26 JVM Java RMI Architecture Objet Client Objet Serveur ProxyProxySkeletonSkeleton Remote Reference Layer TransportTransport

27 Java RMI Architecture JVM Client JVM Serveur ClientClient SkeletonSkeleton rmiregistryrmiregistry ServeurServeur NamingNaming stubstub stubstub

28 Java RMI Mode 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 lobjet (sérialisé) auprès du serveur de noms (rmiregistry) 3 - Le serveur de noms est prêt à donner des références à lobjet serveur

29 Java RMI Architecture JVM Client JVM Serveur NamingNaming ClientClient StubStub SkeletonSkeleton rmiregistryrmiregistry ServeurServeur NamingNaming stubstub

30 Java RMI Mode 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, installe lobjet Stub et retourne sa référence au client 7 - Le client effectue l'appel à lobjet serveur par appel à lobjet Stub

31 Java RMI Manuel 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"

32 Java RMI Mode opératoire 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) –génération des stub et skeleton (rmic) activation –lancement du serveur de noms (rmiregistry) –lancement du serveur –lancement du client

33 RPC Java RMI : écriture de linterface Mêmes principes de base que pour linterface dun objet local Principales différences –linterface distante doit être publique –linterface distante doit étendre linterface java.rmi.Remote –chaque méthode doit déclarer au moins lexception java.rmi.RemoteException –toute référence d objet (objet "remote" ou "sérialisable") doit être déclaré comme une interface

34 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 RMI Exemple : Interface Description de linterface

35 Java RMI : écriture du serveur Serveur = la classe qui implémente linterface –spécifier les interfaces distantes qui doivent être implémentées objets passés par copie (il doivent implémenter linterface java.io.serialisable) objets passés par référence (en fait une référence à un stub) –cest un objet java standard définir le constructeur de lobjet fournir la mise en œuvre des méthodes pouvant être appelée à distance ainsi que celle des méthodes napparaissant dans aucune interface implémentée –créer au moins une instance du serveur –enregistrer au moins une instance dans le serveur de nom (rmiregistry)

36 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 RMI Exemple : Serveur Réalisation du serveur

37 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 RMI Exemple : Serveur Réalisation du serveur (suite) ATTENTION : dans cet exemple le serveur de nom doit être activé avant la création du serveur

38 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 "); return; } try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port); // Création d une instance de lobjet serveur Hello_itf obj = new HelloServeur("Coucou"); // Calcul de lURL 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 "); return; } try { // Création du serveur de nom - rmiregistry Registry registry = LocateRegistry.createRegistry(port); // Création d une instance de lobjet serveur Hello_itf obj = new HelloServeur("Coucou"); // Calcul de lURL du serveur URL = "//"+InetAddress.getLocalHost().getHostName()+":"+port+"/mon_serveur"; Naming.rebind(URL, obj); } catch (Exception exc) {... Java RMI Activation du serveur de nom par le serveur

39 Java RMI Compilation Compilation de linterface, 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.

40 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

41 Java RMI Principe de lappel de procédure Java VM Client R_objet1.m () Stub R_objet1 Skeleton R_objet1 m ()

42 Java RMI Passage en paramètre dun objet sérialisable Java VM Client R_objet1.m ( O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( O2 ) O2 clone_O2

43 Java RMI Passage en paramètre dun objet remote Java VM Client R_objet1.m ( R O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( R objet ) Stub R_O2 Objet O2

44 Java RMI Passage en paramètre dun objet remote Java VM Client R_objet1.m ( R O2 ) Stub R_objet1 Skeleton R_objet1 Objet objet1 m ( R objet ) Stub R_O2 Objet O2 Stub R_O2

45 Chargement dynamique et sécurité Si le code du stub nest 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 lutilisation dun gestionnaire de sécurité (SecurityManager) interdit laccè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());

46 Java RMI : bilan Très bon exemple de RPC –facilité dutilisation –intégration au langage Java et à linternet –utilisation de lapport de Java Hétérogénïté des plateformes -> machine virtuelle Passage de référence -> sérialisation ou référence à distance Persistance -> sérialisation Absence de talon -> chargement dynamique Désignation -> URL Des ouvertures –Serveurs multiplexés ? –Appels asynchrones ? –Utilisation dautres protocoles réseaux ?


Télécharger ppt "Introduction aux applications réparties Noël De Palma Projet SARDES INRIA Rhône-Alpes"

Présentations similaires


Annonces Google