RPC Remote Procedure Call
Transcription
RPC Remote Procedure Call
RPC Remote Procedure Call Benmoussa Yahia Université M’hamed Bougara de Boumerdès [email protected] Objectifs Le rôle de RPC comme middleware Positionner RPC dans le modèle OSI Développement d’application distribué en utilisant RPC Comprendre de la chaine de production RPC La sémantique RPC 2 RPC : Remote Procedure Call Technique puissante pour la mise en œuvre d’applications distribuées Principe : – Généralisation de la notion d’appel de procédures locales à un environnement distribué – La procédure appelée peut être localisée dans un ordinateur distant 3 RPC : Objectifs Objectifs : – Model de programmation (classique) basé sur l’appel de procédures au lieu du mécanisme L’envoie/réception de messages – Cacher la complexité du réseau au développeurs d’applications distribuées (Sockets, numéro de port, Formatage des donnée, ordre des octets, …) 4 RPC dans le modèle OSI Application distribuée Système d’exploitation Application Application Présentation Présentation RPC Session Session Transport Transport Réseau Réseau Liaison Liaison Physique Physique Application distribuée 5 RPC : Principes Comment se déroule un appel à une procédure locale a=f(10, x) – Empiler 10 dans la pile et la valeur de x dans la pile. – Empiler l’adresse de retour – Appel de la fonction f – Exécution de la fonction – Retourner la valeur de retour dans un registre – Retour vers l’adresse de retour 6 RPC : Principes a=f(10,x) Dépiler 10, x Continuer l’exécution Empiler @ de retour Empiler 10, x Exécution de f Sauvegarde de la valeur de a dans un registre Dépiler @ de retour 7 RPC : Principes Dans le cas d’un appel à une procédure distante, il n’est pas possible de : – Passer des paramètre par la pile (pas de mémoire partagée) – Passer des pointeurs (les pointeurs locaux non pas de sens dans une mémoire distante) – De récupérer la valeur de retour d’un registre (Le processeur est distant) 8 RPC : Principes RPC simule l’appel à une procédure distante par un appel à une procédure local en utilisant : – Un proxy client – Un proxy serveur – Un protocole de communication entre le client et le serveur pour le passage de paramètres et la récupération de la valeur de retour 9 RPC : Principes a=f_proxy_client(10,x) Empiler @ de retour Empiler 10, x, &y Exécution de f (10,x) Codage & envoie des paramètres dans le réseau avec le protocole RPC Exécution de f_proxy_client(10,x) Exécution de f_proxy_serveur(10,x) Réception et décodage des valeurs de retour avec le protocole RPC Client Serveur 10 RPC : Principes a=f_proxy_client(10,x) Empiler @ de retour Empiler 10, x, &y Exécution de f (10,x) Codage & envoie des paramètres dans le réseau avec le protocole RPC Exécution de f_proxy_client(10,x) Exécution de f_proxy_serveur(10,x) Réception et décodage des valeurs de retour avec le protocole RPC Client Serveur 11 RPC : Principes a=f_proxy_client(10,x) Empiler @ de retour Empiler 10, x, &y Exécution de f (10,x) Codage & envoie des paramètres dans le réseau avec le protocole RPC Exécution de f_proxy_client(10,x) Exécution de f_proxy_serveur(10,x) Réception et décodage des valeurs de retour avec le protocole RPC Client Serveur 12 RPC : Principes RPC Gère : – L’enregistrement/localisation des procédures dans un réseau – Codage des données et transfert de paramètres dans le réseau Le développeur : – Écrit le code de la procédure en un langage de haut niveau (C, C++, Java, …) – Définit l’interface de la procédure en utilisant IDL – Génère le code source des proxys (client & serveur) à l’aide d’un compilateur IDL 13 RPC : Principes Ecrit par le développeur a=f_proxy_client(10,x) Empiler @ de retour Empiler 10, x, &y Exécution de f_proxy_client(10,x) Exécution de f (10,x) Codage & envoie des paramètres dans le réseau avec le protocole RPC Exécution de f_proxy_serveur(10,x) Réception et décodage des valeurs de retour avec le protocole RPC Client Généré par le compilateur IDL Serveur 14 IDL : Interface Definition Language Langage de haut niveau pour définir l’interface d’une procédure S’intéresse à définir les paramètres d’entrée et de sortie d’une procédure. (Ne définit pas l’implémentation interne) Utilisé par le compilateur rpcgen pour générer le code des proxy client et serveur 15 IDL : Interface Definition Language La structure d’un programme IDL est comme suit : Définition de nouveaux types program NOM_PROGRAMME { version VERSION_PROG { type PROCEDURE1 (type) =id_procedure; type PROCEDURE2 (type) =id_procedure; … }=id_program 16 IDL : Interface Definition Language Chaque programme est défini par nom et un identificateur Un programme comporte plusieurs procédures Chaque procédure est définie par un nom, type d’entrée, type de retour et un identificateur Un programme peut être écrit dans plusieurs version Les fichier IDL ont l’extension .X 17 Compilateur IDL : rpcgen Un compilateur IDL rpcgen est un programme qui à partir d’un code écrit en IDL génère le code en C : – Du proxy client – Du proxy serveur – Des procédure conversion de données – Des fichiers entêtes rpcgen peut également générer des squelettes du programme client et de la procédure distante 18 IDL : Interface Definition Language program PROG { version PROG_V1 { long FACT(int) = 1; } = 1; } = 0x20000001; Exemple : programme factorielle fact.X 19 IDL : Interface Definition Language Type de données IDL : Semblables au langage C – const MAX_SIZE=128 – Types de base: char, short, int, long, float. • int x; float f; – Chaine de caractères • string nom<64>; – Tableau • Int tab[128]; – Type structuré • struct point {int x,y}; – Création de nouveau types • typedef int tableau [MAX_SIZE]; 20 IDL : Interface Definition Language Règles de génération de code C : Pour chaque procédure définie dans le fichier IDL, rpcgen une procédure – Qui porte le même nom avec la définition IDL • • • • En miniscule Suivie de _versionprog_svc : pour la procédure proxy serveur Suivie de _versionprog : pour la procédure proxy client Ex FACT Æ fact_1 & fact_1_svc – Dont les arguments de la procédure sont des pointeur vers les type d’arguments spécifié dans IDL – Qui retourne un pointeur vers le type spécifié dans IDL. Ce pointeur doit être vers une variable static Procédures avec plusieurs paramètre d’entrées : – RPC support des procédure avec un seul paramètre – Il faut utiliser un structure pour passer plusieurs paramètres 21 Exemple : factorielle Fichier IDL Génération des proxy client et serveur Génération des codes squelettes de l’appel local et de la procédure distante 22 fact.h Prototype du proxy client Prototype du proxy serveur 23 fact_clnt.c Code de la procédure proxy Spécification du code de la procédure distante Lors de l’appel RPC Fonction de conversion de données 24 fact_svc.c (1/2) Enregistrement du programme Au niveau du serveur RPC rpcbind 25 remote_fact.c Valeur de retour static Code la procédure fact écrit par Le développeur 26 local_fact.c Par exemple, on veut calculer fact(5) Code rajouté par e développeur pour afficher le résultat 27 Compilation du serveur Compilation du client Vérification que le serveur RPC Est en cours d’exécution Exécution du serveur Exécution du client 28 Chaine de production RPC local_proc.c Exécutable client gcc Proc_clnt.c Porc.X rpcgen proc_xdr.c proc.h bibliothèques Proc_svc.c remote_proc.c gcc Exécutable serveur Fourni par le programmeur Outils et services 29 Généré automatiquement RPC : Difficultés techniques L’appel de procédures distantes présente des difficultés concernant : – Passage de paramètres – Localisation des procédures distantes – Sémantiques de l’appel – Représentation des données 30 RPC : Difficultés techniques Passage de paramètres – Pas de passage de paramètre par adresse – La valeur des pointeurs n’est pas significatives dans un ordinateur distant 31 RPC : Difficultés techniques Localisation des procédures distantes – Utilisation d’un service de résolution de nom 32 RPC : Difficultés techniques Sémantiques de l’appel – Si le client ne reçoit pas de réponse au bout d’un temps déterminé, soit 1. Le message envoyé a été perdu 2. La réponse du serveur a été perdu 3. Le serveur a eu une défaillance – Si le client envoie de nouveau la requête • • • Pas de problèmes dans le cas 1 La requête sera exécuté 2 fois dans la cas 2 Divers résultat possibles 33 RPC : Difficultés techniques Représentation des données – XDR : eXternal Data Representation (RFC 1832) 34 Références ONC+ Developer’s Guide. Sun Micro Systems http://sardes.inrialpes.fr/~krakowia/ http://www.cs.rutgers.edu/~pxk/index.html RFC 1831. RPC: Remote Procedure Call Protocol Specification Version 2 RFC 1832. XDR: External Data Representation Standard 35