Systèmes et Applications Répartis

IEEE
Page 1 sur 61Lecteur de document UniversityLib

Systèmes et Applications Répartis

Programmation, Réseaux, Systèmes Distribués · course

Systèmes et Applications Répartis

Programmation

client/serveur

Etude du cas de RPC

ENSI – 2013/2014

Mise en oeuvre du schéma client/serveur :

RPC

 RPC-- Remote procedure call [Birrel &

Nelson 84]

 Appel de procédures/fonctions à distance

 Abstraction

 Vis-à-vis du protocole de communication

 Distribution masquée (transparence)

 Par des opérations de haut niveau

 Opération de base

Client

 do_Op(IN Port serverId, Name opName, Msg arg, OUT Msg result)

Serveur

 getRequest (OUT Port clientId, Message *callMessage)

 sendReply(IN Port clientId, Message *replyMessage)

ENSI

Systèmes et applications répartis

2

RPC : Principe de réalisation

Service RPC

(talon)

Protocole de

communication

Protocole de

communication

Service RPC

(talon)

Appelant

A

Appel

E

return

réseau

B

appel

Proc.

Appelé

C

D

return

client

ENSI

Systèmes et applications répartis

3

serveur

RPC (A)

Principe de fonctionnement

 Côté de l’appelant

Côté de l’appelant

 Le client réalise un appel procédural vers la

client stub)

procédure talon client (client stub

transmission de l ’ensemble des arguments

 au point AA

le talon collecte les arguments et les assemble dans

un message (empaquetage - parameter marshalling)

un identificateur est généré pour le RPC

Un délai de garde est armé

Pb : détermination de l’adresse du serveur (usage de

ARP, DNS)

le talon transmet les données au protocole de

transport pour émission sur le réseau

ENSI

Systèmes et applications répartis

4

RPC (B et C)

Principe de fonctionnement

 Côté de l’appelé

Côté de l’appelé

 le protocole de transport délivre le message au

skeleton)

