R emote P rocedure C all

45
1 Remote Procedure Call Corso di Sistemi di Elaborazione delle Informazioni a.a 2007/2008 Autori: Alberto Colombo Fulvio Frati

description

R emote P rocedure C all. Corso di Sistemi di Elaborazione delle Informazioni a.a 2007/2008 Autori: Alberto Colombo Fulvio Frati. Sommario. Descrizione RPC File IDL e ACF Applicazione Client Applicazione Server Java RMI. Remote Procedure Call (1). - PowerPoint PPT Presentation

Transcript of R emote P rocedure C all

Page 1: R emote P rocedure  C all

1

RemoteProcedure CallCorso di Sistemi di Elaborazione delle Informazioni

a.a 2007/2008

Autori: Alberto Colombo

Fulvio Frati

Page 2: R emote P rocedure  C all

2

Sommario

Descrizione RPC

File IDL e ACF

Applicazione Client

Applicazione Server

Java RMI

Page 3: R emote P rocedure  C all

3

Remote Procedure Call (1)

Tecnologia (’80) che permette ad un programma di chiamare una funzione che si trova su un altro computer

Trasparenza: la chiamata di procedura remota è eseguita in modo il più possibile analogo a una chiamata di procedura "locale“

Dettagli della comunicazione su rete sono "nascosti" all’utente

Page 4: R emote P rocedure  C all

4

Remote Procedure Call (2)

Page 5: R emote P rocedure  C all

5

Descrizione RPC

shop.idl

IDL-CompilerC-Compiler

#include

LinkerLinker

shop_s.o

shop_c.c shop_s.c

shop_c.o shop.h

shop_client.cpp shop_server.cpp

shop_client.o shop_server.o

Client.exe Server.exe

C-Compiler

C-Compiler

Page 6: R emote P rocedure  C all

6

File shop.IDL

InterfaceHeader

InterfaceBody

Page 7: R emote P rocedure  C all

7

File shop.IDL: Interface Header

• Contiene informazioni generali relative all’interfaccia

• Gli attributi definiti sono globali rispetto a tutta l’interfaccia

• UUID: assegna all’interfaccia un Universally Unique IDentifier che la identifica univocamente

• version: definisce la versione dell’interfaccia: è possibile avere più interfacce relative allo stesso servizio ognuna identificata da un numero di versione

Page 8: R emote P rocedure  C all

8

File shop.IDL: UUID

UUID: Universally Unique Identifier, identificativo standard utilizzato in informatica

Esadecimale a 16 byte (o 128 bit) calcolato come la concatenazione fra numero casuale + MAC address della macchina + nanosecondi dall’adozione del calendario gregoriano

Ci sono teoricamente 25616 or about 3.4 × 1038. Quindi è necessario generare 1012 UUID ogni nanosecondo di 109 anni per esaurire le possibili combinazioni

Generabile attraverso librerie nei più comuni linguaggi o attraverso siti appositi (es. www.itu.int/ITU-T/asn1/uuid.html)

Unicità di UUID fondamentale se l’interfaccia utilizzata a livello internet, non necessaria se per servizio locale

Page 9: R emote P rocedure  C all

9

File shop.IDL: Interface Body (1)

Nome Interfaccia

Definizione struttura Book

Definizione struttura Receipt

• Definizione dei tipi di dato che saranno condivisi dalle due applicazioni

• Il servizio remoto può utilizzare tutti i tipi elementari + le strutture definite nel file IDL

• [string] indica di trattare il campo (unsigned char*) come un campo string

Page 10: R emote P rocedure  C all

10

File shop.IDL: Interface Body (2)

• Definizione funzioni remote chiamate dal client ed esposte dal server

• L’attributo [in] indica che il parametro è passato dalla procedura chiamante alla procedura chiamata

• L’attributo [out] indica che il puntatore al parametro deve essere restituito dal server al client. Deve essere sempre seguito da una variabile puntatore

• E’ permesso indicarli contemporaneamente: [in,out]

• Se i dati scambiati sono tipi complessi (non definiti dal linguaggio) devono essere dichiarati all’interno del file IDL

Page 11: R emote P rocedure  C all

11

File shop.ACF

• ACF: Application Configuration File

