SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
Les Remote Procedure Calls
                                                                                                 Principe de base : transparence réseau pour les appels de
Systèmes répartis : les Remote Procedure                                                         fonctions. Composants :
                                                                                                     un langage de description des données et des fonctions
                 Calls                                                                               une méthode de représentation portable des données
                            Fabrice Rossi                                                            un protocole d’appel :
                                                                                                       transmission des paramètres de l’appel du client vers le
                 http://apiacoa.org/contact.html.                                                      serveur
                                                                                                       transmission du résultat du serveur vers le client
                     Universit´ Paris-IX Dauphine
                              e                                                                      un protocole de publication et de recherche d’un service
                                                                                                 Deux grandes normes :
                                                                                                     RPC ONC (Sun)
                                                                                                     RPC DCE (Open Group)
                                                                                                 Mais aussi :
                                                                                                     XML RPC
                                                                                                     SOAP

                                       Syst`mes r´partis : les Remote Procedure Calls – p.1/25
                                           e     e                                                                                 Syst`mes r´partis : les Remote Procedure Calls – p.2/25
                                                                                                                                       e     e




                 Schéma de principe                                                                          Rôle des Stubs (Souches)
        Client                                                    Serveur                        Les souches :
                                                                                                    stub
                                                                                                    souvent appelé squelette (skeleton) du côté serveur
    Code du client                                          Code du serveur                         sur le client :
                                                                                                      paramètres → format portable (marshalling)
                                                                                                      format portable → résultat (unmarshalling)
    Stub du client                                          Stub du serveur                           appel de la bonne fonction
                                                                                                    sur le serveur :
                                Réseau                                                                traductions inverses de celles du client
Bibliothèque RPC client       Paramètres              Bibliothèque RPC serveur                        appel de la bonne fonction
                                                                                                    en général engendrées automatiquement
                                Résultat




                                       Syst`mes r´partis : les Remote Procedure Calls – p.3/25
                                           e     e                                                                                 Syst`mes r´partis : les Remote Procedure Calls – p.4/25
                                                                                                                                       e     e
Rôle des bibliothèques                                                                            Code à écrire
   fonctions de bas niveau pour le (un)marshalling                                          Il reste quand même des choses à écrire ( !) :
   établissement des connexions réseau                                                           dépend de la solution retenue
   mise en œuvre du protocole :                                                                  RPC ONC :
     identification du programme                                                                    le code de la fonction pour le serveur (le code de
     authentification (éventuelle)                                                                 démarrage est engendré par les outils)
     gestion de certaines erreurs (de protocole, de version,                                       le code du client :
     etc.)                                                                                            connexion au serveur
     transmission effective des données (en particulier la                                            appel de la fonction
     gestion de la mémoire)                                                                        les outils RPC ONC proposent en général une version à
     publication et découverte d’un service                                                       compléter de tout ce que le programmeur doit fournir
   fournies par le “vendeur” de la solution RPC                                                  autres solutions : en gros la même chose




                                  Syst`mes r´partis : les Remote Procedure Calls – p.5/25
                                      e     e                                                                                 Syst`mes r´partis : les Remote Procedure Calls – p.6/25
                                                                                                                                  e     e




      Etude d’un exemple : RPC ONC                                                                   Le protocole RPC (rfc 1831)
Les RPC ONC (Sun) :                                                                         Principes de base :
   rfc 1831                                                                                     un service réseau est fournis par plusieurs programmes
   solution classique disponible sur tous les Unix (incluse                                     un programme fournis plusieurs fonctions (ou procédures)
  dans le système en général) et sous windows                                                   un client appelle une procédure d’un programme
   comparable aux DCE RPC en “gratuit”                                                          une procédure est identifiée par trois entiers (positifs) :
   langage de description des données : XDR (rfc 1832)                                            le numéro de programme
   technologie utilisée par Network File System                                                   le numéro de version du programme
   outil de base rpcgen :                                                                         le numéro de procédure au sein du programme
      engendre des convertisseurs ((un)marshalling)                                             affectation des numéros de programme :
      engendre les souches (serveurs et clients)                                                  de 0x0 à 0x1fffffff : affectation par SUN
      propose des modèles pour le client et le serveur                                            de 0x20000000 à 0x3fffffff : affectation par le
      engendre un Makefile                                                                        programmeur
   utilise un lookup service pour la publication et la                                            de 0x40000000 à 0xffffffff : réservé
  découverte d’un service (rfc 1833)                                                            le protocole est basé sur l’échange de messages décrits
   les RPC ONC peuvent être implantées sur n’importe                                           en XDR
  quelle couche transport (en général TCP et UDP)
                                  Syst`mes r´partis : les Remote Procedure Calls – p.7/25
                                      e     e                                                                                 Syst`mes r´partis : les Remote Procedure Calls – p.8/25
                                                                                                                                  e     e
