9.RPC-RMI

Transcript

9.RPC-RMI
Applicazioni distribuite e
sistemi ad oggetti distribuiti
RPC – RMI - Web Services
1
Complessità delle applicazioni distribuite
ƒ La scrittura di applicazioni distribuite basate
sull’utilizzo di protocolli di comunicazione asincroni è
complessa e soggetta ad errori difficili da trattare
ƒ Gli sviluppatori applicativi non hanno l’abitudine a
trattare con dettagli di basso livello come quelli
richiesti dall’utilizzo di TCP/IP e dei socket
ƒ Inoltre si trovano a disagio con logiche di tipo
asincrono
ƒ Per questi motivi nel corso del tempo sono stati
proposti e realizzati meccanismi per creare
applicazioni distribuite sulla base di modelli sincroni
RPC – RMI - Web Services
2
RPC: la soluzione
ƒ RPC = Remote Procedure Call
ƒ Il modello di base è stato proposto da Birrell e Nelson
nel 1984
ƒ L’obiettivo è quello di consentire l’invocazione di
procedure (funzioni) su altre macchine
ƒ In questo modo la comunicazione interprocesso si
riconduce ad un modello conosciuto e
fondamentalmente sincrono
ƒ E’ un astrazione di livello elevato che nasconde
dettagli di basso livello e rende trasparente la
presenza di una comunicazione attraverso una rete
ƒ Dal punto di vista del programmatore applicativo non
c’è (almeno in teoria) differenza fra chiamate locali e
remote
RPC – RMI - Web Services
3
RPC: il mondo non è così semplice
ƒ E’ un’astrazione non banale da realizzare:
ƒ Le architetture delle due macchine su cui girano i
processi possono essere diverse
ƒ Ogni macchina ha uno spazio di indirizzamento
diverso.
ƒ Come si possono passare i parametri (di tipi diversi
e anche molto complessi)?
ƒ Cosa accade se cade la rete o una delle due
macchine (o entrambe) va in crash durante la
chiamata di procedura?
RPC – RMI - Web Services
4
Chiamate di procedura locali
ƒ In una normale invocazione di procedura (o funzione) il
chiamante e la procedura comunicano in virtù del fatto
che condividono lo spazio di memoria
ƒ Per il passaggio di parametri si usa lo stack:
ƒ Nel caso di parametri passati per valore i valori
vengono ricopiati sullo stack
ƒ Nel caso di passaggio per riferimento nello stack
viene inserito un puntatore che consente alla
procedura di modificare il valore della variabile
originale
ƒ Anche il valore di ritorno della funzione viene
ripassato al chiamante utilizzando lo stack
RPC – RMI - Web Services
5
RPC: un gioco di prestigio
ƒ Nel caso di procedure remote il meccanismo è diviso
in due parti e si ricorre a due mediatori che realizzano
il “trucco”:
ƒ Il client stub: implementa sulla macchina locale
l’interfaccia attraverso cui la funzionalità remota
può essere invocata (fa finta di essere la procedura
remota)
ƒ Il server stub: implementa la reale funzionalità
ƒ Il client stub impacchetta i parametri (marshalling) e li
invia al server usando un canale di comunicazione
(socket TCP/IP)
ƒ Il server stub spacchetta i parametri (unmarshalling) e
li passa alla procedura reale
ƒ Per i parametri di ritorno la cosa funziona in modo
simmetrico
RPC – RMI - Web Services
6
Sequenza temporale
ƒ L’effetto è quello di una chiamata sincrona
RPC – RMI - Web Services
7
I dieci passi di una RPC
1. La procedura chiamante invoca il client stub nel modo
usuale (chiamata locale)
2. Il client stub costruisce il messaggio e invoca il
sistema operativo locale (libreria socket)
3. Il S.O locale invia il messaggio al S.O remoto
4. Il S.O remoto consegna il messaggio al server stub
5. Il server stub spacchetta i parametri e chiama il
server (procedura effettiva)
6. Il server esegue il compito desiderato e restituisce i
risultati al server stub
7. Il server stub li impacchetta e invoca il suo S.O.
8. Il S.O del server invia il messaggio al S.O. del client
9. Il S.O. del client consegna il messaggio al client stub
10.Il client stub spacchetta il risultato e lo restituisce al
chiamante
RPC – RMI - Web Services
8
Schema di RPC
ƒ Il percorso di ritorno (parametri per valore e valori di
rittorno) è simmetrico
RPC – RMI - Web Services
9
I problemi di RPC
ƒ RPC funziona decisamente bene se le macchine sono
omogenee
ƒ Le complicazioni nascono quando le due macchine
coinvolte usano diverse codifiche di caratteri (ad
esempio EBCDIC e ASCII).
ƒ Anche l’ordine dei byte è un problema
ƒ Le macchine Intel sono “big-endian”.
ƒ Sun Sparc, Motorola e PowerPC sono “littleendian”.
ƒ Bisogna inserire meccanismi aggiuntivi nello schema
dell’RPC per gestire le conversioni
ƒ Questo aggiunge complessità e peggiora le
prestazioni
RPC – RMI - Web Services
10
Chi scrive gli stub?
ƒ Il meccanismo dell’RPC prevede l’esistenza di due
mediatori (client e server stub) per poter funzionare
ƒ Devono essere scritti a mano?
ƒ Fortunatamente no: dal momento che si tratta di
codice molto ripetitivo si può automatizzarne la
creazione
ƒ Esistono dei linguaggi – di tipo dichiarativo - chiamati
IDL (Interface Definition Languages) che permettono
di definire le interfacce delle funzioni
ƒ Si utilizzano poi dei compilatori IDL che sulla base di
una descrizione IDL generano entrambi gli stub in un
linguaggio di alto livello (per esempio C)
ƒ Con un normale compilatore C si creano quindi il client
e il server stub
RPC – RMI - Web Services
11
Un esempio di sistema basato di IDL (DCE)
RPC – RMI - Web Services
12
RMI
ƒ RMI = Remote Method Invocation
ƒ I sistemi ad oggetti distribuiti si basano su RMI che
può essere considerata come un estensione object
oriented del meccanismo RPC
ƒ Un aspetto importante del modello OO è la netta
separazione fra interfaccia (quello che un oggetto sa
fare) e implementazione (come lo fa)
ƒ Le invocazioni di metodi provocano cambiamenti di
stato nell’oggetto mediati dall’interfaccia
ƒ In un sistema distribuito l’interfaccia di un oggetto
risiede su una macchina e l’implementazione risiede
su un’altra
RPC – RMI - Web Services
13
Schema di un sistema ad oggetti distribuiti
ƒ Proxy (o stub) = client stub
ƒ Skeleton = server stub
RPC – RMI - Web Services
14
Ancora su RMI
ƒ Viene creato localmente solo il riferimento ad un
oggetto remoto, che è effettivamente attivo su un host
distinto.
ƒ Un programma invoca i metodi attraverso questo
riferimento locale.
ƒ La struttura che si occupa di intercettare le
invocazioni dei metodi per trasmetterli (con i relativi
argomenti) all'oggetto sul server è denominata Object
Request Broker o ORB.
ƒ Le tipologie più diffuse di RMI sono:
ƒ CORBA (Common Object Request Broker
Architecture): standard aperto, multilinguaggio
ƒ DCOM (Distributed Component Object Model).
Microsoft, multilinguaggio
ƒ Java RMI: Sun, linguaggio Java
RPC – RMI - Web Services
15
Architettura Java RMI e livelli OSI
Applicazione
Presentazione
Sessione
Trasporto
ƒ Stub e skeleton implementano il livello di
presentazione
ƒ Il Remote Reference Layer (RRL)
implementa invece il livello di sessione
ƒ Il protocollo applicativo di trasporto,
basato su TCP/IP, si chiama IIOP (Internet
Inter Orb Protocol) e deriva da CORBA
RPC – RMI - Web Services
Rete
Datalink
Fisico
16
RMI e IDL
ƒ Anche per l’RMI si ricorre a linguaggi di descrizione
delle interfacce e ai relativi compilatori per la
creazione automatica di stub e skeleton
ƒ Gli IDL sono stati estesi in modo da comprendere
concetti object-oriented (interfacce, subtyping,
polimorfismo ecc.)
ƒ Esempio di IDL: un oggetto che restituisce data e ora:
module DateTimeApp
{
interface DateTime
{
string getDate();
string getTime();
long getMSecs();
};
};
RPC – RMI - Web Services
17