Invocazione remota. Coulouris, G., Dollimore, J., Kindberg, T., and Blair, G. Distributed Systems: Concepts and Design, fifth edition. Pearson, 2012.

Documenti analoghi
Alcune idee sui sistemi software e la loro architettura

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Fondamenti VBA. Che cos è VBA

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Introduzione alla programmazione Object Oriented. Luca Lista

Definizione di metodi

Definizione di metodi in Java

Algoritmi. Pagina 1 di 5

Broker. [POSA1] Pattern-Oriented Software Architecture, 1996

Introduzione alla programmazione. Walter Didimo

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Programmazione ad Oggetti

Il DOS diagramma di flusso. I comandi del DOS. I comandi: vista funzionale. Parametri. Opzioni. I comandi: sintassi

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

Gestione delle eccezioni in Java

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Reti di Calcolatori Servizi di Rete Laboratorio di Didattica in Rete

Indice. Introduzione Collegamento iniziale Identificazione della sede operativa (sede di lavoro) 5

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Sistemi Operativi (modulo di Informatica II) La comunicazione tra processi

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Architetture di rete. 4. Le applicazioni di rete

Processi, Threads e Agenti

Ingegneria del Software

Programmazione Orientata agli Oggetti in Linguaggio Java

Gestione Commissioni Esami

Procedura tecnica di accreditamento dei Registrar

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Architetture a oggetti distribuiti

Il Portale Documentale. Note Operative. Distribuzione Documenti on Line

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Manuale di Aggiornamento BOLLETTINO. Rel B. DATALOG Soluzioni Integrate a 32 Bit

Sommario. G. Piscitelli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Comunicazione fra oggetti distribuiti

Procedura operativa per la gestione della funzione di formazione classi prime

POLO REGIONALE DI FATTURAZIONE ELETTRONICA

Servizi di interscambio dati e cooperazione applicativa Guida alla gestione dei servizi web Mipaaf

EXCEL: FORMATTAZIONE E FORMULE

Manuale Operativo Gestione dei Ticket di assistenza 15 Marzo 2016

Linguaggio C: introduzione

L Automatic Control Telelab

Cosa è importante: pom.xml Goal Plug-in Repository

1 DESCRIZIONE DELLE FUNZIONI REGISTRAZIONE UTENZE INTERNET Caricamento utente internet (data entry)... 3

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

Valutazione e Controllo Fornitori

Manuale utente. Ministero delle Infrastrutture e dei Trasporti. GEIW_ManualeUtente_GestioneIstruttoria_UtenteImpresa-1.0.docx

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Unità Didattica 2 I Linguaggi di Programmazione

Java Remote Method Invocation

testo Saveris Web Access Software Istruzioni per l'uso

Introduzione alle macchine a stati (non definitivo)

Integrazione di rete di campo PROFIBUS in reti di fabbrica di tipo Ethernet

FUNZIONI DI BASE PANNELLO SMS

Modelli di programmazione parallela

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Concetti Introduttivi. Il Computer

VoipExperts.it - CISCO <=> AVAYA

Note_Batch_Application 04/02/2011

Supporto On Line Allegato FAQ

Lab 1: Java Multithreading

Mini-Corso di Informatica

Integrazione di rete di campo PROFIBUS in reti di fabbrica di tipo Ethernet

Avete capito fino in fondo il concetto di nodo fine flusso? Che differenza c e tra fine flusso e fine attività? MODEL DIFFERENCES AND EVOLUTION

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Il calcolatore. Architettura di un calcolatore (Hardware)

Fondamenti di Programmazione

Corso di Informatica

ANAGRAFE NAZIONALE CREDITI FORMATIVI. Manuale utente

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Linguaggi di alto livello, compilatori e interpreti

ACCESSO ALLA POSTA ELETTRONICA TRAMITE OUTLOOK WEB ACCESS

Modulo 17: Invio del BF tramite

Regole e modalità di utilizzo della PEC e della PEO istituzionale

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

