Sistemi distribuiti
Definizione: il sistema distribuito è una collezione di computer che appare ai suoi
utenti come un singolo sistema coerente.
Caratteristiche:
Mancanza di memoria condivisa: le informazioni vengono scambiate tramite
- messaggi
Non esiste uno stato globale dell’intero sistema
- Ogni componente è autonomo: non c’è bisogno di coordinare l’esecuzione
- concorrente dei diversi componenti del sistema
Non esiste un clock globale: non è possibile un fallimento completo del
- sistema, ma solo fallimenti indipendenti dagli altri componenti
Problematiche fondamentali di un DS:
Individuare la controparte (naming)
- Accedere alla controparte: serve un riferimento (access point)
- Serve un protocollo di comunicazione
- Serve un formato comune per lo scambio dei dati e un modo di
- trattamento per capirli (Sintassi e semantica)
Definizioni:
Servizio: il termine servizio si usa per una parte distinta di un sistema
- calcolatore che gestisce una collezione di risorse correlate e ne presenta la
funzionalità agli utenti e alle applicazioni
Server: un programma (processo) su un calcolatore interconnesso che accetta
- richieste da un programma, in esecuzione su di un altro calcolatore, per
eseguire un servizio e rispondervi in modo appropriato
Client: I calcolatori che richiedono un servizio, mentre tutto il processo viene
- chiamato client-server computing.
Tipi di architetture:
Architettura a strati: come i sistemi operativi e i middleware
- Architettura a livelli: applicazioni client-server
- Architettura a oggetti: Java Remote Method Invocation (RMI)
- Architettura incentrata sui dati: web come file system condiviso
- Architettura ad eventi
-
Sistema operativo di rete (NOS – Network Operating System)
Particolare tipo di sistema distribuito in cui l’applicazione distribuita viene
- eseguita su più macchine, ognuna con il suo OS ma con uno strato intermedio
che gestisce i servizi di rete
Gli utenti sono a conoscenza della molteplicità delle macchine e l’accesso alle
- risorse può avvenire in modi diversi, come il remote logging via SSH o
TELNET, via desktop remoto o via FTP
Diversi client possono accedere alle risorse in posti diversi e attraverso diverse
- modalità
Tipi di sistemi distribuiti
Sistemi di computazione distribuita
Una classe importante dei sistemi distribuiti è quella usata per operazioni
computazionali ad alte performance. Queste possono essere divise in:
Computazione cluster: nel quale l’hardware sottostante consiste in una
- collezione di calcolatori simili (stesso OS…) collegati da una rete locale ad alta
velocità. Il sistema è quindi altamente omogeneo.
Computazione a griglia (grid computing): questo sottogruppo consiste in
- un sistema distribuito che spesso viene costruito come una federazione di
sistemi calcolatori, ove ogni sistema può ricadere sotto un dominio
amministrativo diverso e può essere molto diverso dagli altri per quanto
concerne l’hardware, il software e lo sviluppo della tecnologia di rete.
Cluster:
In quasi ogni caso, la computazione cluster viene usata per la programmazione
parallela nel quale un singolo programma (computazionalmente complesso) viene
eseguito in parallelo su più macchine
Computazione a griglia:
Nella computazione a griglia vi è un altro tasso di eterogeneità. In questo tipo di
sistema, risorse provenienti da diverse organizzazioni vengono riunite per permettere
la collaborazione di un gruppo di persone o di istituzioni.
Tale collaborazione viene realizzata nella forma di un’organizzazione virtuale.
Sistemi d’informazione distribuiti:
Un’applicazione di rete consiste semplicemente in un server che esegue quella
applicazione, rendendo disponibile a programmi remoti, detti client
Tali client posso inviare richieste al server per eseguire una specifica operazione, dopo
la quale una risposta viene rispedita al mittente.
Un minimo livello di integrazione permetterebbe ai client di raccogliere un numero di
richieste, possibilmente a server diversi, in un’unica richiesta più grande e di farla
eseguire come una transizione distribuita.
L’idea chiave è che tutte o nessuna di queste operazioni vengono eseguite.
Man mano che le applicazioni divennero più sofisticate e furono gradualmente
separate le componenti indipendenti, fu chiaro che l’integrazione doveva anche
prevedere che le applicazioni potessero comunicare direttamente fra di loro. Questa
idea portò ad un’industria che si concentra sull’integrazione di applicazioni aziendali
(Enterprise Application Integration – EAT).
Consideriamo due tipi di sistemi distribuiti:
Sistemi di esecuzione delle transazioni (Transation Processing System):
Tali sistemi si basano sul concetto di transazione. Esempi di sistemi facenti uso di
transizioni sono i database.
Le transazioni sono operazioni:
Atomiche: ogni transizione viene eseguita completamente, o per nulla, e se
- questo avviene in un’unica istantanea operazione. Durante l’esecuzione di una
transazione gli altri processi non possono vedere alcun stato intermediario.
Consistenti: se il sistema ha qualche invarianza (entità che deve essere
- sempre mantenuta) essa deve essere sempre presente. Se era presente prima
della transazione allora deve essere presente anche dopo il suo completamento.
Isolate o serializzabili: se due o più transazioni vengono eseguite nello
- stesso, per ciascuna di loro e per gli altri processi, il risultato finale dovrà
sembrare come se tutte le transazioni siano state eseguite sequenzialmente in
un qualche ordine dipendente dal sistema.
Durature: una volta eseguita la transazione il risultato diventa permanente
-
Da cui l’acronimo ACID.
Middleware:
Software per migliorare le prestazioni e la trasparenza di distribuzione di un
- NOS
Nasconde l’eterogeneità delle macchine condivise fornendo un’interfaccia
- identica a tutti verso i servizi comuni
Permette la definizione di un sistema di comunicazione che nasconde i dettagli
- dello scambio di messaggi
Permette di definire nomi simbolici che possono essere scambiati/cercati
- Definisce meccanismi per l’esecuzione atomica di operazioni di read/write e
- livelli di protezione dell’accesso ai dati e dell’integrità della computazione
Basati su paradigmi di distribuzione e comunicazione, come le RPC o gli oggetti
- distribuiti, tramite diversi livelli di astrazione (dal più generico TCP/IP ai livelli
dedicati come l’ODBC per i database o l’http per internet o l’RMI per gli oggetti)
Sistema Operativo Distribuito (DOS – Distributed Operating System) (confronto
con NOS)
Non interpone i servizi di rete tra le applicazioni distribuite e il client, ma uno
- strato condiviso di servizi di sistema per il controllo delle risorse, siano esse dati
o risorse di sistema, come capacità computazionale o memoria.
In questo sistema gli utenti non sono a conoscenza della molteplicità delle
- macchine, l’accesso alle risorse condivise è identico all’accesso a risorse locali.
Possibilità di migrare processi o parti di essi da una macchina all’altra per
- migliorare le prestazioni dei processi stessi, tramite politiche di bilanciamento
del carico e di efficienza dell’hardware.
Trasparenza: è un aspetto importante dei sistemi distribuiti ed è la necessità di
nascondere all’utente finale i dettagli di come avvengono determinare funzionalità del
sistema. Più c’è trasparenza, meno l’utente finale sa come funziona il sistema.
Categorie di trasparenza:
Trasparenza d’accesso: permette l’accesso a risorse locali e remote con le
- stesse operazioni e stesso formato dei dati
Trasparenza di località: permette l’accesso a risorse remote senza conoscere
- la loro locazione fisica nella rete
Trasparenza di concorrenza: permette a più processi di operare con risorse
- condivise senza interferenze.
Trasparenza di replicazione: permette l’uso di istanze multiple delle risorse
- senza intaccarne l’affidabilità e l’integrità
Trasparenza di fallimento: permette di sanare eventuali fallimenti parziali del
- sistema senza che l’utente ne abbia evidenza
Trasparenza di mobilità: permette il trasferimento di dati, utenti e sw su
- macchine diverse senza impatto utente
Trasparenza di performance: permette la riconfigurazione dinamica (load
- balancing) senza impatto
Trasparenza di persistenza: permette di nascondere una risorsa sia in
- memoria sia su disco
Scalabilità: capacità di un sistema di mantenere le stesse prestazioni all’aumentare
delle richieste di risorse
Tecniche di scalabilità: gli elementi costruttivi di un sistema distribuito sono servizi,
dati e algoritmi. Se essi fossero centralizzati su una stessa macchina si avrebbero
problemi di performance/scalabilità del sistema. Esistono quindi diverse tecniche, da
poter applicare ad elementi distribuiti, che permettono di aumentare il grado di
scalabilità del sistema.
Comunicazione asincrona: comunicazione tra i componenti non bloccante
- (permette quindi un elevato grado di trasparenza di concorrenza)
Fat client vs. fat server: delega dei compiti ai nodi meno impegnati
- Fat client: client con molte funzionalità che è meno dipendente dal
o server
Fat server: server con molte funzionalità al quale dipendono
o maggiormente i client collegati.
Ripartizione dei compiti: parallelizzazione delle attività tramite ripartizione
- gerarchica come nei DNS o tramite pipeline.
Replicazione: più nodi forniscono lo stesso servizio (ma ciò introduce problemi
- di consistenza dei dati)
Caching delle informazioni: salvataggio temporaneo di dati recenti nella
- memoria centrale per velocizzare le prestazioni in caso di richieste multiple
delle stessa risorsa (può essere visto come una forma di replicazione lato client)
Modello Client-Server
L’architettura di base prevede che un client acceda ad un server con una
- richiesta e che il serve risponda con un risultato
La richiesta può anche essere “girata” da un server ad un altro (se le
- informazioni non risiedono sul server contattato, oppure se esso è molto carico),
caso in cui si parla di accesso a server multipli, oppure può avvenire tramite
proxy server, che funge da intermediario per le comunicazioni in entrata/uscita.
Il modello di interazione tra processi client e processi server è un modello
- sincrono, in cui il client che ha emesso la richiesta attende che il server la
elabori e restituisca una risposta prima di procedere.
Le comunicazioni tra client e server si basano su protocolli applicativi che
- definiscono il formato, l’ordine di invio e ricezione dei messaggi, i tipi di dati e le
azioni da eseguire quando si riceve un messaggio.
Esempi di protocolli applicativi sono HTTP, FTP e SMTP
-
Aspetti critici
Ripartizione dei compiti tra client e server: chi-fa-cosa dipende dal tipo di
- operazione (es: in una banca, tutto è gestito lato server) ma ciò influenza le
operazioni in base al carico.
Identificazione e accesso al server: il client deve avere le informazioni
- sufficienti all’accesso al server
Comunicazione tra client e server: le primitive disponibili e le modalità per
- la comunicazione
Gestione del ciclo di vita di client e server: bisogna regolamentare
- l’attivazione e la terminazione del client e del server.
Alternativa valida: architettura a più livelli, in cui esistono dei server che si
comportano anche da client, richiedendo informazioni ad ulteriori server posti nella
rete. (es: server di presentazione <-> server applicazione <-> server db).
Come fa il client a conoscere l’indirizzo del server? Esso può essere espresso
come costante (nel caso di applicazioni di client come i client del servizio bancario),
oppure può essere inserito dall’utente (es: web browser), ottenuto via un name server
o un repository da cui il client può ottenere le informazioni necessarie (DNS) o tramite
un protocollo diverso per l’individuazione del server (Broadcast per DHCP)
Modello P2P
Nel modello peer-to-peer (P2P) non esiste un server definito, e tutti i client si
- comportano e partecipano al sistema in egual misura.
Le comunicazioni avvengono in maniera asincrona e attraverso lo scambio di
- messaggi, eventualmente basati comunque su un protocollo client/server
durante la connessione (TCP)
I sistemi P2P si organizzano e gestiscono autonomamente, tramite un controllo
- decentrato grazie all’adattabilità della morfologia di rete
Aspetti critici:
Difficoltà nell’individuazione dei partecipanti
- Gestione di connessione e comunicazione tra i peer
- Gestione di inserimento e cancellazione di peer/processi
- Comunicazione multicast e broadcast
-
Fasi principali:
Boot: permette ad un peer di trovare una rete e di collegarsi ad essa (anche se
- nessuno ormai fa boot P2P, questa operazione viene vista più come
un’operazione client/server tramite i cosiddetti superpeer)
Lookup: permette ad un peer di trovare con chi interagire (il proprietario del
- file cercato/la persona desiderata per chattare). Anche questa operazione viene
effettuata tramite superpeer.
Interazione: due peer iniziano la loro interazione (chat/scambio file)
- Pure se le 3 operazioni avvengono tutte peer-to-peer
o P2P se le fasi di lookup e interazione sono svolte peer-to-peer mentre il
o fase di boot prevede l’utilizzo di qualche server
P2P ibride nelle quali l’unica fase realmente peer-to-peer è lo scambio,
o mentre boot utilizza qualche server e il lookup viene svolto da peer
particolari detti superpeer/hub/mainpeer/server (principalmente nelle reti
di scambio file)
Comunicazione
Tipologie principali di comunicazione d’informazioni
Asincrona: il mittente non attende una risposta del ricevente prima di
- procedere
Persistente: il middleware memorizza i dati fino alla consegna del messaggio
- al ricevente (non è necessario che i processi mittente/destinatario siano in
esecuzione prima e dopo l’invio/ricezione dei messaggi)
Sincrona: il mittente spedisce un messaggio e attende la conferma di
o ricezione da parte del ricevente (se attivo) o del middleware (se il
ricevente non è attivo). All’arrivo della conferma il mittente riprende
l’elaborazione
Asincrona: il mittente spedisce un messaggio ma non attende la
o conferma prima di procedere. Si affida quindi totalmente alle capacità di
consegna del protocollo di comunicazione scelto.
Transiente: se il destinatario non è connesso i dati non vengono scaricati.
- Asincrona transiente: il mittente invia un messaggio ma solo dopo che
o è consapevole che il destinatario sta girando, dopodichè precede nella
normale elaborazione.
Sincrona transiente receipt-based: (basata su un ritorno): il
o messaggio viene inviato ma magari il ricevente è impegnato in altro. A
quel punto, il mittente si ferma, aspettando un messaggio di ricevuta
(ACK) del ricevente (di solito il ricevente si interrompe alla ricezione del
messaggio solo per spedire indietro l’ACK oppure la gestione dei
messaggi è compiuta in un secondo momento)
Sincronia transiente basata sulla consegna: molto simile al
o secondo, solo che l’attesa del mittente si prolunga fin quando il ricevente
non inizia ad elaborare il messaggio, momento in cui esso invia l’ACK
Sincronia transiente basata sulla risposta: l’ACK viene posticipato al
o momento in cui il ricevente ha completato l’elaborazione del messaggio,
prolungando ancora l’attesa del mittente.
La comunicazione persistente viene utilizzata per lo più per lo scambio dei messaggi
senza richiedere che né il mittente né il ricevente siano attivi durante la trasmissione.
Si possono creare quindi 4 combinazioni attivo A e passivo P: A-A A-P P-A P-P
Interfacce basilari per le cose in un sistema di scambio messaggi
PUT: inserisce un messaggio nella coda specifica
- GET: blocca finchè la coda specificata non è vuota, e rimuove il primo
- messaggio
POLL: controlla la coda specificata per i messaggi e rimuove il primo messaggio
- senza bloccare
NOTIFY: installa un handler che viene chiamato quando un messaggio è
- presente nella coda specificata
Come identificare correttamente un processo con il quale comunicare
È necessario conoscere l’indirizzo IP dell’host su cui il processo è in esecuzione,
- e il numero di porta associato al processo
Usando delle socket, ossia delle API (Application Programming Interface) del
- sistema operativo che collegano un processo ad una determinata porta TCP/UDP
in modo da poter interfacciarsi
Primitive per l’utilizzo delle socket
SOCKET: crea un nuovo socket (punto di collegamento)
- BIND: collega un socket a un indirizzo locale
- LISTEN: enuncia la volontà di accettare connessioni in entrata sul socket
- ACCEPT: blocca il processo finchè non arriva una richiesta di connessione
- CONNECT: tenta una connessione in uscita
- WRITE: scrive sulla connessione
- READ: legge dalla connessione
- Attenzione: la lettura/scrittura su una socket basata su un canale
o condiviso da più processi può determinare problemi di concorrenza per
l’accesso multiplo ad una risorsa condivisa. È quindi necessario adottare
meccanismi di mutua esclusione.
CLOSE: chiude la connessione
-
Mentre un client è abbastanza semplice da realizzare, un processo server deve tenere
conto dell’affidabilità del server stesso e del possibile carico al momento della
connessione da parte di più client.
Come definire un server
Iterativo: soddisfa una richiesta alla volta
- Quando arriva una richiesta d
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Sistemi distribuiti - teoria completa
-
Sistemi Distribuiti - Riassunti
-
Sistemi Operativi
-
Sistemi operativi - Appunti