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