eXternal Data Representation (rfc 1832)                                                                                  Exemple
                                                                                                                           person.x
Représentation portable des données :                                                       1    enum type_gender {
   codage big endian avec des mots de 4 octets (complétion                                  2       FEMALE=0,
  par des zéros)                                                                            3       MALE=1
   permet de définir des types de données associés à une                                     4    };
  représentation binaire standard                                                           5
   orienté C :                                                                              6    struct person {
     syntaxe proche du C                                                                    7       string firstname<>;
     types fondamentaux classiques (int, double, etc.)                                      8       string lastname<>;
     énumération                                                                            9       type_gender gender;
     struct et union                                                                        10   };
     tableaux
   rpcgen engendre des fonctions de traduction à partir d’un
  fichier XDR (et des bibliothèques de conversion de bas                                          On définit :
  niveau)                                                                                           type_gender : un énuméré pour le genre
                                                                                                    person : une struct contenant deux chaînes de
                                                                                                   caractères et un genre
                                  Syst`mes r´partis : les Remote Procedure Calls – p.9/25
                                      e     e                                                                                     Syst`mes r´partis : les Remote Procedure Calls – p.10/25
                                                                                                                                      e     e




                        Les types                                                                                     Les types (2)
 Type             identificateur                             taille                                Type            identificateur                              taille
 Entier relatif   int                                       4 octets                              Réels           float                                      4      octets
 Entier positif   unsigned int                              4 octets                              simples                                                    (IEEE)
 Enumération      enum                                      int                                   Réels           double                                     8      octets
                  {identifier=constant,...}                                                       doubles                                                    (IEEE)
 Booléen          bool                                      enum                                  Réels longs     quadruple                                  16 octets
                                                            {FALSE=0,                                                                                        (IEEE)
                                                            TRUE=1}                               Rien            void                                       0 octet
 Entier    long hyper                                       8 octets
 relatif
 Entier    long unsigned hyper                              8 octets
 positif



                                 Syst`mes r´partis : les Remote Procedure Calls – p.11/25
                                     e     e                                                                                      Syst`mes r´partis : les Remote Procedure Calls – p.12/25
                                                                                                                                      e     e
Les types (3)                                                                                 Les types (4)
       Données à taille fixe ou variable :                                                             Comme en C :
        [n] correspond à une taille fixe égale à n                                                        struct permet d’agréger des types pour fabriquer un type
        <> correspond à une taille variable                                                             plus complexe (cf exemple d’introduction)
        <m> correspond à une taille variable inférieure à m                                              union permet de decrire des types variables. Exemple :
        exemple, int<15> : liste d’entiers de longueur au plus                                                                     person.x
        15.                                                                                          1    enum type_gender {
        Cas particuliers :                                                                           2      FEMALE=0,
                   Identificateur          contenu                                                    3      MALE=1
                                                                                                     4    };
                      opaque           liste d’octets
                                                                                                     5    union type_maidenname switch (type_gender gender) {
                      string       chaîne de caractères                                              6      case FEMALE:
        Attention, pas de taille fixe pour les chaînes de                                             7        string maidenname<>;
        caractères.                                                                                  8      case MALE:
       Comme en C :                                                                                  9        void;
        on peut définir des types par typedef                                                         10   };
        on peut définir des constantes
                                          Syst`mes r´partis : les Remote Procedure Calls – p.13/25
                                              e     e                                                                                   Syst`mes r´partis : les Remote Procedure Calls – p.14/25
                                                                                                                                            e     e




               Définition d’un programme                                                                                  Programmation
    Pour décrire un programme RPC, on utilise une extension de                                        On soumet calculation.x au programme rpcgen. On obtient
    XDR :                   calculation.x
                                                                                                      (sous Linux) :