service du RPC (talon serveur/skeleton

 au point BB

le talon désassemble les arguments (dépaquetage

  • unmarshalling)

l’identificateur du RPC est enregistré

 l’appel est ensuite transmis à la procédure distante

requise pour être exécuté (point C C ).

 Le retour de la procédure redonne la main au service

du RPC et lui transmet les paramètres résultats

(point D D )

ENSI

Systèmes et applications répartis

5

RPC (DD)

Principe de fonctionnement

Côté de l’appelé

Côté de l’appelé

 au point DD

les arguments de retour sont

empaquetés dans un message

un autre délai de garde est armé

le talon transmet les données au

protocole de transport pour émission

sur le réseau

ENSI

Systèmes et applications répartis

6

RPC (EE)

Principe de fonctionnement

Coté de l’appelant

 l’appel est transmis au service du RPC

(point EE )

les arguments de retour sont dépaquetés

le délai de garde armé au point A est désarmé

un message d’acquittement avec l’identificateur

du RPC est envoyé au talon serveur (le délai de

garde armé au point D peut être désarmé)

les résultats sont transmis à l’appelant lors du

retour de procédure

ENSI

Systèmes et applications répartis

7

RPC

Rôle des talons

Talon client - stubstub

• C’est la procédure d’interface

du site client

– qui reçoit l’appel en mode local

– le transforme en appel distant en

message

envoyant un message

– reçoit les résultats après

l'exécution

– retourne les paramètres

résultats comme dans un retour

de procédure

– Liaison initiale

Talon serveur - skeleton

skeleton

• C’est la procédure sur le

site serveur

– qui reçoit l’appel sous

message

forme de message

– fait réaliser l’exécution sur

le site serveur par la

procédure serveur (choix

de la procédure)

– retransmet les résultats par

message

– Enregistrement initial

ENSI

Systèmes et applications répartis

8

RPC : Objectifs et problèmes

 Avantages attendus

 Forme et effet identiques à ceux d’un appel local

Applications non modifiées lors du passage à l’appel distant

Mise au point locale avant répartition

Simplicité d’utilisation

 Abstraction

Indépendance par rapport aux protocoles de communication

Réutilisation, y compris en environnement hétérogène

 Problèmes

 Sémantique complexe en cas de panne

 Les processus client et serveur peuvent tomber en panne

indépendamment

 Le réseau introduit une incertitude

 Restrictions sur les paramètres

 Passage de structures complexes, possible mais compliqué

ENSI

Systèmes et applications répartis

9

RPC : Quelques problèmes de mise en

œuvre

 Traitement des défaillances

 Panne et/ou congestion du réseau,

 Panne du client pendant le traitement de la requête,

 Panne du serveur avant ou pendant le traitement de la requête.

 Gestion de l’hétérogénéité

 Désignation et liaison

 Problèmes de sécurité

 Authentification du client et du serveur

 Confidentialité des échanges

 Aspects pratiques

 Adaptation à des environnements d’utilisation variables

(protocoles, langages, matériels)

 Performance

ENSI

Systèmes et applications répartis

10

RPC : Traitement des défaillances

 Détection de panne = expiration de délai de garde. On tente de

réexecuter l’appel. Combien de fois la procédure a-t-elle été

exécutée!?

 La sémantique dépend des hypothèses de pannes et du mécanisme

de reprise

Indéfini (pas d’hypothèses)

 Au moins une fois (appel répété, plusieurs exécutions possibles, au

moins une réussit)

 Si expiration du délai A alors ré-émission de la requête,

 Plusieurs exécutions possibles du service

 acceptable si opération idempotente (2 appels successifs ont le même effet

que 1 appel)

 Au plus une fois (0 ou 1 fois)

 Si expiration du délai A alors erreur

 on évite les exécutions répétées, mais on ne garantit pas le succès

 Exactement une fois (c’est l’idéal)

 Ré-émission de la requête et/ou de la réponse si nécessaire,

 Élimination des doublons

ENSI

Systèmes et applications répartis

11

RPC: Désignation et liaison

Objets à désigner

 Procédure appelée, site serveur

 Propriétés souhaitées : désignation indépendante de la

localisation

possibilité de reconfiguration (pannes,régulation de charge)

Mise en œuvre

 Statique : localisation du serveur connue à la compilation

 Dynamique : localisation non connue à la compilation

Désignation symbolique des services (non liée à un site d’exécution)

Possibilité d’implémentation ou de sélection retardée

ENSI

Systèmes et applications répartis

12

RPC: Désignation et liaison

 Liaison statique : pas d’appel à un serveur de noms

(ou appel à la compilation

 Liaison au premier appel : consultation du serveur

de noms au premier appel seulement

 Liaison à chaque appel : consultation du serveur de

noms à chaque appel

ENSI

Systèmes et applications répartis

13

RPC: Désignation et liaison utilisant un

annuaire

 1, 2 : le serveur s’enregistre auprès de l’annuaire avec

<nom,adr.serveur, n° port>

 3, 4, 5 : le client consulte l’annuaire pour trouver

<adr.serveur, n° port> à partir de <nom>

 L’appel peut alors avoir lieu

 Schémas plus élaborés : attributs (critères de choix)

ENSI

Systèmes et applications répartis

14

RPC : désignation et liaison utilisant un

service de nommage : le portmapper

 Si le serveur est connu (cas fréquent): on peut utiliser un service de

nommage local au serveur, le portmapper

 Un service enregistre le n° de port de son veilleur auprès du portmapper et le

veilleur se met en attente sur ce port

 Le portmapper a un n° de port fixé par convention (111)

 Solution proposée par les ONC RPC (Open Network Computing), un

programme de binding (RFC 1823) :

le portmapper (version 2) : spécifique à TCP/UDP

 le portmapper est lui-même un serveur rpc.

 rpcbind (versions 3 et 4) : indépendant du transport

ENSI

Systèmes et applications répartis

15

Publicité

 Principes communs aux différentes versions:

Binding RPC

le binder est un programme RPC de numéro 100000

 il écoute toujours sur les ports 111 UDP et TCP

 Le portmapper offre différentes fonctions :

 publication d’un programme (décrit par son #programme et son

#version)

 suppression d’un programme

 découverte (résolution) d’un programme, c’est-à-dire obtention du

port associé à un programme

 obtention de la liste des programmes enregistrés

 appel direct d’une fonction distante

ENSI

Systèmes et applications répartis

 Le portmapper est limité à TCP et UDP.

16

RPCbind

 Remplace le portmapper.

 Principaux avantages :

 indépendant du transport

 permet un enregistrement et une résolution incluant les

informations de transport

 offre quelques nouvelles fonctions :

 horloge

 statistiques d’utilisation

 un programme peut enregistrer plusieurs instances

correspondant à différents transports (avec le portmapper,

le transport est automatique celui utilisé pour contacter le

ENSI

portmapper lui-même)

Systèmes et applications répartis

17

RPC : Gestion des paramètres

 Problèmes des paramètres

 Les espaces d’adressage de l’appelant et de

l’appelé sont distincts

Pas de passage par référence

Les pointeurs perdent leur signification (difficulté pour

passer des structures complexes)

 Les paramètres sont transmis sur le réseau

Représentation sérialisée des structures

 Les machines client et serveur peuvent être

hétérogènes

Conversion de format

ENSI

Systèmes et applications répartis

18

RPC : Traitement de l’hétérogénéité

 Problème : représentation des données

 Conversion nécessaire si le site client et le site serveur :

 N’utilisent pas le même système de codage

 Utilisent des formats internes différents (pour le type de base : caractère,

entier, flottant, …)

 Solutions

 Syntaxe abstraite de transfert de données (Abstract Syntax Notation)

ASN1 : Norme OSI de définition universelle de type

 Représentation externe commune : Sun XDR (eXternal Data

Representation)

Non optimale si même représentation client et serveur

 Représentation locale pour le client et conversion par le serveur

 Choix d’une représentation parmi n (standard), conversion par le serveur

 Négociation client serveur

ENSI

Systèmes et applications répartis

19

Représentation de Données (en

mémoire)

 Client et serveur sur machines différentes

 Il faut transmettre données et résultats

 Différences de représentations en mémoire

 Codage Little-endian (x86, alpha) vs. Big-endian (ppc,

sparc, réseau) : (dépend du processeur)

 Représentation des flottants (fixe par IEEE 754)

 Alignement des données dans structure (dépend du

compilateur)

 Tailles (32 ou 64 bits ; 4 ou 8 octets pour un registre)

ENSI

Systèmes et applications répartis

20

XDR –eXternal Data Representation

 Représentation portable des données (réseau):

codage big endian avec des mots de 4 octets (complétion par des zéros)

permet de définir des types de données associés à une

représentation binaire standard

Représentation commune sur le réseau (format pivot)

orienté C (syntaxe proche du C):

 types fondamentaux classiques (int, double, etc.)

 énumération

 struct et union

 tableaux

rpcgen engendre des fonctions de traduction à partir d’un fichier .x(et des

bibliothèques de conversion de bas niveau) en XDR

ENSI

Systèmes et applications répartis

21

XDR –Types (1/2)

Type

Identificateur

taille

Entier relatif

int

Entier positif

unsigned int

Enumération

enum {id =

constante, …}

Booléen

bool

4 octets (IEEE)

4 octets (IEEE)

4 octets (IEEE)

Enum {False=0,

True=1}

Entier long

hyper

Entier positif

unsigend hyper

8 octets

8 octets

Type

Identificateur

taille

Réels simples

Réels doubles

Float

double

Réels long

quadruple

Rien

void

4 octets (IEEE)

4 octets (IEEE)

4 octets (IEEE)

0 octet

ENSI

Systèmes et applications répartis

22

XDR –Types (2/2)

 Données à taille fixe ou variable :

 [n] correspond à une taille fixe égale à n

 <> correspond à une taille variable

 <m> correspond à une taille variable inférieure à m

 exemple, int<15> : liste d’entiers de longueur au plus 15.

Cas particuliers :

Identificateur

Contenu

opaque

string

Liste d’octets

Chaîne de caractères

ENSI

Systèmes et applications répartis

23

RPC : Passage des paramètres

Plusieurs modes de passage sont possibles

Passage par valeur

 pas de problème

Passage par copie-restauration

 A l’appel, copie des valeurs des paramètres de l’appelant vers

l’appelé

 Au retour, copie de nouvelles valeurs pour les paramètres de

l’appelé vers l’appelant

ENSI

Systèmes et applications répartis

24

RPC : Passage des paramètres

 Passage par référence (adresse)

 Impossible puisque espaces distincts

 Palliatifs possibles

 Interdire l’appel par référence

 Utiliser l’appel par copie-restauration

Équivalent le plus souvent …

 … mais pas dans tous les cas (aliasing)

 Programmer à la main les procédures d’emballage-

déballage pour les structures complexes

 Nouveaux modèles de communication (mémoire

virtuelle répartie) : revient à un espace commun

ENSI

Systèmes et applications répartis

25

Composants de RPC

IDL-- Interface Definition Language: langage de

description des données et des fonctions proche du

C;

 une méthode de représentation portable des

données;

 un protocole d’appel :

 transmission des paramètres de l’appel du client vers le

serveur;

 transmission du résultat du serveur vers le client;

 un protocole de publication et de recherche d’un

service.

ENSI

Systèmes et applications répartis

26

Langage de description

d’interface (IDL)

Interface = “contrat” entre client et serveur

 Définition commune abstraite

 Langage neutre (adapté à des langages multiples), proche du

C++

 Indépendante de la représentation des types

 Indépendante de

la machine  masquer

les divers

problèmes d’hétérogénéité

 Contenu minimal

 Identification des procédures (nom, version)

 Définition des types des paramètres, résultats, exceptions

 Définition du mode de passage (IN, OUT, IN-OUT)

 Extensions possibles

 Procédures de conversion pour types complexes

 Propriétés non fonctionnelles (qualité de service), non standard

27

Systèmes et applications répartis

ENSI

Avantages d’un IDL

 Traitement de l'hétérogénéité

 Types de données différents selon les langages

 Représentations internes différentes selon les

systèmes

 Définition des types indépendante de la

représentation

 Description d'une interface

 Description des types élémentaires

(arguments, résultats, exceptions)

 Procédures de conversion pour types complexes

(avec pointeurs)

ENSI

Systèmes et applications répartis

28

IDL

Mode opératoire

Procédure

Procédure

du client

du client

stub

stub

compilateur

compilateur

Programme

Programme

client

client

Description

d’interface

Générateur

de talons

Définitions

communes

bibliothèque

Générateur

de talons

Définitions

communes

Publicité

bibliothèque

Procédure

Procédure

du serveur

du serveur

skeleton

skeleton

compilateur

compilateur

Programme

Programme

serveur

serveur

ENSI

Systèmes et applications répartis

29

Le Langage de Description RPCL

 IDL de RPC

 Les fichiers spécification d’extension ‘’.x ’’ ont la structure

suivante:

[Definition des constantes]

[Definition des types]

program NOM_PROGRAMME {

[version NOM_VERSION {

[type_resultat nom_procedure

(type_du_parametre) = numero_procedure;]

} = numero_version]

} = numero_programme;

ENSI

Systèmes et applications répartis

30

Le Langage de Description RPCL

 Les constantes :

const identificateur = valeur;

 Les structures :

struct nom_du_type {

type attribut ;

}

 Nouveau type:

typedef type nom_du_type ;

Cas particulier des tableaux et chaînes de caractères :

typedef int vecteur <1000>

typedef string chaine <255>

ENSI

Systèmes et applications répartis

31

Le Langage de Description RPCL

 Tableau

 Tableaux de taille fixe et connue : comme en C, avec [ ]

 Exemple : int data[12];

 Tableaux de taille variable

 Utilise les < > au lieu des [ ]

 Peut préciser la taille maximale du tableau entre les < >

 Exemple

– int data< >

– double valeurs<10> tableau au plus de 10 double

taille quelconque

 Traduction en C

– Définition d'un tableau de taille variable : structure de 2 éléments

» Le pointeur correspond au tableau

» La taille du tableau

struct {

u_int data_len;

int *data_val;

} data;

ENSI

Systèmes et applications répartis

32

Le Langage de Description RPCL

 Unions

 Syntaxe d'utilisation

union nom_union switch(type discrim) {

case value : ... ;

case value : ... ;

...

default : ...;

};

 Exemple

 Selon le code d'erreur d'un calcul, on veut stocker le résultat normal

(un flottant) ou le code de l'erreur (un entier)

union res_calcul switch(int errno) {

case 0:

float res;

default:

int error;

};

Traduit dans le .h en :

struct res_calcul {

int errno;

union {

float res;

int error;

} res_calcul_u;

};

typedef struct res_calcul res_calcul;

ENSI

Systèmes et applications répartis

33

Le Langage de Description RPCL

 Chaînes de caractères

 Utilise le type string

 Taille de la chaîne : quelconque ou taille maximale

 Utilise aussi la notation en < >

 Exemple

 string nom<20>; chaine de taille d'au plus 20 caractères

 string message<>; chaine de taille quelconque

 Traduit dans le .h en char* tous les deux

 char *nom;

 char *message;

 Données opaques

 Utilise le type opaque

 Exemple

– opaque id_client[128];

ENSI

Systèmes et applications répartis

34

ONC RPC (SUN)

 rfc 1831

 Solution classique, disponible sur Unix (incluse dans le système en général)

 « Open source », comparable aux DCE RPC en “gratuit”

 Il utilise le protocole XDR pour la description/échange de données (transport

des arguments et du résultat) -- (rfc 1832) ;

 Technologie utilisée par NFS--Network File System.

 Outil de base rpcgen:

génère des convertisseurs ((un)marshalling);

 génère les souches (serveurs et clients);

 propose des modèles pour le client et le serveur

 engendre un Makefile;

 Utilise un lookup service pour la publication et la découverte d’un service (rfc

1833);

 Service lookup tourne sur chaque hôte contenant des serveurs rpc.

 Les RPC ONC peuvent être implantées sur n’importe quelle couche transport

(TCP/UDP)

ENSI

Systèmes et applications répartis

35

Principe de base de SUN RPC

 Un service réseau est fourni par plusieurs programmes

 Un programme fournit plusieurs fonctions (ou procédures)

 Un client appelle une procédure d’un programme

ENSI

Systèmes et applications répartis

36

Le protocole RPC --Identification

 Une procédure est identifiée par trois entiers (positifs) :

 Hostname (IP Address)

 Le numéro de programme unique (32 bit integer)

 Sun divise les IDs en :

0x00000000 - 0x1fffffff Serveurs officiels Sun

0x20000000 - 0x3fffffff

0x40000000 - 0x5fffffff Serveurs Transitoires

0x60000000 - 0xffffffff Réservée par Sun

Publique (Admin. système)

Le numéro de procédure (32 bit integer)

 Commence toujours à partir de 1 et puis

incrémenté

séquentiellement.

 Le numéro de version du programme (pour tests et migration)

 Commence typiquement à partir de 1 et puis incrémenté

ENSI

Systèmes et applications répartis

37

RPCGEN : RPC Generator

 Utilitaire permettant de générer automatiquement

le code des talons et des fonctions XDR associées

aux données utilisées par les fonctions

 Principe d'utilisation

 On décrit dans un fichier (d'extension .x)

Les structures de données propres aux

fonctions

Les fonctions appelables à distance

 RPCGEN génère ensuite un ensemble de

fichiers

ENSI

Systèmes et applications répartis

38

RPCGEN

ENSI

Systèmes et applications répartis

39

Règles d'écriture du fichier .x

Fichier décrivant les fonctions et données

 Pour données

Décrit les structures presque comme en C (voir suite pour détails)

 Pour fonction : règle fondamentale

Une fonction ne prend qu'UN seul paramètre

On doit donc définir une structure de données dédiée à la fonction

si on veut passer plusieurs valeurs en paramètre

 Définition d'un « programme » RPC

Programme = ensemble de fonctions/services

Chaque programme possède un nom avec un numéro associé

Un programme peut exister en plusieurs versions

– Chaque version est identifiée par un nom et un numéro associé

– Chaque version définit une liste de fonctions

– Chaque fonction est identifiée par un numéro unique

ENSI

Systèmes et applications répartis

40

Exemple : geometrie.x

ENSI

Systèmes et applications répartis

41

Exemple : geometrie.x (suite)

 Nom du programme : GEOM_PROG d'identifiant 20000001 (en

hexa)

 Nom de version : GEOM_VERSION_1 de numéro 1

 Les 3 fonctions sont numérotées 1, 2 et 3

 Les structures coordonnees et param_inclus ont été créées pour les

fonctions nécessitant plus de 2 paramètres

 Par convention, on écrit les noms de fonctions, programmes et versions en

majuscule

ENSI

Systèmes et applications répartis

42

Génération des fichiers

Pour générer les fichiers avec rpcgen

 $ rpcgen geometrie.x

Fichiers générés à partir du .x

 geometrie.h

Définition de toutes les structures et des signatures des

opérations

 geometrie_xdr.c

Fonctions de codage XDR des structures de données

 geometrie_clnt.c et geometrie_svc.c

 Talons côtés client et serveur

 Avec option -a de rpcgen

Génère fichier geometrie_server.c

– Squelette pour écriture des fonctions du programme

ENSI

Systèmes et applications répartis

43

Exemple : fichier geometrie.h

ENSI

Systèmes et applications répartis

44

Exemple : fichier geometrie.h (suite)

ENSI

Systèmes et applications répartis

45

Contenu fichier .h

 Pour chaque structure définie

 Définition de la structure équivalente en C

 Définition d'un type du même nom correspondant à la structure

 Signature de la méthode XDR correspondant à ce type

 Exemple, dans .x

struct point {

int x;

int y;

};

 Devient dans le .h

struct point {

int x;

int y;

};

typedef struct point point;

bool_t xdr_point(XDR, point);

ENSI

Systèmes et applications répartis

Publicité

46

Contenu fichier .h

Pour chaque méthode

 Dans .x

Pour chaque opération nommée fonction, de version numérotée x, qui

prend un type_param en paramètre et retourne un type_retour

 On aura dans le .h, signature de 2 méthodes correspondantes

type_retour fonction_x(type_param , CLIENT *)

type_retour fonction_x_svc(type_param , svc_req *)

 Dans les 2 cas

Le nom de la fonction est suffixée par la version (et svc pour la

seconde)

Un niveau de pointeur en paramètre et retour est ajouté par rapport au .x

ENSI

Systèmes et applications répartis

47

Contenu fichier .h

Pour chaque méthode (suite)

 Première version : fonction_x

 Fonction qui est implémentée par le talon client

 C'est cette fonction que la partie client appelle localement pour demander l'appel de la fonction

associée côté serveur

 Paramètre CLIENT*

– Caractéristiques de la communication avec la partie serveur

 Deuxième version fonction_x_svc

 Fonction à implémenter côté serveur

– Fonction qui est appelée par les clients

 Paramètre svc_req* : caractéristiques de la requête d'appel de service et identification du client

Exemple

 geometrie.x : int SURFACE_RECTANGLE(rectangle) = 1;

 geometrie.h

 int surface_rectangle_1(rectangle , CLIENT );

 int surface_rectangle_1_svc(rectangle , svc_req );

ENSI

Systèmes et applications répartis

48

Contenu fichier .h

 Définitions de constantes

 Numéros de programme et de versions en associant chaque

numéro au nom précisé dans .x

 Exemple

– #define GEOM_PROG 0x20000001

– #define GEOM_VERSION_1 1

 Pour chaque fonction, définition d'une constante associant son

nom à son numéro

 Exemple

– Dans .x

» rectangle CREER_RECTANGLE(coordonnees) = 2;

– Dans .h

» #define CREER_RECTANGLE 2

 Toutes ces constantes serviront à identifier le programme et les

fonctions lors des appels à distance

ENSI

Systèmes et applications répartis

49

Implémentation des fonctions

 Côté serveur, dans un fichier à part ou dans le squelette côté

serveur si on l'a généré

 Pour chacune des fonctions du programme, on

implémente le code en prenant la signature du .h

 Exemple

Dans .h

extern int surface_rectangle_1_svc(rectangle, svc_req*);

extern rectangle creer_rectangle_1_svc(coordonnees,

svc_req*);

extern bool_t inclus_1_svc(param_inclus, svc_req*);

Implémentation de ces fonctions dans fichier

geometrie_server.c

ENSI

Systèmes et applications répartis

50

Exemple : fichier geometrie_server.c

*

ENSI

Systèmes et applications répartis

51

Exemple : fichier geometrie_server.c

*

 Notes

 On n’a pas d'utilité ici à manipuler le paramètre svc_req

 Les variables result sont déclarées en static

On doit retourner un pointeur sur une donnée qui existera toujours

après l'appel de la fonction

Cette donnée sera retournée par copie au client

ENSI

Systèmes et applications répartis

52

Côté client

 Pour appel d'un service fonction sur la partie serveur

 Appelle simplement la fonction fonction_x côté client

 Cette fonction est appelée sur le talon client qui relaie la requête côté

serveur sur lequel on appellera fonction_x_svc

 Avant de pouvoir appeler une fonction sur une machine distance

 Doit identifier le programme RPC tournant sur cette machine

CLIENT *clnt_create(

char *machine,

long numero_programme,

long numero_version,

char *protocole);

nom de la machine serveur

id. du programme RPC

id. de la version du programme

« udp » ou « tcp »

 Pour identificateurs programme et version : peut utiliser les noms

associés se trouvant dans le .h

 Retourne un identificateur de communication côté client à utiliser

pour appel des fonctions ou NULL si problème

 Exemple : fichier client.c

 Programme qui appelle les fonctions distantes géométriques

ENSI

Systèmes et applications répartis

53

Exemple côté client : client.c

ENSI

Systèmes et applications répartis

54

Côté client : client.c

 Commentaires

 Pour la connexion avec le programme RPC distant

 Le programme s'exécute sur la machine scinfe222

 On utilise les constantes définies dans geometrie.h pour identifier le

programme et sa version

– GEOM_PROG et GEOM_VERSION_1

 On choisit une communication en UDP

 Fonctions creer_rectangle_1, calculer_surface_1 et inclus_1

 Vont engendrer l'appel des fonctions associés sur le serveur (sur la machine

scinfe222)

 Aucune différence avec appel d'une fonction locale

– Transparence totale de la localisation distante du code de la fonction

 Gestion des erreurs possibles lors des appels RPC

 Les fonctions retournent NULL

 clnt_perror(CLIENT,char msg) : affiche l'erreur (avec msg avant)

ENSI

Systèmes et applications répartis

55

Compilation parties client et

serveur

 Pour les 2 parties, besoin des fonctions de codage XDR

 $ gcc -c geometrie_xdr.c

 Côté client

 $ gcc -c geometrie_clnt.c

 $ gcc -c client.c

 $ gcc -o client client.o geometrie_clnt.o geometrie_xdr.o

 Côté serveur

 $ gcc -c geometrie_svc.c

 $ gcc -c geometrie_server.c

 $ gcc -o serveur geometrie_svc.o geometrie_server.o

geometrie_xdr.o

ENSI

Systèmes et applications répartis

56

Côté serveur

 Lancement du serveur

 Le talon côté serveur (geometrie_svc.c) contient un main qui enregistre

automatiquement le programme comme service RPC

 Avec l'outil système rpcinfo, on peut connaître la liste des services RPC

accessibles sur une machine

$ /usr/sbin/rpcinfo -n scinfe222

program no_version protocole no_port

tcp

100000 2

udp

100000 2

udp

100024 1

tcp

100024 1

tcp

391002 2

udp

536870913 1

tcp

536870913 1

portmapper

111

portmapper

111

32768

status

32770 status

32771 sgi_fam

32916

38950

 Notre programme est bien lancé en version 1

 Numéro programme : (536870913)10 = (20000001)16

 Il est accesible via UDP (port 32916) ou TCP (port 38950)

 Portmapper : démon système qui est interrogé pour

récupérer la référence sur un service RPC et qui enregistre les

services

ENSI

Systèmes et applications répartis

57

Liste des services RPC enregistrés sur une

machine

 Liste des services enregistrés:

 rpcinfo –p [machine]

 Appel de la procédure 0 d’un programme en

utilisant le protocole udp et tcp

 rpcinfo -u machine num_prg [num_version]

 rpcinfo -t machine num_prg [num_version]

ENSI

Systèmes et applications répartis

58

Conclusions Générales

 Limites de la programmation traditionnelle

 Tout est à la charge du programmeur

Construction des différents modules,

interconnexion

 Manque d'abstraction pour limiter la complexité

Structure de l'application et constituants

masqués

 Evolution / modification des fonctionnalités

difficiles

 Besoins importants d‘ingénierie logicielle et

ENSI

Systèmes et applications répartis

59

compétence technique

 Développement complexe  temps  fiabilité 

Conclusions sur les RPCs

 Des mécanismes plus évolués visent à remédier à ces limitations.

 C/S objet

 RMI: objets répartis de Java

 Supporte la migration de code

 CORBA

 DCOM (Microsoft): concurrent de CORBA

 XML-RPC

 Utilise des technologies normalisées:

 XML, HTTP

 Bénéficie d'un niveau de sécurité normalisé: HTTPS (SSL+X509)

 SOAP (Microsoft)

 Basé sur XML-RPC

60

Nétographie

 La majorité des transparents de ce cours sont pris de:

[Krako]

[Duvallet]

[Riveill99]

[Esnard]

http://sardes.inrialpes.fr/~krakowia/Enseignement/M

2P-GI/; Systèmes et Applications Répartis (Sacha

Krakowiak, Grenoble).

http://litis.univ-lehavre.fr/duvallet/; cours de Systèmes et

Applications Réparties, Claude Duvallet

M. Rivell, Modele client-serveur, cours ensimag, 1999. ref.

03-99-slides-client-serveur.pdf

http://www.labri.fr/~esnard; Programmation des

Applications Réparties, Aurélien Esnard, ENSEIRB

PG306-IT343

[Quinson08]

Programmation d'Applications Reparties, Martin Quinson,

cours ESIAL, 2008.

[Alons11]

Gustavo Alonso, Timothy Roscoe, Donald Kossmann,

Networks and Operating Systems, Chap. 3: Remote

Procedure Call (RPC). ETH Zurith, 2011

61