Sistemi distribuiti: Caratteristiche e tipologie di comunicazione tra processi

Sistemi distribuiti: Caratteristiche e tipologie di comunicazione tra processi

Caratteristiche della comunicazione tra processi

Per comunicazione si intende la comunicazione fra processi appartenenti alle differenti macchine di cui è composto un sistema distribuito.
Tale comunicazione avviene adoperando un sistema di scambio di “messaggi” piuttosto che mediante l’utilizzo di chiamate a funzioni primitive come avviene nei sistemi NON distribuiti: non è possibile adoperare quest’ultima soluzione per l’effettiva mancanza di un canale di memoria condiviso (es. RAM). L’impiego dei messaggi per la comunicazione fra processi è quindi strettamente connesso alla tipologia/protocollo di rete sulla quale poggia il sistema distribuito.
Appare evidente, quindi, la difficoltà con cui si realizzi l’obiettivo proposto nel capitolo: i sistemi distribuiti, infatti, sono composti da svariati milioni di processi “sparpagliati” nella rete Internet che, di per sé, è una rete “best effort” quindi non affidabile.
In altre parole, il concetto di comunicazione nei sistemi NON distribuiti si riferisce all’utilizzo di un’area di memoria condivisa. Mnetre, nei sistemi distribuiti invece la comunicazione avviene mediante scambio di messaggi a basso livello, attraverso la rete.

Tipi di comunicazione

La comunicazione può essere:
1. persistente -> il messaggio viene memorizzato a prescindere dall’attività o passività dei processi mittente e destinatario
2. transiente -> il messaggio è in memoria solo nel periodo in cui mittente e destinatario sono attivi
La comunicazione può essere:
1. sincrona -> il mittente si blocca finché il destinatario non ha ricevuto il messaggio
2. asincrona -> il mittente invia il messaggio e continua l’elaborazione
La comunicazione può essere:
1. discreta -> ogni messaggio costituisce indipendentemente dagli altri un’informazione completa
2. a stream -> una serie di messaggi vengono trasmessi in un piccolo intervallo temporale

Combinazioni possibili

Persistente – Sincrona -> transazioni
Persistente – Asincrona -> posta elettronica
Transiente – Sincrona -> RPC
Transiente – Asincrona -> UDP

Programmazione delle applicazioni di rete

Un programmatore, di fronte allo scopo di implementare un’applicazione di rete, ha due possibilità:
1. la programmazione di rete esplicita, ovvero l’implementazione di chiamate dirette all’API socket per lo scambio esplicito dei messaggi (difficile da implementare)
2. la programmazione di rete implicita -> RPC e RMI

L’RPC o chiamata a procedura remota, associata all’idea di un’architettura client server, produce come risultato un sistema di comunicazione basata sui messaggi request (RPC) \ response (result of RPC).

Requisiti implementativi di una RPC

Il compito di un middleware RPC sono:
1. gestire lo scambio dei messaggi -> ciascun messaggio deve essere identificabile come richiesta o risposta; inoltre, ogni messaggio deve essere caratterizzato da un identificativo univoco;
2. gestire l’eterogeneità dei dati scambiati -> si può ottenere applicando il marshalling – unmarshalling dei dati; oppure si possono serializzare
3. gestire errori di distribuzione

RPC sincrone e asincrone

In modalità sincrona, una chiamata RPC provoca il blocco del client, in attesa della ricezione del risultato. Al contrario in modalità asincrona, il client, dopo aver spedito il messaggio, continua l’elaborazione di altri job.
Se la RPC deve produrre un risultato, si può vedere quest’ultima come una combinazione di due RPC asincrone:
– una RPC asincrona che avvia l’operazione sul server, ad opera del client
– una RPC asincrona che invia i dati di risposta al client, ad opera del server
N.B. Se il client riprende l’esecuzione senza aspettare l’ack di avvenuta ricezione dal server, si dice che la RPC è a senso unico.

Precedente Sistemi distribuiti: La tecnica della migrazione del codice Successivo Sistemi distribuiti: Il ruolo e le tipologie di Naming

Lascia un commento

*