• Contiene configurazioni specifiche dell’implementazione locale e non l’interfaccia di rete

• Configurazione nell’esempio specifica di Visual Studio, per dettagli vedere MSDN

Page 12: R emote P rocedure  C all

12

IDL Compiler Output

• I file ACF e IDL sono necessari al compilatore MIDL (Microsoft) per generare i proxy

• MIDL genera i file:

shop.h (o shop_h.h): header file da includere nei sorgenti del client e del server; contiene le signature (definizione) dei metodi remoti

shop_c.c: client proxy, implementa i metodi remoti indicati nell’IDL e richiamati dal client; gestisce la comunicazione con il server

shop_s.c: server proxy, gestisce la comunicazione con i client e l’esposizione dei metodi remoti

shop.h deve essere incluso nel codice del client e del server

shop_c.c e shop_s.c devono essere linkati, rispettivamente, con il client e il server in fase di compilazione

Page 13: R emote P rocedure  C all

13

Descrizione RPC

IDL-CompilerC-Compiler

#include

LinkerLinker

shop_s.o

shop.idl

shop_c.c shop_s.c

shop_c.o shop.h

shop_client.cpp shop_server.cpp

shop_client.o shop_server.o

Client.exe Server.exe

C-Compiler

C-Compiler

Page 14: R emote P rocedure  C all

14

Applicazione Client (1)

• Contiene la signature (definizione) dei metodi remoti

• Il file shop.h creato da MIDL deve essere importato con il percorso corretto

Page 15: R emote P rocedure  C all

15

Applicazione Client (2)

• status: stato attuale della connessione

• pszUuid: UUID (Universal Unique Identifier) dell’interfaccia connessa (NULL perchè unica, servizio locale)

• pszProtocolSequence: protocollo di rete utilizzato

• pszNetworkAddress: indirizzo di rete della macchina server (NULL per indirizzo locale)

Page 16: R emote P rocedure  C all

16

Applicazione Client (2): Protocol Sequence Costants Identificano il protocollo di rete da utilizzare

Sono specifici del sistema client e server attraverso cui avviene la comunicazione

ncacn_np definisce un protocollo di comunicazione fra sistemi Windows attraverso named pipes

named pipes: canali di comunicazioni utilizzati da Windows per le comunicazioni inter-processi

Lista dei protocolli su sistemi Windows reperibile su MSDN

Page 17: R emote P rocedure  C all

17

Applicazione Client (3)

• pszEndpoint: indica che canale utilizzare; la sintassi dipende dal protocollo specificato. Nel nostro caso utilizziamo la pipe con nome bookshop

• pszOptions: opzioni generali di rete

• pszStringBinding: stringa che rappresenta la connessione da stabilire (protocollo, indirizzo e endpoint) e valorizzata in seguito

Page 18: R emote P rocedure  C all

18

Applicazione Client (4)

• RpcStringBindingCompose crea una stringa di connessione per la gestione della comunicazione

• Restituisce: RPC_S_INVALID_STRING_UUID se ci sono errori, RPC_S_OK (0) se tutto ok

• Valorizza la variabile pszStringBinding che contiene la stringa di connessione da utilizzare per stabilire la connessione e di cui è passato il puntatore

Page 19: R emote P rocedure  C all

19

Applicazione Client (5)

• Stabilisce la connessione tra client e server a partire da pszStringBinding creata precedentemente

• Restituisce lo stato della connessione ed eventuali errori

• Valorizza server_Handle che contiene il descrittore (handle) della connessione stabilita e utilizzabile successivamente per riferirla

Page 20: R emote P rocedure  C all

20

Applicazione Client (6)

Page 21: R emote P rocedure  C all

21

Applicazione Client (7)

• Le macro RpcTryExcept e RpcExcept forniscono un meccanismo per la gestione delle eccezioni in sistemi RPC

• Se nel blocco RpcTryExcept si riscontra un’eccezione causata da una procedura remota, il controllo passa al blocco RpcExcept per la gestione della stessa

• RpcExceptionCode() restituisce il codice dell’eccezione, utilizzabile per eventuali messaggi d’errore

• RpcEndExcept chiude il blocco RpcTryExcept

