CdL MAGISTRALE in INFORMATICA
A.A. 2014-2015
corso di “Sistemi Distribuiti”
5. IPC (Inter Process Communication) (parte 2):
comunicazione M.O., pub_sub, sincronizzazione
e multicasting
Prof. S.Pizzutilo
InterProcess Communication (IPC)
Modelli e tecnologie per la comunicazione e la sincronizzazione
fra processi:
I tipi di comunicazione:
• 
• 
Comunicazione discreta (es. socket) e a flussi (streaming)
Comunicazione diretta (es. client/server) e indiretta (es.multicast)
Le forme ed i modelli della comunicazione :
Ø Sistema di comunicazione basato sui messaggi ( MOM = Message Oriented
Middleware).
Ø La sincronizzazione.
Ø Comunicazione Multicast.
Ø Chiamata a procedura remota (es. RPC) e la comunicazione tra oggetti (es. RMI).
CdL in Informatica- Magistrale
Università di Bari
Sistemi Distribuiti
1
Comunicazione orientata ai
messaggi
Per risolvere i problemi relativi alla natura prevalentemente sincrona dell’ IPC, si ricorre a
soluzioni basate sulla comunicazione basata sullo scambio di messaggi (conservati o meno
in code).
Problemi relativi alla persistenza ed alla sincronizzazione
nella comunicazione
Architettura di un MessageQueuing System (1)
Relazione tra indirizzamento a livello di sender e receiver (ad
es. DNS per localizzare server e-mail su Internet)
Rif.: A.Tanenbaum,M.Van Steen “Sistemi distribuiti” Pearson
Prentice Hall 2007 )
CdL in Informatica- Magistrale
Università di Bari - Sistemi Distribuiti -
2
Architettura di un MessageQueuing System (2)
Ad es. l’organizzazione generale di un sistema message-queuing (ad es:
router, reti overlay,…).
2-29
Rif.: A.Tanenbaum,M.Van Steen “Sistemi distribuiti” Pearson
Prentice Hall 2007 )
CdL in Informatica- Magistrale
Università di Bari
Sistemi Distribuiti
Architettura di un
Message-Queuing System (3):
Il Message Broker
Organizzazione generale di un sistema message-queuing mediante broker.
(ad es. : sistemi publish/subscribe)
Rif.: A.Tanenbaum,M.Van Steen “Sistemi distribuiti” Pearson
Prentice Hall 2007 )
CdL in Informatica- Magistrale
Università di Bari
Sistemi Distribuiti
3
Altre forme di comunicazione con sincronia
virtuale
o  Message queueing: modello point to point o point to many
o  Publish/Subscribe: modello many to many
Il Message Oriented Middleware (MOM) è caratterizzato da funzionalità di :
ü  publish/subscribe topic-based,
ü  message queueing.
ü  Servizio di message storing e tipizzazione dei messaggi,
ü  Interfacce e strutture dati a supporto dello scambio di informazioni su file
multimediali, come musica e film,
ü  Gestione automatica del salvataggio dei messaggi,
ü  Supporto per la comunicazione sincrona e asincrona,
ü  Implementazione schema di comunicazione point-to-point e point-to-many per quanto
riguarda il message queueing,
ü  Tecnica di replicazione hot stand by,
ü  Invio e ricezione dei messaggi con semantica at-most-once e once-and-only-once.
Applicazioni P2P
Il Peer to Peer è una forma di comunicazione nella quale non vi è distinzione
tra chi genera informazioni (il server) e chi ne usufruisce (il client) .
Questa forma di comunicazione è fondamentale nei Sistemi Distribuiti.
Ad es. :
il WEB è P2P ?
Facebook è P2P ?
E-mail è una applicazione P2P ?
Bit Torrent è P2P ?
Un WEB service è P2P ?
Il P2P è realizzato attraverso tecniche di multicasting, publish/subscribe e
overlay network.
4
Altre forme di comunicazione
sincronizzata
Publish/subscribe (pub/sub)
è un paradigma di messaging asincrono nel quale i mittenti (sender o publisher)
non indirizzano messaggi a specifici destinatari (receiver o subscriber), bensì ad
un data manager.
Quest’ultimo, utilizzando tecniche di message queuing, può organizzare i
messaggi ricevuti in code “tematiche” (di interesse) o “classi” diverse.
I destinatari (subscriber) accedono solo alla parte di messaggi pubblicati di loro
interesse attraverso un processo di filtering che può essere topic-based o
content-based.
In alcuni sistemi i messaggi vengono gestiti da un intermediary broker che svolge
la funzione di store-and-forward tra publisher e subscriber.
Il Content-based filtering viene svolto dallo subscriber, prima che i messaggi
vengano passati alla applicazione.
Esempi di sistemi di content filtering: WEB services ( SOA), CORBA, SCRIBE, TERA,
GRYPHON, JEDI, IBM WebShere MQ,….
MOM Publish/Subscribe
Tratto da : Andrea Antonio Garganico
Implementazione MOM basata sul paradigma “Publish/Subscribe” e
“Message Queueing”
Ø A u t h o r i n g s e r v i c e :
fornisce funzionalità di
autenticazione al
sistema.
Ø D iscovery service: si
occupa della gestione
nomi dei servizi.
Ø  P u b l i s h - S u b s c r i b e
subsytem: implementa le
funzionalità definite dal
modello P/S.
Ø M e s s a g e Q u e u e i n g :
implementa le
funzionalità definite dal
modello MQ.
Ø Data Manager: si occupa
della gestione dei dati.
Fornisce interfacce di
accesso trasparenti al
s i s t e m a d i
memorizzazione delle
informazioni.
5
La sincronizzazione nella
comunicazione
In un sistema distribuito il tema della sincronizzazione delle comunicazioni tra
processi su macchine remote è centrale per consentire la cooperazione
necessaria alla computazione distribuita.
Sincronismo = «Contemporaneità di
svolgimento di azioni e fatti diversi»
La sincronizzazione riguarda quindi il problema
dell’ordinamento temporale delle operazioni , per
cui il concetto di «tempo», in particolare nei sistemi
distribuiti (ma non solo), è centrale per risolvere i
potenziali conflitti che sorgono nella computazione
parallela e concorrente utilizzando componenti HW/
SW diversi.
Alcuni conflitti si possono risolvere garantendo la mutua esclusione, il tipo più semplice
di sincronizzazione. Per evitare altri tipi di conflitti, in particolare nei sistemi distribuiti,
sono però necessarie forme più complesse di sincronizzazione basate essenzialmente in
tecniche per concordare il clock (orologio fisico) dei diversi sistemi o per ordinare gli
eventi (orologio logico) dei diversi componenti di un sistema distribuito.
Il clock (orologio fisico) per la
sincronizzazione dei processi in un
sistema distribuito
Network
Algoritmi di tipo:
“master-slave”
“gossiping”
Un processo master invia il proprio valore di clock ai suoi slave che aggiornano il
proprio clock.
Ogni processo invia il proprio valore di clock a tutti, in modo che ciascun processo
possa ridurre lo scostamento del proprio clock da quello degli altri.
Sincronizzazione del clock del sistema distribuito mediante un Time
Service
6
Il Time Service per la sincronizzazione
Il tempo viene calcolato sulla base dell’ UTC= Coordinated Universal Time =
orario di riferimento per tutti i fusi orari terrestri, calcolato con orologi atomici
(che calcolano il secondo come un numero di circa 9 miliardi di transizioni del
cesio 133).
Centralizzato : servizio implementato su un solo server (dotato di ricevitore
UTC) che eroga ai diversi sistemi il suo clock.
- Algoritmo di Cristian (1989) Request-driven
- Algoritmo di Berkeley Broadcast.based (1989)
Distribuito : L'UTC è distribuito dinamicamente attraverso Internet .
- Algoritmo Network Time Protocol.
mr
Algoritmo di Cristian
m
p
t
Time server,S
Algoritmo di Berkeley
1.  Il Master è attivo e chiede in broadcast a tutti gli slave il loro valore di clock (mt).
2.  Il master effettua la differenza d tra il suo valore di clock e quelli ricevuti dagli slave
corretti con RTT. Il Round Trip Time (RTT) è il tempo impiegato da un pacchetto
per viaggiare da un computer ad un altro e tornare indietro.
3. Calcola la media M delle differenze dei clock.
4. Invia agli slave il valore calcolato (M) per correggere i clock degli slave.
p3
M1
p1
m
p2
mt3
M3
t2
m
t1
Time server,S
M
2
7
NTP (Network Time Protocol)
E’ un protocollo per sincronizzare i clock dei computer all'interno di una rete a
commutazione di pacchetto, quindi con tempi di latenza variabili.
1
2
- B (server allo
strato 2) chiede ad
A (server allo strato
1) il suo clock.
- B calcola l’RTT e
sulla base di tale
stima corregge il suo
clock .
- Questo processo si
ripete tra i server di
ogni strato.
- Sulla base della
stima migliore dei
clock è possibile che
un server possa
cambiare strato.
2
3
3
I diversi server NTP sono organizzati in
una struttura gerarchica a "strati", dove
lo strato 1 è sincronizzato con UTC.
3
Server B
Ti-2
T i-1
m
Server A
Un server si sincronizza
confrontando il suo orologio con
quello di diversi altri server di
strato superiore.
Time
m'
Ti- 3
Time
Ti
Orologi logici : il Timestamping
Nei sistemi distribuiti asincroni la infrastruttura di comunicazione, non consente la
sincronizzazione in tempo reale dei clock fisici dei nodi .
In tal caso si usa la tecnica del TIMESTAMP, ovvero di un valore intero che si associa
alla generazione degli eventi all’interno di ciascun processo e che viene quindi
scambiato tra i processi comunicanti, al fine di assicurare diverse forme di
sincronizzazione.
Timestamps Ti
1
p1
e11
e 21
e 22
1
3
p2
p3
e 21
2
e1
2
e 12
e 23
e 21
e 23
4
e2
2
e11
2
1
5
e 13
e 23
e 13
concorrenti
8
Timestamping scalare
Per associare un valore di timestamp agli eventi di un sistema distribuito si usa
l’algoritmo di Lamport , che basa la sincronizzazione sulla relazione di
precedenza tra gli eventi.
Ogni processo Pi mantiene e gestisce un contatore Ci inizializzato a 0 ed aggiornato
secondo il seguente algoritmo:
1) 
Quando Pi processa un evento (ei), incrementa il contatore Ci ed associa all’evento
stesso un timestamp Tk con lo stesso valore di Ci (eki )
2) 
Quando Pi invia un messaggio, associa al messaggio inviato il valore di Tk calcolato
con la regola 1) ;
3) 
Quando Pi riceve un messaggio ( con associato un valore Tk ) , esso pone Ci = max
(Ci , Tk ) e quindi esegue l’evento (eki) di ricezione applicando sempre la regola 1).
1
p1
2
e11
e2
1
1
p2
e1
2
1
4
3
e3
e4
2
2
p3
e 13
Se C(a)<C(b) non è
detto che “a”
preceda
temporalmente “b”
2
5
e 23
e 53
Timestamping vettoriale
Per associare un vettore V(i) di timestamp agli eventi di un sistema distribuito si
usa l’algoritmo di Mattern (1988)
Ogni processo Pi mantiene e gestisce un contatore Ci inizializzato a 0 ed aggiornato
secondo il seguente algoritmo:
1) Quando Pi processa un evento, incrementa il contatore Ci ed associa all’evento
stesso un timestamp Tk con lo stesso valore di Ci, che inserisce nel vettore V(i)
2) Quando Pi invia un messaggio, associa al messaggio inviato il valore di Tk calcolato
con la regola 1) ;
3) Quando Pi riceve un messaggio ( con associato un valore Tk) , esso pone in V(i) =
max (Ci , Tk) e quindi esegue l’evento di ricezione applicando sempre la regola 1) .
(1,0,0) (2,0,0)
p1
e11
m1
(2,1,0)
p2
p3
e 21
e1
(0,0,1)
e 13
2
(2,2,0)
e 22
time
m2
(2,2,2)
e 23
(2,2,3)
e 33
9
La comunicazione multicast
E’ uno schema di comunicazione asincrono con un singolo mittente ed un
insieme (>1) di riceventi (gruppo).
La broadcast communication è un caso particolare della multicast, in cui il
messaggio è spedito a tutti i processori connessi alla rete.
L’atomic multicast è una tecnica di trasmissione multicast ad un gruppo che gode
della proprietà che un messaggio è ricevuto da almeno un membro del gruppo cui
il messaggio è stato inviato oppure da nessuno.
Il multicast atomico gestisce la comunicazione tra coppie di processi mediante un
ordinamento casuale o FIFO: i messaggi spediti da un client ad un particolare server
sono consegnati (dal kernel al processo ricevente) nello stesso ordine in cui sono stati
spediti o ricevuti.
Affidabilità del multicast :
  affidabilità 0 (nessuna risposta)
  affidabilità 1 (almeno 1 risposta)
  affidabilità M su N (M risposte.su N nodi)
  affidabilità completa (risposta da N nodi)