Generalità sui protocolli Tecniche di multiplazione Tecniche di accesso Tecniche di commutazione

Laboratorio di Ricerca Operativa Cad Ingegneria Gestionale (BGER3 - I semestre) a.a Homework n 28. Docente: Laura Palagi

Guida semplice all utilizzo del sistema D-STAR Seconda Parte

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Guida alla gestione delle domande di Dote Scuola per l A.S per i Comuni

AUTOCAD: INTERFACCIA AUTOCAD: INTERFACCIA 2 AUTOCAD: INTERFACCIA. 2.1 premessa: ABBREVIAzIONI E ICONE 2.2 SCELTA DELL INTERFACCIA. ICONE Cmd Mnu.

Manuale utente Soggetto Promotore Erogatore Politiche Attive

La segreteria didattica dovrà eseguire semplici operazioni per effettuare lo scrutinio:

CORBA ( Common Object Request Broker Architecture ) Le specifiche più conosciute sono UML e CORBA

Introduzione ai connettori

POSTALIZZAZIONE Manuale d'uso del modulo di postalizzazione di RipartoIG

Internet Protocol Versione 4: instradamento e routing. Aspetti di forwarding e routing del protocollo IPv4

Specifiche tecniche e di formato Presentazione comunicazione unica per la nascita d impresa

Corso di Programmazione a oggetti

MUTA SERVIZIO SCIA Flussi logici per la consegna delle pratiche a valle della compilazione da parte del compilatore. A cura di: Elisabetta Sciacca

AnthericaCMS. Gestisci in autonomia i contenuti del tuo sito-web

Allocazione Dinamica della Memoria

SPORTELLO DIPENDENTE. - Personale amministrativo tecnico ausiliario (A.T.A.);

DISEGNO PROSPETTICO CAPITOLO 1 METODI DI RAPPRESENTAZIONE PER IL DISEGNO TECNICO: QUADRO GENERALE PROIEZIONI ORTOGRAFICHE PROIEZIONI ASSONOMETRICHE

SISTEMA DI CONTROLLO E GESTIONE STAZIONI DI RICARICA E-CORNER PER VEICOLI ELETTRICI

Firma digitale remota: procedura per il rinnovo del certificato

Manuale cliente finale portale accertamenti delibera 40

Alcatel-Lucent OpenTouch Connection per Microsoft Outlook

Introduzione a Java Remote Method Invocation (RMI)

Transcript:

Luca Cabibbo Architettura dei Sistemi Software dispensa asw430 marzo 2017 Knowing a failure has occurred is more important than the actual failure. K. Kjos 1 - Fonti Coulouris, G., Dollimore, J., Kindberg, T., and Blair, G. Distributed Systems: Concepts and Design, fifth edition. Pearson, 2012. Tanenbaum, A.S. and Van Steen, M. Distributed Systems: Principles and Paradigms, second edition. Pearson, 2007. Liu, M.L. Distributed Computing: Principles and Applications. Pearson, 2004. Chapter 7, Distributed Objects Chapter 8, Advanced RMI 2

- Obiettivi e argomenti Obiettivi introdurre l invocazione remota, nel contesto di RPC e di RMI discutere la semantica dell invocazione remota Argomenti introduzione all invocazione remota chiamata di procedure remote (RPC) invocazione di metodi remoti (RMI) semantica dell invocazione remota discussione 3 * Introduzione all invocazione remota L invocazione remota è una delle principali astrazioni di programmazione distribuita implementate dal middleware consente ad un componente di chiamare/invocare un operazione di un componente remoto affinché il componente remoto esegua l operazione richiesta questo paradigma di programmazione è implementato da molte soluzioni di middleware la chiamata di procedure remote (RPC) l invocazione di metodi remoti (RMI) è disponibile anche nelle tecnologie a componenti e a servizi anche se un invocazione remota può essere scritta nel codice in modo simile ad un invocazione locale, la semantica delle invocazioni remote è significativamente differente da quella delle invocazioni locali 4