• Utilizzabile solo sotto sistemi Microsoft, NON è standard ANSI C

Page 22: R emote P rocedure  C all

22

Applicazione Client (8)

• Al termine della connessione, RpcBindingFree libera la memoria utilizzata da server_Handle

• Funzioni da implementare obbligatoriamente per permettere al sistema l’allocazione e la disallocazione della memoria

Page 23: R emote P rocedure  C all

23

Descrizione RPC

IDL-CompilerC-Compiler

#include

LinkerLinker

shop_s.o

shop.idl

shop_c.c shop_s.c

shop_c.o shop.h

shop_client.cpp shop_server.cpp

shop_client.o shop_server.o

Client.exe Server.exe

C-Compiler

C-Compiler

Page 24: R emote P rocedure  C all

24

Applicazione Server (1)

• pszSecurity: parametro opzionale per la gestione della sicurezza, ignorato da quasi tutti i protocolli di rete; da impostare a NULL

• Protocol Sequence e Endpoint devono corrispondere tra client e server per poter stabilire un canale di comunicazione

Page 25: R emote P rocedure  C all

25

Applicazione Server (2)

• cMinCalls: numero minimo di richieste di connessione da attendere prima di aprire i canali; RPC_C_LISTEN_MAX_CALLS_DEFAULT indica il valore imposto di default dal sistema

• cMaxCalls: numero massimo di connessioni gestite contemporaneamente; RPC_C_PROTSEQ_MAX_REQS_DEFAULT indica il valore imposto di default dal sistema

• fDontWait: = 0 (FALSE) il server attende la conclusione di una connessione per continuare (bloccante), <> 0 (TRUE) il server continua l’elaborazione anche durante una connessione (non bloccante)

Page 26: R emote P rocedure  C all

26

Applicazione Server (3)

• RpcServerUseProtseqEp indica al sistema di utilizzare il protocollo specificato, combinato con l’entry point, per gestire l’invocazione di procedure remote, riferite a quel protocollo

• Restituisce lo stato della connessione ed eventuali errori

• Un’applicazione server può utilizzaree più protocolli per gestire diversi canali di comunicazione

Page 27: R emote P rocedure  C all

27

Applicazione Server (4)

• RpcServerRegisterIf registra l’interfaccia nel sistema RPC; ogni richiesta verso quell’interfaccia sul protocollo di rete specificato sarà reindirizzata verso l’applicazione server

• Accetta come parametri l’interfaccia, l’UUID dell’interfaccia e un puntatore ad un vettore di entry point

• bookshop_v1_0_s_ifspec: oggetto creato dal compilatore MIDL che identifica l’interfaccia bookshop;

• MIDL utilizza la seguente sintassi per identificare le interfacce:

<nome>_v<major number>_<minor number>_<s|c>_ifspec

• Restituisce lo stato della connessione

Page 28: R emote P rocedure  C all

28

Applicazione Server (4): Port Mapper

Le applicazioni sono associate alle relative porte attraverso il Port Mapper In sistemi Unix/Linux il Port Mapper è implementato dal demone portmap rpcinfo fornisce informazioni su porte e programmi associati

$ rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100024 1 udp 32770 status 100021 1 udp 32770 nlockmgr 100021 3 udp 32770 nlockmgr 100021 4 udp 32770 nlockmgr 100024 1 tcp 32769 status 100021 1 tcp 32769 nlockmgr 100021 3 tcp 32769 nlockmgr 100021 4 tcp 32769 nlockmgr 100005 1 udp 644 mountd 100005 1 tcp 645 mountd 100005 2 udp 644 mountd

Page 29: R emote P rocedure  C all

29

Applicazione Server (5)

• RpcServerListen indica al sistema RPC di rimanere in attesa di chiamate a procedure remote

• Accetta come parametri il valore minimo e massimo di connessioni e se la comunicazione deve essere bloccante o non bloccante:

bloccante, il server attende la conclusione dell’elaborazione prima di accettare la successiva richiesta

non bloccante, più richieste in esecuzione in parallelo

• Restituisce lo stato della comunicazione dopo la chiamata a RpcServerListen

• RpcServerListen rimane in esecuzione fino a che il server non viene terminato

Page 30: R emote P rocedure  C all