Multicast buffered e unbuffered
Il multicast è un meccanismo di comunicazione asincrono. Infatti il send multicast
non può essere sincrono perché:
•  è irrealistico aspettarsi che un send in multicast possa bloccare il sender finchè il
messaggio non sia stato ricevuto da tutti i membri del gruppo,
•  il processo sender potrebbe non avere la consapevolezza della ricezione del
messaggio da parte di tutti i membri del gruppo.
Il multicast può prevedere che il messaggio inviato venga conservato in un buffer
dei processi riceventi, così da garantire che tutti i membri del gruppo possano
ricevere il messaggio.
Ahamad e Bernstein (1985) descrissero due fondamentali tipi di semantica della
comunicazione multicast :
send-to-all : una copia del messaggio viene inviato a ciascun processo del gruppo e il
messaggio viene bufferizzato finchè non viene accettato dal processo.
bullettin-board : il messaggio viene indirizzato ad un canale anziché essere spedito a
ciascun processo del gruppo. Dal punto di vista logico il canale corrisponde ad un
bulletin board . I processi riceventi copiano il messaggio dal canale (e non lo
cancellano)
10
Una coda per conservare i messaggi
multicast
Message
processing
deliver
Hold-back
queue
Delivery queue
When delivery
guarantees are
met
Incoming
messages
Comunicazione molti a molti
Nel caso di comunicazione di molti a molti la sincronizzazione dei
messaggi (l’ordinamento dei messaggi in ricezione) non è banale.
X
m
Y
No ordering
message delivery
m2
1
m
Z
m
1
2
A
t1
t2
t3
t4
t5
t6
t3
11
Absolute Ordering
t1
Questa semantica assicura che tutti i messaggi
vengano ricevuti nell’esatto ordine con cui
sono stati spediti. Un metodo che si utilizza
per ottenere questa proprietà è la tecnica del
“timestamp” come identificatore del
messaggio.Si assume che il sistema abbia un
clock sincronizzato su ciascuna macchina.
Quando viene spedito il messaggio il valore
del clock (timestamp) viene preso come
identificatore del messaggio . Il kernel che
riceve il messaggio riceve quindi anche il suo
timestamp e provvede ad inviare i messaggi ai
riceventi secondo il valore del timestamp.
X
m
Y
m2
1
m
Z
1
m
2
A
t2
Consistent Ordering
Questa semantica richiede un orologio globale
sincronizzato ed assicura che i messaggi vengano ricevuti
dai processi riceventi tutti nello stesso ordine,
indipendentemente dall’ordine con cui sono stati inviati.
Un metodo per realizzare questa semantica prevede che il
kernel delle macchine invianti mandino i messaggi ad un
singolo ricevente ( sequenziatore) che assegna un numero
sequenziale a ciascun messaggio e provvede quindi alla
loro spedizione. Il kernel delle macchine riceventi salva i
messaggi in code separate ed invia immediatamente i
messaggi con numero sequenziale corretto. In caso
contrario aspetta che arrivi il messaggio con il numero
successivo prima di spedire.
(ABCAST protocol del sistema ISIS - Birman 1991)
t1
X
m1
m
2
Y
m
Z
m
1
2
A
t2
Causal ordering
p1
m1
p3
m3
p4
m1
p5
m2
m2
m3
m1
p2
Questa forma di ordinamento assicura che se
un evento inviante un messaggio è correlato
(relazione di causalità) con un evento di
sending di un altro messaggio, i due messaggi
sono consegnati a tutti i riceventi nell’ordine
corretto (m1-m3).
Altrimenti, se gli eventi di invio non sono
correlati, i messaggi possono essere ricevuti
in un ordine qualsiasi (m2).
(CBCAST protocol del sistema ISIS - Birman
1991)
12
…ancora sulla comunicazione multicast
  Nei sistemi distribuiti il supporto per l’invio di dati a molteplici destinatari