* Chiamata di procedure remote (RPC) La chiamata di procedure remote (RPC, Remote Procedure Call) è un astrazione di programmazione distribuita fondamentale è una delle prime soluzioni di middleware realizzate un evoluzione di questa astrazione è comunque disponibile anche nelle soluzioni di middleware più moderne consente ad un componente di chiamare (ovvero, di invocare) una procedura (ovvero, un operazione) di un componente remoto affinché il componente remoto esegua l operazione richiesta è dunque di una modalità di comunicazione orientata alle azioni, ovvero all invocazione di operazioni remote si tratta di un astrazione distribuita dell invocazione di operazioni locali, che è presente in tutti i linguaggi di programmazione imperativi ma con una semantica differente 5 Remote Procedure Call RPC (Remote Procedure Call) In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in another address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. [Wikipedia, 2016] Attenzione, il fatto che sia scritto nello stesso modo non implica che funzioni nello stesso modo. 6

Una chiamata di procedura locale process A call Y(arg1, arg2) X Y return value 7 Una chiamata di procedura remota process A process B call Y(arg1, arg2) X Y return value 8

Una chiamata di procedura remota process A process B request call Y(arg1, arg2) X Y return value response 9 Paradigma dell RPC Una chiamata di procedura remota da un punto di vista sintattico, la procedura remota Y viene chiamata da X come se fosse una chiamata locale in realtà, la procedura Y vive in un processo diverso da quello di X in prima approssimazione, la modalità di esecuzione è basata su legame dei parametri esecuzione (remota) dell operazione/procedura chiamata restituzione del risultato l implementazione è basata su un protocollo richiesta-risposta 10

Realizzazione di RPC X stub skeleton Y call Y(...) marshalling send request request call Y(...) marshalling send replay unmarshalling local procedure call call Y(...) execute return value unmarshalling return value return value response 11 Realizzazione di RPC stub La comunicazione tra le due procedure X e Y avviene mediante un connettore realizzato come una coppia di moduli intermedi che si occupano degli aspetti della distribuzione il chiamante X fa una chiamata locale a una procedura locale (anch essa di nome Y) a un modulo (stub) che è un rappresentante locale della vera procedura Y del server remoto lo stub si occupa di effettuare la chiamata remota alla procedura remota Y effettua il marshalling dei parametri invia un messaggio di richiesta al server (ad es., tramite socket) inoltre lo stub riceverà il messaggio di risposta alla chiamata remota effettuerà l unmarshalling dei risultati restituirà questi risultati alla procedura chiamante X 12

Realizzazione di RPC skeleton In realtà, il messaggio inviato dallo stub non viene ricevuto direttamente dalla procedura remota Y piuttosto, il messaggio di richiesta viene ricevuto (ad es., tramite socket) da un modulo (skeleton) che è un rappresentante locale (lato server) della procedura chiamante lo skeleton si occupa di effettuare la chiamata alla procedura (per lui locale) Y effettua l unmarshalling della richiesta e dei parametri effettua la chiamata locale alla procedura Y e riceve i risultati della chiamata effettua il marshalling dei risultati invia un messaggio di risposta al client (ad es., tramite socket) 13 Realizzazione di RPC proxy Lo stub e lo skeleton sono intermediari nella comunicazione chiamati anche proxy proxy lato client e proxy lato server proxy è un design pattern un intermediario, rappresentante di un altro oggetto, di cui ha la stessa interfaccia un proxy [GoF] fornisce un surrogato o un segnaposto per un altro oggetto per controllarne l accesso l uso di stub e skeleton nasconde al programmatore il fatto che la comunicazione è distribuita della comunicazione distribuita (e dei suoi dettagli) si occupano i proxy 14