1   struct two_int {                                                                                      calculation.h : fichier d’en-tête à inclure dans les
2       int a;                                                                                           différents programmes
3       int b;                                                                                            calculation_xdr.c : les fonctions de conversion en XDR
4   };
5   program CALCULATION_PROG {
                                                                                                         des types définis dans calculation.x
6       version CALCULATION_VERS_BASE {                                                                   calculation_clnt.c : le stub côté client
7           int sum(two_int)=1;                                                                           calculation_svc.c : le stub côté serveur (par défaut,
8       }=1;
                                                                                                         support de udp et de tcp)
9   }=0x20000000;
                                                                                                          de façon optionnelle :
    Principe :                                                                                               un Makefile
        program identificateur {version...}=constante ;                                                      des exemples à compléter pour le client et le serveur
        version identificateur {procedure...}=constante ;                                                 nombreuses options (mode de démarrage du serveur,
        procedure type identificateur                                                                    couche de transport, etc.)
       (type,...)=constante ;

                                          Syst`mes r´partis : les Remote Procedure Calls – p.15/25
                                              e     e                                                                                   Syst`mes r´partis : les Remote Procedure Calls – p.16/25
                                                                                                                                            e     e
calculation_server.c                                                                                 Synopsis de la partie cliente
                          calculation_server.c
