ds04-slides

Transcript

ds04-slides
Sistemi Distribuiti
Prof. Flavio De Paoli
1
Message Oriented communication
2
Message-oriented communication
Asincrona
Persistente
I messaggi vengono conservati dal sistema di comunicazione
Transiente
I messaggi non vengono conservati se sender/receiver non sono in
esecuzione
3
Persistence and Synchronicity in Communication (1)
General organization of a communication system in which hosts are connected
through a network
2-20
4
Persistence and Synchronicity in Communication (2)
Persistent communication of letters back in the days of the Pony
Express.
5
Persistence and Synchronicity in Communication (3)
a)
b)
Persistent asynchronous communication
Persistent synchronous communication
2-22.1
6
Persistence and Synchronicity in Communication (4)
2-22.2
c)
d)
Transient asynchronous communication
Receipt-based transient synchronous communication
7
Persistence and Synchronicity in Communication (5)
e)
f)
Delivery-based transient synchronous communication at message delivery
Response-based transient synchronous communication
8
Message-Oriented
Persistent Communication
9
Message-Queuing Model (1)
They offer intermediate-term storage capacity for messages, without requiring
either the sender or receiver to be active during message transmission.
Four combinations for loosely-coupled communications using queues.
2-26
10
Message-Queuing Model (2)
Basic interface to a queue in a message-queuing system.
Primitive
Meaning
Put
Append a message to a specified queue
Get
Block until the specified queue is nonempty, and remove the first
message
Poll
Check a specified queue for messages, and remove the first. Never block.
Notify
Install a handler to be called when a message is put into the specified
queue.
11
General Architecture of a Message-Queuing System (1)
The relationship between queue-level addressing and network-level
addressing.
12
General Architecture of a Message-Queuing System (2)
The general organization of a message-queuing system with routers.
2-29
13
Message Brokers
The general organization of a message broker in a message-queuing system.
2-30
14
Transient communication
15
L’interfaccia socket
L'interfaccia a socket è una API
Una socket è gestita come un file speciale di Unix (file di
input/output)
Il processo che crea una socket ottiene un file descriptor
Ci sono due tipi di socket
passive –> accettare chiamate (server)
attive –> iniziare una conversazione (client)
16
Funzioni per TCP/IP
socket
Crea una nuova socket
connect Stabilisce la connessione con il server
bind
Associa una socket a un indirizzo
listen
Rende una socket passiva
accept
Accetta connessioni su socket passive
17
Funzioni per TCP/IP
write
Per inviare messaggi
read
Per ricevere messaggi
close
Chiude la comunicazione rilasciando la
socket
18
Berkeley Sockets (1)
Socket primitives for TCP/IP.
Primitive
Meaning
Socket
Create a new communication endpoint
Bind
Attach a local address to a socket
Listen
Announce willingness to accept connections
Accept
Block caller until a connection request arrives
Connect
Actively attempt to establish a connection
Send
Send some data over the connection
Receive
Receive some data over the connection
Close
Release the connection
19
Client e server TCP/IP
(a) Server
(b) Client
20
Berkeley Sockets (2)
Connection-oriented communication pattern using sockets.
21
Processi e socket
ClientProcess
socket
socket-bind
connect
accept
write-read
read-write
host
Porte
ServerProcess
host
Porte
22
Client e server UDP/IP
(a) Server
(b) Client
23
Gli indirizzi dei processi
Un processo server è identificato da
un indirizzo IP
un identificatore di porta
struct sockaddr_in {
u_short sin_family;
/*tipo (es.
AF_INET)*/
u_short sin_port; /* protocol port number */
/* (2 bytes = 16 bit in network byte order) */
struct in_addr sin_addr;
/* indirizzo IP
*/
/* (4 bytes = 32 bit in network byte order) */
char sin_zero[8];
/* non usato (inizializzato a zero)*/
};
24
Come si definisce un indirizzo
Un indirizzo si costruisce con funzioni di libreria
struct sockaddr_in {
u_short sin_family;
= getprotobyname() -> h_addrtype
u_short sin_port;
= getservbyname() -> s_port
struct in_addr sin_addr;
= gethostbyname() -> h_addr
char sin_zero[8];
= bzero()
};
25
Unified Resource Locator (URL)
URL uniforma i riferimenti in Internet
protocollo://host[:porta]/[nome_risorsa]
Esempi
http://www.microsoft.com
http://developer.netscape.com/docs/wpapers/corba/index.html
ftp://sunsite.cnlab-switch.ch/mirror/javasoft/docs/
http://wwwcache.cilea.it:8080/
26
Esempio di socket attivo
La routine active_sock crea una socket attiva per un
client TCP/IP
int active_sock
(char *host, char *service, int port)
Restituisce un descrittore di socket attiva o un codice
d'errore
27
Esempio di socket passivo
La routine passive_sock crea una socket passiva per
un server TCP/IP
int passive_sock(int port, int qlen)
qlen è la lunghezza della coda di chiamate
Restituisce un descrittore di socket passiva o messaggio
d'errore.
28
Progettare un client
L'architettura di un client è concettualmente più semplice di
quella di un server
È spesso una applicazione convenzionale
Ha effetti solo sull’utente client
Non ci sono problemi di sicurezza
29
Un esempio di client TCP/IP
Il servizio echo
un client si connette ad un server remoto e gli invia un messaggio, il
server rimanda lo stesso messaggio al client
È uno strumento per
verificare la raggiungibilità di un server
provare un protocollo
studiare problemi di rotta
30
Un esempio di client TCP/IP
Tre tipi di collegamento ad un server per client_echo:
% client_echo
Client e server sono sulla stessa macchina;
% client_echo host_name
Il server sta sulla macchinahost_name;
% client_echo host_name port_number
Il server usa la porta port_number sulla macchinahost_name;
31
Progettare un server
Concettualmente un server deve
creare una socket
assegnargli una porta nota
entrare in un ciclo infinito in cui alternare
attesa richiesta
soddisfa richiesta
invia risposta
L’affidabilità di un server è strettamente dipendente
dall’affidabilità della comunicazione tra lui e i suoi client
32
Svantaggi nell’uso di TCP/IP
La modalità connection-oriented determina
l’impossibilità di rilevare interruzioni sulle connessioni
la necessità di prevedere una connessione (una socket) per ogni
comunicazione
33
Tipi di Server
I server possono essere:
iterativi
soddisfano una richiesta alla volta
concorrenti processo singolo
simulano la presenza di un server dedicato
concorrenti multi-processo
creano server dedicati
concorrenti multi-thread
creano thread dedicati
34
Progettare un server iterativo
Al momento di una richiesta di connessione il server crea
una socket temporanea per stabilire una connessione diretta
con il client
Le eventuali ulteriori richieste per il server verranno
accodate alla porta nota per essere successivamente
soddisfatte
35
Lo schema logico
server loop:
accept requests from other machines for
matrix multiplication;
call matrix_multiply;
send results back to requester;
----------------available on server-----double[] matrix_multiply() {
perform operation;
}
36
Progettare un server iterativo
Legenda:
Server
S1
S2
S1
Socket per accettare
richieste di connessione
Socket per connessioni
individuali
S2
.. .. .
server_echo_1
37
Svantaggi
Viene servito un cliente alla volta, gli altri devono attendere
Un server impedisce l’evoluzione di molti client
Non scala
Soluzione: server concorrenti
38
Progettare un server concorrente
Un server concorrente può gestire più connessioni
contemporaneamente
La sua realizzazione può essere
simulata con un solo processo
(uso della funzione select)
reale creando nuovi processi slave
(uso della funzione fork)
39
Single-Process (Thread)
Concurrent Server
40
Concurrent Single-Process Server in
C/Unix
Viene creata una socket per ogni client
Problema: le operazioni sono sincrone (sospensive)
La select() permette di leggere in modo asincrono dai
diversi canali di I/O
Sospende il processo finché non è possibile fare una operazione di I/O
server_echo_2
41
Select system call
select
Se il canale per le accept è pronto in lettura
accept
Per ogni canale pronto in lettura
read
write
42
Select system call
#include <sys/types.h>
#include <sys/time.h>
int select(int maxfdp, fd_set *readfds,
fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout );
Usa una maschera di bit di lunghezza maxfdp (= max_canali
+ 1)
max_canali è definito in <stdio.h>
In System V è la costante FOPEN_MAX
In 4.3BSD è dato da getdtablesize()
43
Select system call
Usa la maschera di bit di descrittori di file fd_set definita
in <sys/types.h>
Le macro per manipolare la maschera:
FD_ZERO(fd_set *fdset);
/* clear all bits in fdset */
FD_SET(int fd, fd_set *fdset);
/* turn the bit for fd on in fdset */
FD_CLR(int fd, fd_set *fdset);
/* turn the bit for fd off in fdset */
FD_ISSET(int fd, fd_set *fdset);
/* test the bit for fd in fdset */
44
Select system call
Una invocazione di select segnala che
uno dei file descriptor di readfds è pronto per la lettura, o che
uno dei file descriptor di writefd è pronto per la scrittura, o che
uno dei file descriptor di exceptfds è in una eccezione pendente.
Il numero massimo di descrittori esaminati viene indicato
con maxfdp.
(È pari al massimo valore + 1)
45
Select system call
È possibile specificare un timeout
Se ha valore 0, allora ritorna subito dopo aver controllato i descrittori;
Se ha valore > 0, allora attende che uno dei descrittori sia pronto per
l'I/O, ma non oltre il tempo fissato da timeout;
Se timeout ha valore NULL, allora attende indefinitamente che uno dei
descrittori sia pronto per l'I/O.
(si può interrompere l'attesa con una signal)
46
Multi-Process (Thread)
Concurrent Server
47
Condivisione del canale
x=read(s);
println(x);
x=read(s);
println(x);
Process/Thread 1
Possibile output:
cef
Process/Thread 2
Possibile output:
abd
porta/socket
Client
write(s,“abcdef”);
48
Lo schema logico
server loop:
accetta richieste da altre macchine per la
moltiplicazione di matrici;
attiva un nuovo thread e passa ad esso la
richiesta;
----------------double[] matrix_multiply() {
fai l’operazione;
}
/* Ci sono altri modi per farlo */
49
Concurrent Multi-Process Server in
C/Unix
Ad ogni richiesta viene creata una socket dedicata
una fork genera un figlio per gestire la nuova socket
il padre resta in attesa di nuove connessioni
Bisogna gestire la corretta terminazione dei figli
server_echo_3
50
Concurrent Multi-Thread Server in
Java
Ad ogni richiesta viene creata una socket dedicata
viene generato un Thread per gestire la nuova socket
il Thread padre resta in attesa di nuove connessioni
server Java
51
Confronto tra i modelli
Mono processo (iterativo e concorrente)
gli utenti condividono lo stesso spazio di lavoro
adatto ad applicazioni cooperative che prevedono la modifica dello stato
(lettura e scrittura)
Multi processo
ogni utente ha uno spazio di lavoro autonomo
adatto ad applicazioni autonome o che non modificano lo stato del server
(sola lettura)
52
Ulteriori considerazioni
Ci sono piu’ clienti per lo stesso server
Ogni server puo’ fornire piu’ servizi
Ogni server deve gestire piu’ richieste
I client devono mandare le richieste ai server giusti
Si vorrebbe evitare che ogni client e ogni server si
preoccupino dei problemi legati alla rete
53
Strutture per i server
Sono possibili diverse architetture
Chi crea i thread?
Quando viene creato un thread?
Il numero di thread è fisso?
Esistono diversi design pattern
54
Un thread per client
Il thread coordinatore rileva la presenza di un nuovo client
Connette il nuovo client ad un nuovo thread
Il nuovo thread:
decodifica la richiesta
chiama la funzione servente che la soddisfa
torna in ciclo per leggere una nuova richiesta
55
Un thread per richiesta
Un thread coordinatore riceve una richiesta
Ricevuta una richiesta genera un nuovo thread per
processarla
Il nuovo thread:
decodifica la richiesta
chiama la funzione servente che la soddisfa
termina
56
Un thread per servente
Ogni servente ha un proprio thread e una coda
Il coordinatore riceve una richiesta e la inserisce nella coda
del servente giusto
Ogni thread servente legge ciclicamente una richiesta dalla
propria coda e la esegue
57
Un pool di thread
La creazione dei thread è costosa
Il costo di creazione puo’ essere ammortizzato facendo
gestire ad ogni thread molte richieste
Un pool di thread potebbe essere creato al momento
dell’avvio del sistema e assegnato alle richieste man mano
vengono ricevute
58
Conclusioni
Il protocollo
definito dal progettista
di basso livello (sequenza di caratteri)
codifica e decodifica dei dati
Connessione
indirizzo fisico conosciuto dal client
poca trasparenza
Non c’è supporto alla gestione
creazione e attivazione del server manuale
59