30

Applicazione Server (6)

• I metodi remoti vanno gestiti come funzioni normali, seguendo però la signature definita nel file IDL

• Le strutture definite nel file IDL sono visibili in tutta l’applicazione

• La gestione della comunicazione verso i client è a carico della classe shop_s.c generata dal compilatore MIDL, da linkare in fase di compilazione

Page 31: R emote P rocedure  C all

31

Applicazione Server (7)

• Le funzioni per l’allocazione e la disallocazione della memoria devono essere codificate anche nel server

Page 32: R emote P rocedure  C all

32

RPC e Java: RMI (cenni)

RMI (Remote Method Invocation) applicazione di RPC in Java più comune

Rappresentano un’evoluzione di RPC per la gestione di oggetti

Permette il passaggio di tipi complessi

Page 33: R emote P rocedure  C all

33

RMI: Protocollo di Comunicazione

Comunicazione client/server in cui:

Il server: crea un certo numero di oggetti li rende accessibili da remoto attende le invocazioni dei client sugli oggetti

Il client: preleva la reference da uno o più oggetti distribuiti Invoca direttamente i loro metodi

Nota:Nei sistemi peer to peer il ruolo di client e server può essere assunto da tutti i nodi; questi sono chiamati servant

Page 34: R emote P rocedure  C all

34

RMI: Protocollo di Comunicazione

Processo Client

Processo Server

Oggetto Server

Oggetto Client

SKELETON

STUB

RMI transport layer

RMI REGISTER

Lookup

Register

Page 35: R emote P rocedure  C all

35

RMI: Stub e Skeleton

Il client invoca il metodo sullo stub non sull’oggetto. Lo stub “impacchetta” la richiesta in modo opportuno e la invia allo skeleton. Lo stub mantiene un reference dell’oggetto remoto

Lo skeleton si comporta da proxy nei confronti delle richieste del client. Intercetta tali richieste e le elabora in modo che sia possibile chiamare il metodo dell’oggetto reale. Inoltre si occupa di “impacchettare” la risposta e di inviarla allo stub.

Page 36: R emote P rocedure  C all

36

RMI: Comunicazione Il client ottiene un’istanza dello stub

Viene chiamato il metodo sullo stub (non sull’oggetto remoto)

Lo stub crea una connessione con lo skeleton sul server:

esegue il marshall delle informazioni riguardanti il metodo (nome e parametri)

invia le informazioni allo skeleton

Lo skeleton esegue il demarshall dei dati ricevuti dal client

esegue il metodo esegue il marshall del valore di

ritorno del metodo invia le informazioni allo stub

Lo stub esegue il demarshall dei dati ricevuti dal server e li ritorna al client

Page 37: R emote P rocedure  C all

37

RMI: implementazione (cenni)

1. Definire un’interfaccia remota

2. Implementare l’interfaccia remota, definendo l’oggetto remoto

3. Sviluppare il server

4. Sviluppare il client

Page 38: R emote P rocedure  C all

38

RMI: Definire un’interfaccia remota

Page 39: R emote P rocedure  C all

39

RMI: implementazione (cenni)

1. Definire un’interfaccia remota

2. Implementare l’interfaccia remota, definendo l’oggetto remoto

3. Sviluppare il server

4. Sviluppare il client

Page 40: R emote P rocedure  C all

40

RMI: Implementare l’interfaccia remota

Page 41: R emote P rocedure  C all

41

RMI: implementazione (cenni)

1. Definire un’interfaccia remota

2. Implementare l’interfaccia remota, definendo l’oggetto remoto

3. Sviluppare il server

4. Sviluppare il client

Page 42: R emote P rocedure  C all

42

Server

Page 43: R emote P rocedure  C all

43

RMI: implementazione (cenni)

1. Definire un’interfaccia remota

2. Implementare l’interfaccia remota, definendo l’oggetto remoto

3. Sviluppare il server

4. Sviluppare il client

Page 44: R emote P rocedure  C all

44

Client

Page 45: R emote P rocedure  C all

45

Annotazioni finali

Le slide saranno pubblicate su http://ra.crema.unimi.it

References:

MSDN – Remote Procedure Call (RPC)

Java - RMI