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 possono 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 (Transaction Processing System)
Tali sistemi si basano sul concetto di transazione. Esempi di sistemi facenti uso di transazioni sono i database. Le transazioni sono operazioni:
- Atomiche: ogni transazione 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 determinate 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 software 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 server. Fat server: server con molte funzionalità al quale dipendono 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 della 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 server 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).
P2P ibride nelle quali l’unica fase realmente peer-to-peer è lo scambio, 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 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 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 è consapevole che il destinatario sta girando, dopodiché precede nella normale elaborazione.
- Sincrona transiente receipt-based: (basata su un ritorno): il 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 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 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
- CLOSE: chiude la connessione
Attenzione: la lettura/scrittura su una socket basata su un canale condiviso da più processi può determinare problemi di concorrenza per l’accesso multiplo ad una risorsa condivisa. È quindi necessario adottare meccanismi di mutua esclusione.
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...
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