1    #include "calculation.h"                                                                                 Dans un client :
2                                                                                                              1. on établit la connexion (clnt_create, ligne 14). On doit
3    int *                                                                                                        préciser :
4    sum_1_svc(two_int *argp, struct svc_req *rqstp)                                                                 la machine cible (host)
5    {                                                                                                               le numéro du programme et son numéro de version
6            static int result;                                                                                     (macros engendrées par rpcgen)
7                                                                                                                    le transport utilisé
8             /* partie ajout´e ! */
                             e
                                                                                                               2. on effectue l’appel qui est local, cf ligne 20 (seule
9             result=argp->a+argp->b;
                                                                                                                  astuce : le dernier paramètre contient les informations de
10            /* fin de l’ajout */
                                                                                                                  connexion)
11            return &result;
12   }                                                                                                         3. on coupe la connexion (clnt_destroy, ligne 30)

                                                                                                              Avec un transport connecté (type tcp), on peut conserver la
         totalement basique
         toute la complexité est dans calculation_svc.c                                                       connexion ouverte pendant un certain temps.

                                              Syst`mes r´partis : les Remote Procedure Calls – p.17/25
                                                  e     e                                                                                              Syst`mes r´partis : les Remote Procedure Calls – p.18/25
                                                                                                                                                           e     e




                    calculation_client.c                                                                                  calculation_client.c (2)
                                calculation_client.c                                                                                      calculation_client.c
 1   #include "calculation.h"                                                                            20       result_1 = sum_1(&sum_1_arg, clnt);
 2                                                                                                       21       if (result_1 == (int *) NULL) {
 3   void calculation_prog_1(char *host)                                                                 22           clnt_perror (clnt, "call failed");
 4   {                                                                                                   23       }
 5       CLIENT *clnt;                                                                                   24       /* partie ajout´e */
                                                                                                                                 e
 6       int *result_1;                                                                                  25       else {
 7       two_int sum_1_arg;                                                                              26           printf("%d+%d=%dn",sum_1_arg.a,sum_1_arg.b,*result_1);
 8                                                                                                       27       }
 9       /* partie ajout´e */
                         e                                                                               28       /* fin de l’ajout */
10       sum_1_arg.a=15;                                                                                 29   #ifndef        DEBUG
11       sum_1_arg.b=35;                                                                                 30       clnt_destroy (clnt);
12       /* fin de l’ajout */                                                                            31   #endif         /* DEBUG */
13   #ifndef        DEBUG                                                                                32   }
14       clnt = clnt_create(host,CALCULATION_PROG,CALCULATION_VERS_BASE,"udp");
15       if (clnt == NULL) {
16           clnt_pcreateerror (host);                                                                           solution très basique (création de clnt à chaque appel
17           exit (1);                                                                                          par exemple)
18       }
                                                                                                                 utilise la partie bilbiothèque des RPC (e.g., clnt_create)
19   #endif        /* DEBUG */
                                                                                                                 l’appel proprement dit est local (ligne 20)
                                              Syst`mes r´partis : les Remote Procedure Calls – p.19/25
                                                  e     e                                                                                              Syst`mes r´partis : les Remote Procedure Calls – p.20/25
                                                                                                                                                           e     e
calculation_client.c (3)                                                                            Publication et découverte
                                 calculation_client.c
33   int main (int argc, char *argv[])                                                                   Un problème standard des systèmes distribués :
34   {                                                                                                      pour le serveur, se faire connaître (publication)
35       char *host;                                                                                        pour le client, trouver le serveur (découverte et résolution)
36
37       if (argc < 2) {
                                                                                                         Plusieurs niveaux :
38           printf ("usage: %s server_hostn", argv[0]);                                                 1. partie facile : nom de la machine du serveur + DNS →
39           exit (1);
40       }
                                                                                                             connexion possible (TCP ou UDP par exemple)
41       host = argv[1];                                                                                  2. quelle couche transport ?
42       calculation_prog_1 (host);
43       exit (0);                                                                                        3. pour TCP/UDP, quel numéro de port ?
44   }
                                                                                                         Solution proposée par les RPC ONC, un programme de
                                                                                                         binding (RFC 1823) :
                                                                                                            le portmapper (version 2) : spécifique à TCP/UDP
                                                                                                            rpcbind (versions 3 et 4) : indépendant du transport



                                              Syst`mes r´partis : les Remote Procedure Calls – p.21/25
                                                  e     e                                                                                   Syst`mes r´partis : les Remote Procedure Calls – p.22/25
                                                                                                                                                e     e




                              Binding RPC                                                                                         rpcbind
     Principes communs aux différentes versions :                                                        Remplace le portmapper. Principaux avantages :
         le binder est un programme RPC de numéro 100000                                                    indépendant du transport
         il écoute toujours sur les ports 111 UDP et TCP                                                    permet un enregistrement et une résolution incluant les
     Le portmapper offre différentes fonctions :                                                           informations de transport
         publication d’un programme (décrit par son numéro de                                               offre quelques nouvelles fonctions :
        programme et son numéro de version)                                                                   horloge
         suppression d’un programme                                                                           statistiques d’utilisation
         découverte (résolution) d’un programme, c’est-à-dire                                                 un programme peut enregistrer plusieurs instances
        obtention du port associé à un programme                                                              correspondant à différents transport (avec le
         obtention de la liste des programmes enregistrés                                                     portmapper, le transport est automatique celui utilisé
         appel direct d’une fonction distante                                                                 pour contacter le portmapper lui-même)
     Le portmapper est limité à TCP et UDP.




                                              Syst`mes r´partis : les Remote Procedure Calls – p.23/25
                                                  e     e                                                                                   Syst`mes r´partis : les Remote Procedure Calls – p.24/25
                                                                                                                                                e     e
Fonctionnement du système                                                           Fonctionnement du système

                  111          portmapper                                                               111          portmapper


Client                                                                              Client


                                  Serveur                                                              1773             Serveur


     Publication du programme (RPC)                                                   Le programme écoute sur le port 1773




                         Syst`mes r´partis : les Remote Procedure Calls – p.25/25
                             e     e                                                                           Syst`mes r´partis : les Remote Procedure Calls – p.25/25
                                                                                                                   e     e




Fonctionnement du système                                                           Fonctionnement du système

                  111          portmapper                                                               111          portmapper


Client                                                                              Client


                  1773            Serveur                                                              1773             Serveur


         Demande de résolution (RPC)                                                         Appel de la fonction recherchée




                         Syst`mes r´partis : les Remote Procedure Calls – p.25/25
                             e     e                                                                           Syst`mes r´partis : les Remote Procedure Calls – p.25/25
                                                                                                                   e     e

Más contenido relacionado

La actualidad más candente

Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 
Les socket ing1_issat
Les socket ing1_issatLes socket ing1_issat
Les socket ing1_issatsloumaallagui
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chatTbatou sanae
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 
Projet sur transfert de fichiers
Projet sur transfert de fichiersProjet sur transfert de fichiers
Projet sur transfert de fichiersjosepkap
 
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francois
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francoisAdministration ubuntu-serveur-installation-ftp-serveur-bernier-francois
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francoisspeegel
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlinangeeLee
 
Serveur ftp
Serveur ftpServeur ftp
Serveur ftpSam Rich
 
Administration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurAdministration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurTECOS
 

La actualidad más candente (20)

Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
Les socket ing1_issat
Les socket ing1_issatLes socket ing1_issat
Les socket ing1_issat
 
Le Réseau et Java
Le Réseau et JavaLe Réseau et Java
Le Réseau et Java
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chat
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
Chap7 java net
Chap7 java netChap7 java net
Chap7 java net
 
Reseau
ReseauReseau
Reseau
 
Rapport Sockets en Java
Rapport Sockets en JavaRapport Sockets en Java
Rapport Sockets en Java
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Projet sur transfert de fichiers
Projet sur transfert de fichiersProjet sur transfert de fichiers
Projet sur transfert de fichiers
 
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francois
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francoisAdministration ubuntu-serveur-installation-ftp-serveur-bernier-francois
Administration ubuntu-serveur-installation-ftp-serveur-bernier-francois
 
Atelier 3
Atelier 3Atelier 3
Atelier 3
 
Cours services web_fabrice_mourlin
Cours services web_fabrice_mourlinCours services web_fabrice_mourlin
Cours services web_fabrice_mourlin
 
Serveur ftp
Serveur ftpServeur ftp
Serveur ftp
 
Administration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurAdministration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveur
 
Formation1 sockets
Formation1 socketsFormation1 sockets
Formation1 sockets
 
Java RMI
Java RMIJava RMI
Java RMI
 
02 java-socket
02 java-socket02 java-socket
02 java-socket
 
Cours couche application
Cours couche applicationCours couche application
Cours couche application
 
Presentation
PresentationPresentation
Presentation
 

Similar a Rpc 4bypage

QoS of WLAN (WiFi) - French
QoS of WLAN (WiFi) - FrenchQoS of WLAN (WiFi) - French
QoS of WLAN (WiFi) - FrenchAssia Mounir
 
ArchiTech Load Balancing (NLB), Fermes et Jardins
ArchiTech Load Balancing (NLB), Fermes et JardinsArchiTech Load Balancing (NLB), Fermes et Jardins
ArchiTech Load Balancing (NLB), Fermes et Jardinsbenjguin
 
Architecture SAP Web AS
Architecture SAP Web ASArchitecture SAP Web AS
Architecture SAP Web ASMrabtei Ayoub
 
Architecture sap web AS
Architecture sap web ASArchitecture sap web AS
Architecture sap web ASMrabtei Ayoub
 
Rencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberosRencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberosNicolas Georgeault
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGCh'ti JUG
 
Chapitre 1 LES SERVICES RESEAUX.pptx
Chapitre 1 LES SERVICES RESEAUX.pptxChapitre 1 LES SERVICES RESEAUX.pptx
Chapitre 1 LES SERVICES RESEAUX.pptxAymenAyari10
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services webCHOUAIB EL HACHIMI
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Carte mentale du cours qualité de servie ip
Carte mentale du cours qualité de servie ip Carte mentale du cours qualité de servie ip
Carte mentale du cours qualité de servie ip Dr, Noureddine IDBOUFKER
 
Administration des services réseaux
Administration des services réseauxAdministration des services réseaux
Administration des services réseauxFethi Kiwa
 
Supervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.comSupervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.comAdnane Ahmidani
 
Presentation
PresentationPresentation
Presentationbois
 

Similar a Rpc 4bypage (20)

6 bd-rpc-macs
6 bd-rpc-macs6 bd-rpc-macs
6 bd-rpc-macs
 
QoS of WLAN (WiFi) - French
QoS of WLAN (WiFi) - FrenchQoS of WLAN (WiFi) - French
QoS of WLAN (WiFi) - French
 
ArchiTech Load Balancing (NLB), Fermes et Jardins
ArchiTech Load Balancing (NLB), Fermes et JardinsArchiTech Load Balancing (NLB), Fermes et Jardins
ArchiTech Load Balancing (NLB), Fermes et Jardins
 
Architecture SAP Web AS
Architecture SAP Web ASArchitecture SAP Web AS
Architecture SAP Web AS
 
Architecture sap web AS
Architecture sap web ASArchitecture sap web AS
Architecture sap web AS
 
Rencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberosRencontre mensuelle Montreal - juillet 2012 - kerberos
Rencontre mensuelle Montreal - juillet 2012 - kerberos
 
Chapitre3 prog dsplf3
Chapitre3 prog dsplf3Chapitre3 prog dsplf3
Chapitre3 prog dsplf3
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUG
 
Lync : Bonnes pratiques d'Architecture
Lync : Bonnes pratiques d'ArchitectureLync : Bonnes pratiques d'Architecture
Lync : Bonnes pratiques d'Architecture
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Chapitre 1 LES SERVICES RESEAUX.pptx
Chapitre 1 LES SERVICES RESEAUX.pptxChapitre 1 LES SERVICES RESEAUX.pptx
Chapitre 1 LES SERVICES RESEAUX.pptx
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Carte mentale du cours qualité de servie ip
Carte mentale du cours qualité de servie ip Carte mentale du cours qualité de servie ip
Carte mentale du cours qualité de servie ip
 
Administration des services réseaux
Administration des services réseauxAdministration des services réseaux
Administration des services réseaux
 
Supervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.comSupervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.com
 
Remote method invocation
Remote method invocationRemote method invocation
Remote method invocation
 
Formation Google App Engine
Formation Google App EngineFormation Google App Engine
Formation Google App Engine
 
Presentation
PresentationPresentation
Presentation
 

Rpc 4bypage

  • 1. Les Remote Procedure Calls Principe de base : transparence réseau pour les appels de Systèmes répartis : les Remote Procedure fonctions. Composants : un langage de description des données et des fonctions Calls une méthode de représentation portable des données Fabrice Rossi un protocole d’appel : transmission des paramètres de l’appel du client vers le http://apiacoa.org/contact.html. serveur transmission du résultat du serveur vers le client Universit´ Paris-IX Dauphine e un protocole de publication et de recherche d’un service Deux grandes normes : RPC ONC (Sun) RPC DCE (Open Group) Mais aussi : XML RPC SOAP Syst`mes r´partis : les Remote Procedure Calls – p.1/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.2/25 e e Schéma de principe Rôle des Stubs (Souches) Client Serveur Les souches : stub souvent appelé squelette (skeleton) du côté serveur Code du client Code du serveur sur le client : paramètres → format portable (marshalling) format portable → résultat (unmarshalling) Stub du client Stub du serveur appel de la bonne fonction sur le serveur : Réseau traductions inverses de celles du client Bibliothèque RPC client Paramètres Bibliothèque RPC serveur appel de la bonne fonction en général engendrées automatiquement Résultat Syst`mes r´partis : les Remote Procedure Calls – p.3/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.4/25 e e
  • 2. Rôle des bibliothèques Code à écrire fonctions de bas niveau pour le (un)marshalling Il reste quand même des choses à écrire ( !) : établissement des connexions réseau dépend de la solution retenue mise en œuvre du protocole : RPC ONC : identification du programme le code de la fonction pour le serveur (le code de authentification (éventuelle) démarrage est engendré par les outils) gestion de certaines erreurs (de protocole, de version, le code du client : etc.) connexion au serveur transmission effective des données (en particulier la appel de la fonction gestion de la mémoire) les outils RPC ONC proposent en général une version à publication et découverte d’un service compléter de tout ce que le programmeur doit fournir fournies par le “vendeur” de la solution RPC autres solutions : en gros la même chose Syst`mes r´partis : les Remote Procedure Calls – p.5/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.6/25 e e Etude d’un exemple : RPC ONC Le protocole RPC (rfc 1831) Les RPC ONC (Sun) : Principes de base : rfc 1831 un service réseau est fournis par plusieurs programmes solution classique disponible sur tous les Unix (incluse un programme fournis plusieurs fonctions (ou procédures) dans le système en général) et sous windows un client appelle une procédure d’un programme comparable aux DCE RPC en “gratuit” une procédure est identifiée par trois entiers (positifs) : langage de description des données : XDR (rfc 1832) le numéro de programme technologie utilisée par Network File System le numéro de version du programme outil de base rpcgen : le numéro de procédure au sein du programme engendre des convertisseurs ((un)marshalling) affectation des numéros de programme : engendre les souches (serveurs et clients) de 0x0 à 0x1fffffff : affectation par SUN propose des modèles pour le client et le serveur de 0x20000000 à 0x3fffffff : affectation par le engendre un Makefile programmeur utilise un lookup service pour la publication et la de 0x40000000 à 0xffffffff : réservé découverte d’un service (rfc 1833) le protocole est basé sur l’échange de messages décrits les RPC ONC peuvent être implantées sur n’importe en XDR quelle couche transport (en général TCP et UDP) Syst`mes r´partis : les Remote Procedure Calls – p.7/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.8/25 e e
  • 3. eXternal Data Representation (rfc 1832) Exemple person.x Représentation portable des données : 1 enum type_gender { codage big endian avec des mots de 4 octets (complétion 2 FEMALE=0, par des zéros) 3 MALE=1 permet de définir des types de données associés à une 4 }; représentation binaire standard 5 orienté C : 6 struct person { syntaxe proche du C 7 string firstname<>; types fondamentaux classiques (int, double, etc.) 8 string lastname<>; énumération 9 type_gender gender; struct et union 10 }; tableaux rpcgen engendre des fonctions de traduction à partir d’un fichier XDR (et des bibliothèques de conversion de bas On définit : niveau) type_gender : un énuméré pour le genre person : une struct contenant deux chaînes de caractères et un genre Syst`mes r´partis : les Remote Procedure Calls – p.9/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.10/25 e e Les types Les types (2) Type identificateur taille Type identificateur taille Entier relatif int 4 octets Réels float 4 octets Entier positif unsigned int 4 octets simples (IEEE) Enumération enum int Réels double 8 octets {identifier=constant,...} doubles (IEEE) Booléen bool enum Réels longs quadruple 16 octets {FALSE=0, (IEEE) TRUE=1} Rien void 0 octet Entier long hyper 8 octets relatif Entier long unsigned hyper 8 octets positif Syst`mes r´partis : les Remote Procedure Calls – p.11/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.12/25 e e
  • 4. Les types (3) Les types (4) Données à taille fixe ou variable : Comme en C : [n] correspond à une taille fixe égale à n struct permet d’agréger des types pour fabriquer un type <> correspond à une taille variable plus complexe (cf exemple d’introduction) <m> correspond à une taille variable inférieure à m union permet de decrire des types variables. Exemple : exemple, int<15> : liste d’entiers de longueur au plus person.x 15. 1 enum type_gender { Cas particuliers : 2 FEMALE=0, Identificateur contenu 3 MALE=1 4 }; opaque liste d’octets 5 union type_maidenname switch (type_gender gender) { string chaîne de caractères 6 case FEMALE: Attention, pas de taille fixe pour les chaînes de 7 string maidenname<>; caractères. 8 case MALE: Comme en C : 9 void; on peut définir des types par typedef 10 }; on peut définir des constantes Syst`mes r´partis : les Remote Procedure Calls – p.13/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.14/25 e e Définition d’un programme Programmation Pour décrire un programme RPC, on utilise une extension de On soumet calculation.x au programme rpcgen. On obtient XDR : calculation.x (sous Linux) : 1 struct two_int { calculation.h : fichier d’en-tête à inclure dans les 2 int a; différents programmes 3 int b; calculation_xdr.c : les fonctions de conversion en XDR 4 }; 5 program CALCULATION_PROG { des types définis dans calculation.x 6 version CALCULATION_VERS_BASE { calculation_clnt.c : le stub côté client 7 int sum(two_int)=1; calculation_svc.c : le stub côté serveur (par défaut, 8 }=1; support de udp et de tcp) 9 }=0x20000000; de façon optionnelle : Principe : un Makefile program identificateur {version...}=constante ; des exemples à compléter pour le client et le serveur version identificateur {procedure...}=constante ; nombreuses options (mode de démarrage du serveur, procedure type identificateur couche de transport, etc.) (type,...)=constante ; Syst`mes r´partis : les Remote Procedure Calls – p.15/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.16/25 e e
  • 5. calculation_server.c Synopsis de la partie cliente calculation_server.c 1 #include "calculation.h" Dans un client : 2 1. on établit la connexion (clnt_create, ligne 14). On doit 3 int * préciser : 4 sum_1_svc(two_int *argp, struct svc_req *rqstp) la machine cible (host) 5 { le numéro du programme et son numéro de version 6 static int result; (macros engendrées par rpcgen) 7 le transport utilisé 8 /* partie ajout´e ! */ e 2. on effectue l’appel qui est local, cf ligne 20 (seule 9 result=argp->a+argp->b; astuce : le dernier paramètre contient les informations de 10 /* fin de l’ajout */ connexion) 11 return &result; 12 } 3. on coupe la connexion (clnt_destroy, ligne 30) Avec un transport connecté (type tcp), on peut conserver la totalement basique toute la complexité est dans calculation_svc.c connexion ouverte pendant un certain temps. Syst`mes r´partis : les Remote Procedure Calls – p.17/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.18/25 e e calculation_client.c calculation_client.c (2) calculation_client.c calculation_client.c 1 #include "calculation.h" 20 result_1 = sum_1(&sum_1_arg, clnt); 2 21 if (result_1 == (int *) NULL) { 3 void calculation_prog_1(char *host) 22 clnt_perror (clnt, "call failed"); 4 { 23 } 5 CLIENT *clnt; 24 /* partie ajout´e */ e 6 int *result_1; 25 else { 7 two_int sum_1_arg; 26 printf("%d+%d=%dn",sum_1_arg.a,sum_1_arg.b,*result_1); 8 27 } 9 /* partie ajout´e */ e 28 /* fin de l’ajout */ 10 sum_1_arg.a=15; 29 #ifndef DEBUG 11 sum_1_arg.b=35; 30 clnt_destroy (clnt); 12 /* fin de l’ajout */ 31 #endif /* DEBUG */ 13 #ifndef DEBUG 32 } 14 clnt = clnt_create(host,CALCULATION_PROG,CALCULATION_VERS_BASE,"udp"); 15 if (clnt == NULL) { 16 clnt_pcreateerror (host); solution très basique (création de clnt à chaque appel 17 exit (1); par exemple) 18 } utilise la partie bilbiothèque des RPC (e.g., clnt_create) 19 #endif /* DEBUG */ l’appel proprement dit est local (ligne 20) Syst`mes r´partis : les Remote Procedure Calls – p.19/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.20/25 e e
  • 6. calculation_client.c (3) Publication et découverte calculation_client.c 33 int main (int argc, char *argv[]) Un problème standard des systèmes distribués : 34 { pour le serveur, se faire connaître (publication) 35 char *host; pour le client, trouver le serveur (découverte et résolution) 36 37 if (argc < 2) { Plusieurs niveaux : 38 printf ("usage: %s server_hostn", argv[0]); 1. partie facile : nom de la machine du serveur + DNS → 39 exit (1); 40 } connexion possible (TCP ou UDP par exemple) 41 host = argv[1]; 2. quelle couche transport ? 42 calculation_prog_1 (host); 43 exit (0); 3. pour TCP/UDP, quel numéro de port ? 44 } Solution proposée par les RPC ONC, un programme de binding (RFC 1823) : le portmapper (version 2) : spécifique à TCP/UDP rpcbind (versions 3 et 4) : indépendant du transport Syst`mes r´partis : les Remote Procedure Calls – p.21/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.22/25 e e Binding RPC rpcbind Principes communs aux différentes versions : Remplace le portmapper. Principaux avantages : le binder est un programme RPC de numéro 100000 indépendant du transport il écoute toujours sur les ports 111 UDP et TCP permet un enregistrement et une résolution incluant les Le portmapper offre différentes fonctions : informations de transport publication d’un programme (décrit par son numéro de offre quelques nouvelles fonctions : programme et son numéro de version) horloge suppression d’un programme statistiques d’utilisation découverte (résolution) d’un programme, c’est-à-dire un programme peut enregistrer plusieurs instances obtention du port associé à un programme correspondant à différents transport (avec le obtention de la liste des programmes enregistrés portmapper, le transport est automatique celui utilisé appel direct d’une fonction distante pour contacter le portmapper lui-même) Le portmapper est limité à TCP et UDP. Syst`mes r´partis : les Remote Procedure Calls – p.23/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.24/25 e e
  • 7. Fonctionnement du système Fonctionnement du système 111 portmapper 111 portmapper Client Client Serveur 1773 Serveur Publication du programme (RPC) Le programme écoute sur le port 1773 Syst`mes r´partis : les Remote Procedure Calls – p.25/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.25/25 e e Fonctionnement du système Fonctionnement du système 111 portmapper 111 portmapper Client Client 1773 Serveur 1773 Serveur Demande de résolution (RPC) Appel de la fonction recherchée Syst`mes r´partis : les Remote Procedure Calls – p.25/25 e e Syst`mes r´partis : les Remote Procedure Calls – p.25/25 e e