( “comunicazione multicast”), che può essere realizzato a livello di
protocolli di rete (IP - IGMP) oppure a livello applicativo.
  La comunicazione multicast a livello applicativo può essere realizzata sia in
maniera strutturata (creando “communication path” espliciti), sia non
strutturata (affidandosi a tecniche applicative che simulano la diffusione
delle epidemie).
  Un elemento di progettazione fondamentale per il multicast strutturato a
livello applicativo è la costruzione di una rete “overlay” = una rete
virtuale atta a fornire meccanismi non nativamente supportati dalla
rete sottostante (ad es. il multicast).
Il multicast strutturato applicativo
Esistono due approcci fondamentali per l’implementazione del
multicast strutturato applicativo con una rete overlay:
Ø il primo è che i nodi si possono organizzare direttamente in un
albero, il che significa che c’è un unico percorso tra una coppia di
nodi ( ad es. CHORD);
Ø  l’altro vede i nodi organizzati in una rete a maglia in cui ogni
nodo ha molti vicini, creando cosi molti percorsi diversi per ogni
coppia di nodi.
La differenza principale tra i due approcci è che di solito il secondo è più robusto:
infatti se cadesse un nodo, ci sarebbe ancora la possibilità di distribuire le
informazioni senza la necessità di riorganizzare immediatamente l’intera rete.
13
Overlay network
I PEER (nodi, risorse) si organizzano sovrapponendo (overlay) alla rete fisica
una rete logica in modo da consentire la loro localizzazione senza dover
specificare indirizzi IP, ma solo indirizzi logici (generati con una funzione hash
e memorizzati in una hash table distribuita (DHT)).
I peer si organizzano creando dei link virtuali fra loro.
Problema : STRETCH (o Relative Delay Penalty = RDP) ovvero rapporto tra il tempo
di trasferimento del messaggio tra due nodi nella rete overlay ed il tempo nella rete
fisica sottostante.
Rete Overlay con Distributed Hash Table (1)
Ciascun nodo (processo) mantiene un set di link agli altri nodi (i suoi vicini). Tutti
insieme questi nodi formano una Overlay Network, con una sua topologia logica
ad anello.
Tutte le topologie di Overlay Network condividono la proprietà essenziale:
Ad ogni peer viene assegnato un ID univoco (k) generato con una funzione hash . Per
ciascuna chiave k, o il nodo possiede k oppure ha un collegamento ad un nodo che è più
vicino a k in termini di distanza.
Ad esempio in una rete ad anello (sistema CHORD):
2
3
(0, 1, 2)
1
4
(3, 4)
0
9
(7, 8, 9)
7
8
Sistema basato su DHT con topologia logica ad anello in cui
ai dati ed ai nodi viene assegnata una chiave generata
all’interno di uno spazio di identificatori di 160 bit, con uno
schema di mappatura tra nodi e dati attraverso la loro chiave.
Nella figura ad es. si hanno 3 nodi e complessivamente 5 dati
(due dati associati al nodo 2, 1 al nodo 4 e 2 al nodo 9).
Per inserire un nuovo dato, viene generata la chiave k e
viene mappato nel nodo con id >= k cioè nel nodo successore
di k (succ(k)).
Per inserire un nuovo nodo, viene generata la chiave k che
sarà l’id del nodo e così il nodo viene inserito logicamente tra
il predecessore (pred(id)) ed il succ(id).
14
DHT (1)
Le tabelle hash distribuite (DHT) sono una tipologia di infrastruttura di sistemi basata
su tabelle di coppie (key, value) relative ai nodi/risorse del sistema, nelle quali il valore
delle key è calcolato con una funzione hash applicata al valore. Tale infrastruttura
consente di disporre di un servizio efficiente di lookup su ad un vasto numero di nodi
(peer).
Questo tipo di infrastruttura viene utilizzata per implementare servizi complessi, quali
file system distribuiti, sistemi peer-to-peer di file sharing, multicast e domain name
services,….
DHT (2)
Una DHT è costruita attorno ad un keyspace astratto, come un set di stringhe di 160-bit.
L’appartenenza al keyspace è divisa tra i nodi partecipanti in base ad un ben definito
schema per il partizionamento.
Un tipico funzionamento di una DHT per immagazzinare e poi recupare un dato può
avvenire nel seguente modo:
Ø  Si supponga che il keyspace sia un set di stringhe di 160-bit.
Ø  Per immagazzinare nella DHT un file caratterizzato dai parametri filename e dati,
viene inizialmente calcolato l’SHA1 del filename, producendo così una chiave k di
160-bit.
Ø  In seguito, un messaggio put(k, data) può essere inviato ad un qualsiasi nodo della
rete DHT. Il messaggio è inoltrato di nodo in nodo attraverso l’overlay network (tra i
succ(k)) fino a che esso non raggiunge il singolo nodo che è responsabile per la
chiave k (laddove la coppia (k, data) è già stata immagazzinata).
Ø  Qualsiasi altro client può quindi successivamente recuperare i contenuti del file
calcolando a sua volta l’hash del filename (per ottenere k) e chiedere ad un qualsiasi
nodo della rete DHT di trovare il dato associato a k, tramite un messaggio get(k).
Ø  Il messaggio verrà quindi inoltrato attraverso l’overlay verso il nodo responsabile per
k, che risponderà con una copia del dato immagazzinato.
15
Rete Overlay con DHT (3)
L’overlay network connette i nodi, consentendo loro di trovare il
proprietario di una determinata chiave nel keyspace della DHT.
A questo punto risulta quindi facile inoltrare un messaggio al proprietario di una
qualsiasi chiave k utilizzando il seguente algoritmo :
a) 
ad ogni passo successivo, inoltra il messaggio al vicino il cui ID è più vicino a k;
b) 
quando non esiste un vicino con queste caratteristiche, allora si è giunti al nodo
effettivamente più vicino, il quale deve essere il proprietario di k.
Questo tipo di routing viene talvolta definito come key based routing.
Al di là della correttezza di fondo di questo tipo di routine, vi sono due vincoli chiave nella
topologia:
- che il numero massimo di passi successivi in un qualsiasi percorso (dilazione) sia basso,
in modo tale che la richiesta sia soddisfatta velocemente, e
- che il numero massimo di vicini di ciascun nodo (il grado del nodo) sia basso, al fine di
mantenere basso l’overhead di mantenimento.
Modelli non strutturati per la diffusione
dei dati
Algoritmi epidemici
E’ una tecnica (utilizzata nei sistemi distribuiti a larga scala) basata su un modello di
propagazione dei dati che consiste nel diffondere le informazioni su un host (scelto a caso
e detto “infetto”). Il nodo infetto provvede a sua volta a diffondere l’informazione sugli
host con cui è collegato. Il nodo che non ha ancora ricevuto i dati è detto “suscettibile”.
Un nodo che ha già ricevuto i dati o non può diffonderli è detto “rimosso”.
Modello anti-entropia
Modello gossiping
Un nodo sceglie a caso un altro nodo al quale inviare (spingere) ) i dati o
dal quale ricevere (attrarre) i dati :
a)  PUSH = P (nodo infetto) invia i dati al nodo Q (solo se suscettibile)
b)  PULL = Q (suscettibile) accoglie i dati da P (infetto),
c)  PUSH/PULL = P e Q si mandano reciprocamente i dati (push-pull).
Se P è aggiornato con il dato x, prova ad inviare x ad un nodo arbitrario Q.
Se Q ha già ricevuto x da un altro nodo, P perde l’interesse a diffondere
ulteriormente x (viene rimosso).
Tale tecnica non garantisce che tutti i nodi ricevano l’informazione, ma è
molto efficiente nella propagazione del dato.
16