Les Remote Procedure Calls                                                                                                ...
Rôle des bibliothèques                                                                            Code à écrire   fonction...
eXternal Data Representation (rfc 1832)                                                                                  E...
Les types (3)                                                                                 Les types (4)       Données ...
calculation_server.c                                                                                 Synopsis de la partie...
calculation_client.c (3)                                                                            Publication et découve...
Fonctionnement du système                                                           Fonctionnement du système             ...
Prochain SlideShare
Chargement dans…5
×

Rpc 4bypage

402 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
402
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Rpc 4bypage

  1. 1. Les Remote Procedure Calls Principe de base : transparence réseau pour les appels deSystè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 clientBibliothè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. 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. 3. eXternal Data Representation (rfc 1832) Exemple person.xRepré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. 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 les2 int a; différents programmes3 int b; calculation_xdr.c : les fonctions de conversion en XDR4 };5 program CALCULATION_PROG { des types définis dans calculation.x6 version CALCULATION_VERS_BASE { calculation_clnt.c : le stub côté client7 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. 5. calculation_server.c Synopsis de la partie cliente calculation_server.c1 #include "calculation.h" Dans un client :2 1. on établit la connexion (clnt_create, ligne 14). On doit3 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 version6 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 (seule9 result=argp->a+argp->b; astuce : le dernier paramètre contient les informations de10 /* 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 DEBUG11 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 appel17 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. 6. calculation_client.c (3) Publication et découverte calculation_client.c33 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)3637 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. 7. Fonctionnement du système Fonctionnement du système 111 portmapper 111 portmapperClient 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 eFonctionnement du système Fonctionnement du système 111 portmapper 111 portmapperClient 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

×