Definizioni e obiettivi
Definizioni
Un sistema distribuito è una collezione di computer autonomi e indipendenti che appare ai propri utenti come un singolo sistema coerente.
Concetti
- Collezione di computer autonomi e indipendenti: Utenti sono convinti di interagire con un singolo sistema.
- Eterogeneità: molti componenti hardware/software autonomi e indipendenti.
- Nodi autonomi in grado di comunicare.
- Non si fa assunzione sul tipo dei nodi.
- Non si fanno assunzioni sul modo in cui i nodi sono interconnessi.
- Non si può assumere di avere un clock globale.
- In un singolo sistema coerente la collezione di nodi deve operare come unica, senza tenere conto dove, quando e come l'iterazione tra l'utente e il sistema ha luogo.
Un sistema distribuito è un sistema in cui il guasto di un singolo computer che non sai neanche esista può rendere inutilizzabile l'intero sistema.
Prime considerazioni
- Concorrenza: rischio interferenze, concorrenza tra processi. In qualunque momento moltissimi processi possono essere in esecuzione, anche in diverse località.
- Nessun tempo globale: non è possibile avere una perfetta sincronizzazione. Bisogna evitare di considerare di avere un unico tempo globale.
- Fallimenti indipendenti: si hanno molte cause di fallimento, anche per problemi di rete o crash delle macchine.
- I guasti possono essere localizzati all'interno di un sistema distribuito. Un guasto può non portare al crash dell'intera applicazione: i guasti possono essere mascherati e risolti in modo trasparente.
- L'applicazione deve funzionare bene con processi eseguiti contemporaneamente a dati condivisi: possono esserci delle interferenze e problemi di concorrenza tra i processi.
Middleware
È lo strato di software che rende possibile eseguire delle applicazioni su hardware distribuiti ed eterogenei.
- Un sistema distribuito è organizzato con un livello di middleware, esteso su più macchine e che offre alle applicazioni la stessa interfaccia.
- Lo strato di middleware si estende su molte macchine e offre alle applicazioni la stessa interfaccia. Il middleware ha nei sistemi distribuiti lo stesso ruolo che il sistema operativo ha nei computer.
- Fa comunicare i componenti di una singola applicazione e le applicazioni tra di loro.
- Nasconde le differenze hardware e software.
- La principale differenza con l'equivalenza con il sistema operativo è che il middleware offre servizi ad un livello di rete.
- Il middleware può essere visto come un contenitore di componenti e funzioni comunemente usati che non sono più implementate come applicazioni separate.
I compiti del middleware sono:
- Fornire servizi di alto livello alle applicazioni soprastanti, nascondendole dall'implementazione sottostante del sistema operativo e dall'hardware.
- Fornire servizi di alto livello alle applicazioni soprastanti: permette di realizzare funzionalità di uso comune che sono presenti nel middleware (es. servizio di nomi).
Obiettivi
- Condivisione di risorse fisiche e logiche: anche a supporto della collaborazione tra gli utenti. È l'obiettivo che ha portato alla nascita dei sistemi distribuiti.
- Trasparenza: nascondere la complessità per facilitare il lavoro degli utenti (astrazione).
- Scalabilità: un sistema deve crescere all'aumentare della complessità, ossia si adatta alla crescita.
- Apertura (Openness): componenti hardware e software possono essere facilmente usati da altri o integrati in altri sistemi. Favorisce la collaborazione e l'integrazione.
- Favorire accessibilità delle risorse: le risorse remote devono essere accessibili in modo semplice ed efficiente, meglio se in modo trasparente (accedere allo stesso modo a risorse locali e remote).
- Garantire sicurezza: autenticazione, autorizzazione, integrità, privacy, disponibilità, paternità.
- Supportare mobilità: mobilità di utenti, terminali e applicazioni.
- Supportare eterogeneità: la grande varietà hardware e software non deve impedire la cooperazione e la comunicazione del sistema.
Apertura (Openness)
Un sistema distribuito aperto è un sistema che offre componenti che possono essere facilmente integrati.
- I componenti dovrebbero aderire a standard che descrivono la sintassi e la semantica di cosa i componenti devono offrire.
- Un approccio per definire l'interfaccia di un servizio è usare gli IDL (Interface Definition Language): definiscono la sintassi dei servizi, specificando i nomi delle funzioni, i parametri, i valori di ritorno e possibili eccezioni. La parte difficile da definire è legata alla semantica.
Specifica di interfaccia
- Completa: viene specificato tutto il necessario per fornire l'implementazione.
- Neutrale: lo standard non pone una specifica per l'implementazione.
Questo porta a:
- Interoperabilità: due implementazioni di sistemi o componenti di differenti produttori possono coesistere e lavorare insieme facendo riferimenti ad altri servizi come specificato da uno standard comune.
- Portabilità: un'applicazione per un sistema distribuito A può essere eseguito senza modifiche su un differente sistema distribuito B che implementa la stessa interfaccia di A.
- Un sistema distribuito aperto dovrebbe essere facile da configurare usando diversi componenti, anche provenienti da diversi sviluppatori.
- Dovrebbe anche essere facile aggiungere nuovi componenti o sostituire componenti esistenti senza portare effetti sugli altri componenti presenti: un sistema distribuito dovrebbe quindi essere estendibile.
Trasparenza
Un sistema distribuito viene percepito come un unico sistema di elaborazione perché si tende a nascondere i vari componenti separati e distribuiti.
Un obiettivo di un sistema distribuito è di nascondere il fatto che i suoi processi e risorse siano fisicamente distribuite attraverso più computer separati anche da larghe distanze.
Forme di trasparenza
- Accesso: nascondere le differenze nella rappresentazione dei dati e nel modo con cui gli oggetti possono essere acceduti. Accesso a risorse locali e remote eseguite con le stesse operazioni.
- Locazione: gli utenti non possono dire dove una risorsa sia fisicamente localizzata nel sistema. Importante il Naming (es: URL, non indirizzo IP): un intero sito potrebbe essere spostato da un data center ad un altro senza che l'utente lo noti.
- Concorrenza: in caso di risorse condivise (come database) è importante che ogni utente non noti che altri stiano facendo uso della stessa risorsa. Un problema legato alla concorrenza di risorse condivise è di lasciare le risorse in uno stato consistente, attraverso l'uso di meccanismi di locking, che garantiscono un accesso esclusivo alla risorsa desiderata. Un importante meccanismo è quello delle transazioni, che però può essere difficile da implementare in un sistema distribuito.
- Replicazione: nasconde il fatto che esistono molte copie di una risorsa o che più processi stanno operando in diverse forme di lock. Per nascondere la replicazione agli utenti è necessario che tutti i replicati abbiano lo stesso nome. La replicazione permette di aumentare l'affidabilità e le prestazioni del sistema.
- Guasti: un utente o un'applicazione non dovrebbe accorgersi del guasto di una parte del sistema e il sistema dovrebbe recuperare dal guasto. La difficoltà maggiore è nel distinguere tra un processo morto e un processo lento a rispondere.
- Mobilità: mobilità di processi e risorse richiesti dall'utente senza effetti sulla comunicazione e sulle operazioni.
- Performance: sistema può essere potenziato per migliorare le prestazioni all'aumentare delle richieste.
- Scalabilità: capacità del sistema di crescere al crescere del carico.
La trasparenza non è sempre un valore positivo nei sistemi distribuiti: ad esempio quando si cerca stampante più vicina non si ha interesse nella trasparenza, oppure se si vuole comunicare con un utente interessa la sua timezone.
Scalabilità
Tre tipi di scalabilità:
- Scalabilità dimensionale: aggiungere facilmente utenti e risorse al sistema senza una notevole perdita di performance.
- Scalabilità geografica: utenti e risorse potrebbero trovarsi molto lontani, ma il fatto che ci siano ritardi nella comunicazione è difficilmente notato.
- Scalabilità amministrativa: un sistema può essere facilmente gestito anche se spazia tra molte organizzazioni di amministrazioni indipendenti.
Scalabilità dimensionale
Server centralizzati sono limitanti a causa del collo di bottiglia che si verifica all'aumentare delle richieste, per la CPU limitata, o limiti di memoria e di rete. La rete tra l'utente e il servizio può essere la causa di una scalabilità limitata, a causa della larghezza di banda minima richiesta per un servizio.
Scalabilità geografica
Difficile scalare dei sistemi distribuiti progettati per reti LAN a causa della comunicazione sincrona (client si blocca in attesa della risposta del server), usata per esempio nelle socket. Questo approccio funziona correttamente nelle LAN in cui la comunicazione tra due macchine è su pochi centinaia di microsecondi, mentre in una WAN la comunicazione può richiedere centinaia di millisecondi.
Inoltre, la comunicazione in una WAN è molto meno affidabile di quella in una LAN; in una WAN si ha anche una banda limitata, molto inferiore di quella presente in una LAN. In una LAN è facile implementare meccanismi di broadcast, difficili da implementare in una WAN.
LAN e WAN diversi per:
- Primitive di comunicazione sincrone nella LAN.
- Affidabilità della comunicazione alta nella LAN.
- Schemi di comunicazione broadcast convenienti nella LAN.
Scalabilità amministrativa
Applicazione distribuita che interessa o richiede intervento di componenti che appartengono a domini amministrativi diversi ad organizzazioni diversi.
Ostacoli
- Tecnologici: organizzazione può decidere di legarsi a specifiche tecnologie che possono non favorire la scalabilità amministrativa.
- Organizzativi: esempio sicurezza.
Tecniche di scalabilità
Potenziare le macchine non è sempre la soluzione più adatta.
Soluzioni:
- Evitare punti di centralizzazione: non partire con un database centrale o un algoritmo centralizzato per un servizio.
- Nascondere la latenza: evitare tempi di risposta dal server remoto. Schemi di comunicazione asincrona: ci sono però molte applicazioni che non possono farne uso.
- Modelli fat-client: spostare parte computazionale normalmente eseguita dal server sul client. Esempio Ajax e JavaScript.
- Partizionamento e distribuzione: invece di un singolo componente centralizzato, scomporlo e dividerlo in parti da allocare su diversi nodi. Esempio DNS, organizzato come albero di domini, divisi in zone: il naming service è distribuito su più macchine che interagiscono con un singolo server. Altro esempio è il World Wide Web.
- Replica: replicare un componente e allocarne copie su nodi diversi. Miglioramento prestazioni e tolleranza ai guasti. Replica è una decisione presa server-side, mentre il caching è presa client-side: pagina web caricata sulla cache locale e le richieste vengono eseguite dalla cache per la stessa pagina.
Errori comuni
Tipiche assunzioni errate:
- La rete è affidabile: su LAN è affidabile, in cui le macchine sono collegate con uno switch, non per una WAN.
- La rete è sicura: rete Internet è insicura.
- La rete e i sistemi sono omogenei: vero se si lavora nella LAN, non vero se si deve scalare.
- La topologia non cambia: non è vero per una rete WAN, in cui un messaggio può seguire strade diverse.
- La latenza è zero: sarebbe meglio usare comunicazioni sincrone, ma latenza non è nulla.
- L'ampiezza di banda è infinita: su LAN si ha banda elevata, ma in una WAN è limitata.
- Il costo di trasporto è zero: costi di comunicazioni possono essere anche molto elevati.
- C'è solo un amministratore: possono esserci domini amministrativi diversi.
Tipologie di sistemi distribuiti
Diversi tipi di sistemi distribuiti, per rispondere alle esigenze di scenari differenti tra di loro.
3 gruppi principali:
- Sistemi di calcolo distribuiti (HPC, Cluster, Grid, Cloud).
- Sistemi informativi distribuiti (transazionali, enterprise application integration).
- Sistemi distribuiti pervasivi (ubiquitous, mobile, sensor).
Sistemi di calcolo distribuiti
HPC (High Performance Computing)
- Nati per risolvere problemi computazionali estremamente pesanti.
- I principali supercomputer sono macchine dedicate ad altissime prestazioni e molto costose: nascono per campi specifici, come previsioni meteorologiche, ambiti scientifici che necessitano elevate capacità di calcolo.
- Le macchine sono dedicate a certe tipologie di computazioni, per cui ce ne sono poche, non c'è una grande economia di scala e quindi sono estremamente costose.
- L'evoluzione delle tecnologie ICT e le economie di scala nella produzione dei dispositivi hanno reso conveniente un approccio basato sui COTS (Component Off The Shelf), cioè componenti standard sul mercato.
- Evoluzione dei sistemi HPC basati su processori e tecnologie di rete tradizionali. Hardware e middleware hanno determinato l'affermarsi di tipologie di sistemi distribuiti di Cluster e Grid, e del Cloud in un contesto diverso.
Cluster Computing per HPC
Il Cluster Computing è diventato popolare quando il rapporto costo/performance dei computer è migliorato, rendendo conveniente l'utilizzo dei COTS.
Il Cluster Computing:
- È una tecnologia abbastanza semplice.
- È economico dal punto di vista hardware.
- Molte architetture con grandi capacità di elaborazione si basano su questo concetto.
Beowulf è un sistema di calcolo distribuito di tipo "Cluster Computing" composto da:
- i nodi di elaborazione sono PC con Linux: sono nodi di calcolo COTS, ossia pc senza la parte di interfaccia grafica, con i processori che sono a disposizione per la computazione.
- rete Ethernet di collegamento.
- una libreria di comunicazione per i processi.
- PVM: realizzazione di applicazioni distribuite i cui processi sono caricati sui nodi di computazione.
- MPI: più utilizzata rispetto a PVM.
Il Cluster Computing è usato per il calcolo parallelo dove i singoli programmi sono in esecuzione su più macchine. Il server si interfaccia da un lato con gli utenti che hanno bisogno di supercalcolo e dall'altro di interfaccia con il cluster di supercomputing: il server riceve i task dagli utenti e li carica sui nodi disponibili per l'elaborazione.
Grid Computing
Con il termine "grid" si intende un servizio disponibile quando se ne ha bisogno, come una spina della rete elettrica che la si collega per ottenere un servizio. Nasce dalla necessità di fornire ai ricercatori elevate capacità di calcolo senza forzare ogni gruppo di ricerca a costruire delle macchine HPC, comportando costi elevati. Una Grid è una struttura che mette a disposizione di tutti una elevata capacità di calcolo: le risorse di calcolo distribuite sono condivise ai ricercatori.
Richiede un middleware per far comunicare cluster distribuiti geograficamente ed eterogenei, fornendo astrazioni (API) per accedere ai diversi nodi di calcolo.
Architettura di un middleware Grid
- Fabric layer: è l'interfaccia per gestire la singola risorsa in un sito specifico; l'accesso alla risorsa può anche essere remoto. Fornisce meccanismi di locking per risorse non condivisibili di calcolo e di storage.
- Connectivity layer: comprende i protocolli di comunicazione per l'acquisizione di molte risorse; per esempio, i protocolli permettono il trasferimento di dati tra risorse o l'accesso a una risorsa remota. Contiene protocolli di sicurezza per autenticare gli utenti che accedono alle risorse.
- Resource layer: management di singole risorse. Le risorse locali e remote virtualizzate sono allocate a chi le chiede e ne deve essere gestita la collocazione. Usa le funzioni fornite dal connectivity layer e chiama le interfacce rese disponibili dal fabric layer. Ad esempio, potrebbe ottenere le informazioni di configurazione di una specifica risorsa o eseguire specifiche operazioni, come creare un processo o leggere un dato.
- Collective layer: si occupa della gestione e dell'accesso a molte risorse con vari protocolli e servizi, come discovery, allocation sui vari nodi e scheduling. Offre servizi di alto livello per l'accesso alle risorse sottostanti. A differenza degli altri livelli, che consistono di un insieme limitato di protocolli, questo livello fa uso di molti e differenti protocolli.
- Application layer: consiste nelle applicazioni che operano dentro l'organizzazione virtuale e fanno uso dell'ambiente di Grid Computing.
Cloud Computing
Il Cloud Computing è caratterizzato da un facile usability e accessibilità a risorse virtualizzate. L’aspetto di quali e come le risorse sono utilizzate può essere configurato dinamicamente, fornendo le basi della scalabilità.
- Il Cloud ha un target diverso dai precedenti e utilizza tecnologie diverse: i Cluster e Grid sono focalizzati sull'ottenere prestazioni importanti, mentre il Cloud vuole ottenere una capacità elastica di calcolo, storage e di strumenti.
- Si riferisce ad un target molto più ampio, con applicazioni di consumer, prosumer e enterprise.
- Parte dello stack spostata in Data Center remoti a cui accedere attraverso la rete Internet.
Modelli di servizio:
- IaaS: Infrastructure as a Service
- PaaS: Platform as a Service
- SaaS: Software as a Service
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.
Scarica il documento per vederlo tutto.
-
Sistemi operativi
-
Sistemi Intelligenti
-
Sistemi Distribuiti - Riassunti
-
Sistemi Di Controllo Distribuiti Domande Aperte