-RPC e IDL Un aspetto fondamentale della tecnologia RPC (e successive) è la generazione automatica di stub e skeleton basata su un opportuno linguaggio per la definizione di interfacce Interface Definition Language (IDL) realizzata da un opportuno compilatore d interfacce client code client process language specific call interface client stub development environment IDL service interface IDL compiler server process language specific call interface server skeleton server code 15 RPC e IDL Uso pragmatico e semplificato di RPC scrittura dell interfaccia del servizio tramite l IDL l interfaccia di un servizio remoto descrive: (i) quali sono le operazioni e (ii) quali sono i tipi usati dalle operazioni (per i parametri e i valori restituiti) la compilazione dell interfaccia produce sia codice lato client (stub) che codice lato server (skeleton) per le procedure del servizio completamento del codice lato server, vanno implementate le procedure del servizio inoltre, nello skeleton in opportuni segnaposti vanno chiamate queste procedure che implementano il servizio lato client, le chiamate alle procedure vanno rivolte allo stub il programma server va mandato in esecuzione sul server e il servizio va registrato presso il sistema operativo 16

- Semantica La chiamata di una procedura remota viene scritta, sintatticamente, allo stesso modo di una chiamata locale ma la semantica di una chiamata di procedura remota è la stessa di una chiamata locale? no, non può essere la stessa, poiché ci sono alcune differenze importanti tra chiamate remote e locali, tra cui le procedure sono eseguite in processi e spazi degli indirizzi differenti ci possono essere problemi di comunicazione tra i processi distribuiti bisogna gestire il legame dei parametri e dei risultati questi aspetti sono discussi più avanti 17 * Invocazione di metodi remoti (RMI) L invocazione di metodi remoti (RMI, Remote Method Invocation) è un estensione orientata agli oggetti della chiamata di procedure remote (RPC) RMI fornisce un servizio di comunicazione tra componenti distribuiti realizzati con tecnologie a oggetti e chiamati oggetti distribuiti (o oggetti remoti) ovvero, oggetti in esecuzione in processi separati in particolare, RMI consente ad un oggetto (nel ruolo di client) in esecuzione in un processo di invocare un metodo di un oggetto (nel ruolo di server) in esecuzione in un processo remoto più in generale, RMI sostiene un astrazione di programmazione distribuita sulla base di un modello ad oggetti distribuiti che estende il tradizionale modello ad oggetti ( locali ) offerto dai linguaggi di programmazione ad oggetti 18

- Modello a oggetti non distribuiti Ciascun oggetto incapsula stato e comportamento Gli oggetti risiedono solitamente in un singolo processo Ciascun oggetto implementa un interfaccia (definita implicitamente o esplicitamente) l interfaccia è una specifica delle operazioni che possono essere invocate Un oggetto può essere usato conoscendone il riferimento univoco univoco nel processo in cui vive l oggetto ad es., usato in un invocazione come destinatario i riferimenti agli oggetti sono di solito implementati come puntatori per questo, hanno significato solo nell ambito del processo in cui vive l oggetto referenziato 19 - Modello a oggetti distribuiti Ciascun oggetto incapsula stato e comportamento Oggetti locali e oggetti remoti gli oggetti locali sono visibili localmente a un processo gli oggetti remoti possono essere distribuiti in più processi Ciascun oggetto remoto implementa un interfaccia remota (definita esplicitamente) l interfaccia remota è una specifica delle operazioni che possono essere invocate remotamente A ciascun oggetto remoto viene assegnato un riferimento remoto che è univoco in rete un oggetto remoto può essere usato conoscendone il suo riferimento remoto ad es., per specificare il destinatario di un invocazione remota 20

Oggetti e metodi remoti e locali process A remote invocation B local C invocation local E invocation local invocation D remote invocation F host 21 Oggetti remoti e loro interfacce remoteobject Data remote interface m1 m2 implementation { m3 of methods m4 m5 m6 local interface 22

- Architettura di RMI object registry (broker) client object client proxy runtime support network support server object server proxy runtime support network support logical data path physical data path 23 Dinamica di RMI Un processo (server) può esportare uno o più oggetti distribuiti ciascun oggetto distribuito è di un tipo remoto definito da un interfaccia remota è identificato da un riferimento remoto univoco in rete RMI prevede la presenza di un object registry (o broker) è un servizio distribuito per gestire i riferimenti remoti degli oggetti distribuiti ad es., per consentire l accesso ad un oggetto remoto a partire da un identificatore simbolico gli oggetti distribuiti possono essere registrati presso l object registry Un processo (client) può consultare l object registry per ottenere un riferimento remoto ad un oggetto distribuito dopo di che, il client può interagire con l oggetto remoto effettuando delle invocazioni di metodi remoti 24

- Implementazione di RMI L implementazione di RMI richiede diversi oggetti e moduli object A client proxy for B Request server skeleton & dispatcher for B s class remote object B Reply Remote Communication reference module module Communication module Remote reference module alcuni moduli sono standard altri moduli o classi sono generati automaticamente da un compilatore di interfacce oppure sono virtuali sulla base di meccanismi di riflessione 25 Implementazione di RMI Proxy (proxy lato client) rappresentante locale di un oggetto remoto tramite il proxy, l oggetto client comunica logicamente con l oggetto server implementa l interfaccia remota per adattare e inoltrare le richieste all oggetto remoto e gestire le sue risposte ha lo scopo di nascondere gli aspetti della comunicazione fisica ad es., la posizione dell oggetto server (viene visto dal client mediante il proxy), marshalling dei dati e unmarshalling dei risultati, invio e ricezione di messaggi in pratica, questo proxy delega gran parte del lavoro al modulo di comunicazione 26

Implementazione di RMI Moduli di comunicazione il protocollo richiesta-risposta viene eseguito da una coppia di moduli di comunicazione cooperanti per scambiarsi messaggi richiesta e messaggi risposta i due moduli di comunicazione hanno un ruolo fondamentale nella definizione della semantica per l invocazione di metodi remoti discussa più avanti questi moduli implementano di solito una semantica at most once (descritta dopo) Modulo dei riferimenti remoti responsabile delle corrispondenze tra riferimenti locali e remoti e della creazione di riferimenti remoti tavola degli oggetti remoti elenco degli oggetti remoti offerti elenco dei proxy conosciuti 27 Implementazione di RMI Dispatcher il server ha un dispatcher per ogni classe di oggetto remoto il dispatcher riceve messaggi richiesta dal modulo di comunicazione seleziona l operazione da eseguire ne delega la gestione allo skeleton Skeleton (proxy lato server) proxy del client nel lato server il server ha uno skeleton per ogni classe di oggetto remoto implementa metodi corrispondenti a quelli dell interfaccia remota ha lo scopo di estrarre i parametri dal messaggio richiesta e invocare il metodo corrispondente nell oggetto remoto poi aspetta il risultato dell esecuzione del metodo, e quindi costruisce e invia il messaggio risposta 28

Implementazione di RMI Compilatore di interfacce responsabile della generazione delle classi per i proxy sia per lo stub che per dispatcher e skeleton a partire dall interfaccia del servizio Object registry (o broker) gestisce le corrispondenze tra nomi simbolici (stringhe) e riferimenti remoti consente ai client di ottenere riferimenti a oggetti remoti 29 -RPC e RMI La tecnologie RMI è una variante della tecnologia RPC entrambe offrono un astrazione di programmazione distribuita di invocazione remota RPC adotta un modello procedurale semplice, mentre RMI adotta un modello ad oggetti RMI assume la presenza di più oggetti remoti, distribuiti in rete questo richiede l uso di un elemento aggiuntivo (un object registry o un broker) per selezionare l oggetto remoto con cui interagire per il resto, le due tecnologie sono simili, poiché sono entrambe basate su un paradigma di comunicazione distribuita analogo per l invocazione di operazioni remote nel resto di questa dispensa, ci concentreremo sulla semantica dell invocazione di operazioni remote trascurando le differenze tra procedure e metodi e tra RPC e RMI 30

* Semantica dell invocazione remota Nell ambito di un sistema distribuito, consideriamo un client C che effettua un invocazione remota di un operazione O di un servizio S a causa di questa invocazione, nel sistema distribuito vengono scambiati messaggi in rete e vengono svolte alcune attività (tra cui, forse, l esecuzione dell operazione O) alla fine, ci sono due possibilità per il client C C riceve un risultato oppure la segnalazione di un eccezione funzionale (la consideriamo la stessa cosa) oppure, C riceve la segnalazione di un eccezione remota a fronte di queste conclusioni, che cosa può capire C di quanto è effettivamente successo nel sistema? la semantica dell invocazione remota ha a che fare appunto con ciò che succede a causa di un invocazione remota in particolare, la semantica dell invocazione remota è differente da quella dell invocazione locale, per diversi motivi 31 Semantica dell invocazione remota Nei sistemi distribuiti si possono verificare diversi fallimenti nella comunicazione in particolare ci possono essere messaggi persi o tramessi male messaggi trasmessi più volte messaggi trasmessi fuori ordine Noi qui consideriamo la possibilità di perdere messaggi la realizzazione del protocollo richiesta-risposta per gestire l invocazione remota deve considerare e gestire la possibilità di perdere i messaggi di richiesta e/o i messaggi di risposta sono possibili diverse opzioni per la gestione della perdita di richieste e/o di risposte ripetizione del messaggio di richiesta lato client filtraggio di richieste duplicate lato server ritrasmissione di risposte lato server 32

Semantica dell invocazione remota Il protocollo richiesta-risposta può essere implementato in modi diversi in particolare, usando (oppure non usando) le seguenti opzioni ciascuna opzione richiede anche le precedenti ripetizione del messaggio di richiesta lato client fino a quando non arriva una risposta o comunque per un numero massimo di volte filtraggio di richieste duplicate lato server il client assegna un identificatore alle proprie richieste il server mantiene una storia delle richieste ritrasmissione di risposte lato server il server mantiene una storia delle richieste e delle risposte 33 Semantica dell invocazione remota L uso combinato di queste opzioni dà luogo a un ventaglio di semantiche differenti per l invocazione di operazioni remoti maybe non ripetere richieste at least once ripeti richieste, non filtrare duplicati, riesegui l operazione at most once ripeti richieste, filtra duplicati, non rieseguire l operazione, ritrasmetti risposte Queste semantiche sono differenti tra loro infatti, nei tre casi, il client di un operazione remota può capire cose differenti quando gli viene restituito il controllo con la restituzione di un risultato o con la segnalazione di un eccezione remota 34

Semantica dell invocazione remota Possibili semantiche per l invocazione remota maybe non ripetere richieste se il client riceve un risultato vuol dire che l operazione è stata eseguita una sola volta se invece il client riceve la segnalazione di un eccezione remota vuol dire o che l operazione non è stata mai eseguita oppure che è stata eseguita (ma solo una volta) è un opzione per Corba at least once ripeti richieste, non filtrare duplicati, riesegui l operazione at most once ripeti richieste, filtra duplicati, non rieseguire l operazione, ritrasmetti risposte La semantica dell invocazione locale è invece exactly once 35 Semantica dell invocazione remota Possibili semantiche per l invocazione remota maybe non ripetere richieste at least once ripeti richieste, non filtrare duplicati, riesegui l operazione se il client riceve un risultato vuol dire che l operazione è stata eseguita una volta oppure anche più volte se invece il client riceve la segnalazione di un eccezione remota vuol dire che l operazione è stata eseguita una volta o anche più volte, oppure che l operazione non è stata mai eseguita at most once ripeti richieste, filtra duplicati, non rieseguire l operazione, ritrasmetti risposte La semantica dell invocazione locale è invece exactly once 36

Semantica dell invocazione remota Possibili semantiche per l invocazione remota maybe non ripetere richieste at least once ripeti richieste, non filtrare duplicati, riesegui l operazione at most once ripeti richieste, filtra duplicati, non rieseguire l operazione, ritrasmetti risposte se il client riceve un risultato vuol dire che l operazione è stata eseguita esattamente una volta se invece il client riceve la segnalazione di un eccezione remota vuol dire o che l operazione è stata mai eseguita oppure che è stata eseguita (ma solo una volta) è la semantica di default per Java RMI e Corba La semantica dell invocazione locale è invece exactly once 37 Semantica dell invocazione remota Possibili semantiche per l invocazione remota maybe non ripetere richieste at least once ripeti richieste, non filtrare duplicati, riesegui l operazione at most once ripeti richieste, filtra duplicati, non rieseguire l operazione, ritrasmetti risposte La semantica dell invocazione locale è invece exactly once l operazione viene eseguita esattamente una volta un invocazione può terminare solo con la restituzione di un risultato non è possibile nessuna eccezione remota Si noti che nessuna delle tre semantiche per l invocazione remota corrisponde alla semantica exactly once dell invocazione locale 38

Discussione Dunque, ci sono tre possibili semantiche per l invocazione remota queste semantiche differiscono tra loro per ciò che è in grado di capire il client di un operazione quando il client riceve un risultato oppure la segnalazione di un eccezione funzionale (la consideriamo la stessa cosa) oppure il client riceve la segnalazione di un eccezione remota nessuna di queste tre semantiche dell invocazione remota corrisponde alla semantica exactly once dell invocazione locale 39 - Prestazioni Un altra differenza tra le invocazioni remote e le invocazioni locali è relativa ai tempi di comunicazione il protocollo richiesta-risposta introduce un overhead nella comunicazione remota per lo scambio dei messaggi di richiesta e di risposta per le attività di marshalling e unmarshalling per minimizzare la penalizzazione imposta dalle invocazioni remote, in genere si cerca di minimizzare il numero di invocazioni remote di solito definendo operazione remote con una granularità abbastanza grossa 40

- Concorrenza Le operazioni remote possono essere eseguite in modo concorrente tra loro l esecuzione di un operazione remota avviene di solito in un popup thread distinto del componente remoto diversamente dall esecuzione di un operazione locale, che avviene nello stesso thread del chiamante l esecuzione di un operazione remota viene di solito gestita in uno stack dedicato alla chiamata remota diversamente dall esecuzione di un operazione locale, che avviene nello stesso stack del chiamante è possibile l esecuzione concorrente di operazioni remote attenzione, è anche possibile che operazioni eseguite in modo concorrente accedano a risorse condivise tra le diverse esecuzioni nel caso, la possibile concorrenza va gestita in modo opportuno 41 - Invocazione asincrona e callback Un invocazione remota può avere una latenza alta soprattutto se l operazione invocata può avere un durata lunga per questo, sono state definite alcune varianti dell invocazione remota invocazione asincrona il chiamante effettua una chiamata non bloccante dell operazione remota la chiamata restituisce immediatamente un oggetto (chiamato promise oppure future) con cui il chiamante potrà poi accedere al risultato (o all esito) dell operazione invocazione sincrona differita il chiamante effettua una prima chiamata dell operazione remota il server restituisce solo una conferma (ack) il chiamante, successivamente, effettua una seconda chiamata per accedere al risultato (o all esito) dell operazione 42

Invocazione asincrona e callback Un invocazione remota può avere una latenza alta soprattutto se l operazione invocata può avere un durata lunga per questo, sono state definite alcune varianti dell invocazione remota callback il chiamante, al momento dell invocazione remota (asincrona), specifica un operazione (chiamata callback) che l oggetto remoto dovrà invocare per comunicare il risultato (o l esito) dell operazione 43 - Legame dei parametri L invocazione di operazioni remote è di solito basata su un meccanismo di legame dei parametri per valore-risultato in cui, in un operazione, si fa distinzione tra parametri di input (in) e risultati/parametri di output (out) Esempio: calcola le radici di un equazione di secondo grado intestazione dell operazione (omettendo i tipi) calcolaradici(in a, in b, in c, out x1, out x2) invocazione dell operazione calcolaradici(1, 4, 2, radice1, radice2) In alcuni linguaggi (come Java), questo tipo di legame è disponibile in una versione limitata con un solo risultato, legato mediante un assegnazione double sqrt(double x) r = sqrt(125) 44

Legame dei parametri per valore-risultato Legame dei parametri per valore-risultato al momento dell invocazione dell operazione, vengono legati i parametri di input i parametri attuali di input (lato client) sono valori questi valori sono usati come valori iniziali per i parametri formali (lato server), che sono variabili quando termina l esecuzione dell operazione, vengono legati i risultati ovvero, i parametri di output i risultati di output (lato server) sono valori questi valori sono usati come valori da assegnare ai parametri attuali di output (lato client), che sono (devono essere) variabili 45 Legame di dati strutturati e oggetti Una differenza importante tra la semantica dell invocazione remota e quella dell invocazione locale è come avviene il legame di dati strutturati come oggetti o record in un invocazione locale, quando un parametro (o un risultato) è un oggetto (o un record, passato per riferimento), allora il valore che viene passato come parametro attuale è un riferimento all oggetto questo ha senso perché i riferimenti (che di solito sono implementati come puntatori) hanno significato nell ambito di un singolo processo inoltre, il passaggio di un riferimento rende possibile effetti collaterali sugli oggetti passati come parametri ovvero, il chiamato può modificare l oggetto passato come parametro, e il chiamante può osservare questa modifica oppure, il chiamante può modificare l oggetto che gli è stato restituito, e il chiamato potrà osservare questa modifica 46

Legame di dati strutturati e oggetti Una differenza importante tra la semantica dell invocazione remota e quella dell invocazione locale è come avviene il legame di dati strutturati come oggetti o record in un invocazione remota, invece, quando un parametro (o un risultato) è un oggetto (o un record), allora il valore che viene passato come parametro attuale è in genere una rappresentazione serializzata dello stato dell oggetto quella che viene passata è una copia dell oggetto, che l operazione remota ottiene deserializzando la rappresentazione ricevuta il passaggio di una rappresentazione serializzata disabilita la possibilità di avere effetti collaterali sugli oggetti passati come parametri (o restituiti come risultati) poiché l operazione remota opera solo su una copia dell oggetto passato come parametro, eventuali modifiche applicate a questa copia non comportano una modifica diretta dell oggetto originale 47 Serializzazione Serialization In computer science, serialization is the process of translating a data structure or an object state into a format that can be stored (for example, in a file) or transmitted across a network connection link and reconstructed later in the same or another computer environment. When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. [Wikipedia, 2016] 48

Legame di dati strutturati e oggetti Un parametro che è un oggetto viene legato per valore il valore è una rappresentazione serializzata dell oggetto questa rappresentazione viene trasmessa e poi ricostruita nel processo remoto alpha(value-object) { type : asw.model.employee, id : 410, firstname : John, lastname : Smith, dept : call alpha( ) } { } type : asw.model.department, id : 992, name : DIA 49 Legame di riferimenti remoti In effetti, in RMI, un oggetto remoto ovvero, di un tipo remoto può anche essere legato per riferimento remoto beta(remote-object) call beta( ) remote reference to remote-object in questo caso, l operazione remota potrà effettuare a sua volta delle invocazioni remote sull oggetto remoto passato come parametro sono possibili effetti collaterali in modo analogo a quanto avviene nelle invocazioni locali attenzione però alla proliferazione delle invocazioni remote che possono avere conseguenze negative sulle prestazioni 50 Oggetti distribuiti e invocazione remota

* Discussione L invocazione remota è un astrazione di programmazione distribuita fondamentale i componenti distribuiti interagiscono mediante l invocazione di operazioni remote (procedure o metodi remoti) le invocazioni remote sono codificate sintatticamente in modo simile a quelle locali ma la loro semantica è differente, per vari motivi per il modo in cui vengono gestiti possibili fallimenti nella comunicazione remota per il tempo richiesto dalla gestione di una chiamata per la concorrenza e l eventuale asincronia delle chiamate remote per come viene effettuato il legame dei parametri e per gli effetti collaterali che si possono verificare (o non verificare) per aspetti legati alla sicurezza 51