Document Details

DiversifiedTrumpet2311

Uploaded by DiversifiedTrumpet2311

Università di Milano - Bicocca

Camilla

Tags

sistemi distribuiti informatica programmazione computer science

Summary

Questi appunti trattano di sistemi distribuiti, fornendo definizioni, caratteristiche e architetture software. Gli argomenti includono la gestione della memoria, dell'esecuzione, del tempo e dei fallimenti, nonché modelli di architettura come i sistemi a strati e client-server.

Full Transcript

2 Argomento 01: SISTEMI DISTRIBUITI – DEFINIZIONI E CARATTERISTICHE Sistema Distribuito – Definizione 1 Un sistema distribuito è un sistema nel quale le componenti hardware e software risiedono in dispositivi p...

2 Argomento 01: SISTEMI DISTRIBUITI – DEFINIZIONI E CARATTERISTICHE Sistema Distribuito – Definizione 1 Un sistema distribuito è un sistema nel quale le componenti hardware e software risiedono in dispositivi posti in rete e coordinano le loro azioni tramite il passaggio di messaggi. Sistema Distribuito – Definizione 2 Un sistema distribuito è una collezione di elementi di computazione autonomi (autonomous computing elements) che l’utente percepisce come un singolo sistema coerente. Collezione di Nodi Autonomi Ogni nodo è autonomo, ovvero possiede una propria nozione di tempo, ed è perciò necessario sincronizzare e coordinare le azioni. Se il sistema è una collezione di nodi occorre gestire l’appartenenza di un nodo ad un certo gruppo. I gruppi possono essere aperti (ogni nodo del sistema può partecipare), o chiusi (solo un numero selezionato di nodi possono partecipare) L’insieme di nodi opera allo stesso modo indipendentemente dalle caratteristiche (dove, quando e come) dell’interazione tra utente e sistema. Sistema Coerente Il concetto di trasparenza distribuita si riferisce alla capacità di nascondere la complessità dei dettagli implementativi di un sistema distribuito agli utenti e agli altri componenti del sistema stesso. Il fallimento parziale di un sistema distribuito non necessariamente provoca il fallimento globale di una applicazione. Nascondere il fallimento parziale e il suo recupero sono solitamente difficili e impossibili da nascondere. Caratteristiche Fondamentali gestione della memoria → non è presente memoria condivisa e perciò non vi è uno stato globale, ogni componente conosce solo il proprio stato e può sondare lo stato degli altri. gestione dell’esecuzione → ogni componente è autonomo e l’esecuzione è concorrente, il coordinamento delle attività è importante per definire il comportamento di un sistema. gestione del tempo → non è presente clock globale, non vi è possibilità di controllo globale o di scheduling, ed il coordinamento avviene tramite scambio di messaggi. gestione dei fallimenti → i fallimenti sono indipendenti (per ogni nodo), non vi è fallimento globale, e qualche altro nodo sopperisce alla mancanza di un nodo. si tratta di un sistema distribuito? un sistema distribuito deve possedere tutte queste caratteristiche. Architetture Software Un'architettura software definisce la struttura del sistema, le interfacce tra i componenti ed i pattern di interazione (i protocolli). I sistemi distribuiti possono essere organizzati secondo diversi stili architetturali: architetture a strati → sistemi operativi, middleware. architetture a livelli → applicazioni client–server. architetture basate sugli oggetti → Java–Remote Method Invocation (RMI). architetture centrate sui dati → il Web come file system condiviso. architetture basate su eventi → applicazioni Web dinamiche basate su callback (AJAX). 3 Architetture a Strati Una architettura a strati è una architettura software che organizza il software in layer, ovvero un insieme di (sotto)sistemi a pari livello di generalità, ciascuno costruito in cima ad uno più generale (quelli superiori sono più specifici). Ogni layer può quindi essere definito come un (sotto)insieme di (sotto)sistemi con lo stesso grado di generalità. pure layered organization → Sono ammesse chiamate solo di tipo downcall. Ogni strato comunica con quello sottostante. (es. ISO/OSI). mixed layered organization → Sono ammesse solo chiamate di tipo downcall, ma esse possono raggiungere più layers (non solo quello immediatamente successivo, possono saltare livelli). (es. organizzazione dei sistemi operativi). mixed downcalls and upcalls → Sono ammesse sia chiamate di tipo downcall che chiamate di tipo upcall. (consente upcalls dal livello inferiore al livello superiore). (es. web app). DOS Un DOS (Distributed Operating System) è un sistema operativo distribuito che connette più macchine omogenee attraverso un singolo canale di comunicazione. Il sistema è tightly-coupled, cioè le varie componenti del sistema sono interdipendenti. Ogni nodo del sistema deve essere omogeneo rispetto agli altri nodi. In un DOS, l’utente non è consapevole della molteplicità delle macchine che compongono il sistema (gli è trasparente); l’accesso quindi alle sue risorse sarà, per l’utente, identico all’accesso in sistemi formati da un singolo nodo, ossia accedono a risorse remote come se accedessero a risorse locali. È possibile trasferire dati trasferendo i file completi oppure le porzioni del file necessarie alla computazione (data migration). Inoltre, è possibile trasferire la computazione su tutto il sistema ed è anche possibile trasferire l’esecuzione di un processo o di parti di un processo su diversi nodi: bilanciamento del carico (load balancing) → distribuire i processi attraverso su tutta la rete per uniformare il carico di lavoro. accelerazione della computazione (computational speedup) → i sottoprocessi possono essere eseguiti concorrentemente su nodi diversi. preferenze hardware (hardware preference) → l’esecuzione di un processo potrebbe richiedere un processore specializzato (hardware specifico). preferenze software (software preference) → il software necessario potrebbe essere disponibile solo su un nodo specifico. 4 accesso ai dati (data access) → si eseguono i processi remotamente, piuttosto che trasferire tutti i dati nel contesto locale. NOS Il NOS (Network Operating System) prevede un sistema operativo debolmente accoppiato per multi–computer eterogenei (quali LAN e WAN, potendo eseguire sistemi operativi differenti), e vuole offrire servizi locali ad utenti remoti. I servizi sono gestiti dalle applicazioni (si occupano anche della distribuzione del carico). Gli utenti sono consapevoli della presenza di molteplici macchine. Consente esplicite caratteristiche di comunicazione: comunicazione diretta tra processi tramite socket esecuzione concorrente (indipendente) dei processi che formano una applicazione distribuita i servizi (es. process migration) sono gestiti dalle applicazioni Consente accesso esplicito alle risorse di differenti macchine tramite: accesso remoto → logging remoto alla macchina remota corretta desktop remoto (Windows) trasferimento dati da macchine remote a macchine locali, tramite protocollo FTP (File Transfer Protocol) Middleware Il middleware aggiunge un ulteriore layer in cima al NOS implementando servizi di tipo general–purpose, e vuole offrire trasparenza distribuita. I servizi sono implementati affinché possano essere resi trasparenti alle applicazioni (rendere trasparenti alcuni aspetti del sistema distribuito). I servizi possono risolvere diversi problemi, da quelli specifici a quelli più generici: naming (nomenclatura) → nomi simbolici per identificare le entità di un sistema distribuito. access transparency (trasparenza all’accesso) → modello di comunicazione che nasconde dettagli sul passaggio di messaggi. persistence (persistenza) → è definito un servizio automatico per immagazzinare i dati. transazioni distribuite → modelli di persistenza per assicurare consistenza operazioni read e write. security (sicurezza) → definisce modelli per la protezione degli accessi alle risorse e dati e dei servizi, e garantire integrità della computazione. 5 Modello Client-Server Il modello client–server è il modello di interazione tra un processo client ed un processo server. Si tratta di un modello non concorrente, che prevede che un nodo client acceda ad un nodo server tramite una richiesta e che il server risponda tramite un risultato. accesso a server multipli accesso tramite server Proxy Le configurazioni possono prevedere accesso a server multipli oppure accesso via proxy. Problematiche Fondamentali di un Sistema Distribuito Ogni sistema distribuito presenta quattro problematiche: identificare la controparte → assegnare nomi (naming), [processo o risorsa]. accedere alla controparte → stabilire un riferimento (access point) [come accedere alla risorsa o al processo]. comunicazione prima → come possono i partecipanti scambiare messaggi? Occorre concordare e condividere un formato (protocollo). comunicazione seconda → come possono i partecipanti comprendere il contenuto di un messaggio? Occorre concordare la sintassi e la semantica di un messaggio (still an open issue – ancora una questione aperta). name, address, protocol, understand. Trasparenza Distribuita La trasparenza nasconde i dettagli all’utente, il quale può ignorare cosa sta accadendo e non può influenzare il servizio fornito. Possono esserci differenti tipi di trasparenza: naming → (nomenclatura) nomi simbolici vengono utilizzati per identificare parti del sistema distribuito access transparency (trasparenza all’accesso)→ differenze nella rappresentazione dati e come si accede alle risorse locali o remote. location transparency (trasparenza del luogo) → nasconde dove una certa risorsa risiede nella rete. relocation transparency (trasparenza della riallocazione e della mobilità) → nasconde che una risorsa può essere trasferita (rilocata) in un altro nodo mentre è in uso. 6 migration transparency (trasparenza della migrazione) → nasconde che una certa risorsa può essere trasferita. replication transparency (trasparenza della replicazione) → nasconde che una risorsa può essere stata replicata. concurrency transparency (trasparenza della concorrenza) → nasconde che una certa risorsa può essere condivisa tra più utenti indipendenti (assicurandosi la consistenza del suo stato). failure transparency (trasparenza dei fallimenti) → nasconde i fallimenti e il recupero di una certa risorsa. persistence transparency (trasparenza della persistenza) → nasconde che una certa risorsa può essere volatile o può essere memorizzata permanentemente. Trasparenza Distribuita – Gradi di Trasparenza Richiedere una trasparenza distribuita completa potrebbe essere eccessivo, costando in termini di prestazioni a causa di latenze di comunicazione e fallimenti indipendenti. In quanto il sistema non è in grado di distinguere un computer lento da uno che sta fallendo ed entrambi gli scenari non possono essere nascosti. Una trasparenza completa impatta le performance: richiede del tempo aggiuntivo per tenere le repliche dei dati aggiornate con il nodo principale, e per effettuare il flush delle operazioni di scrittura sul disco per permettere la tolleranza ai guasti (fault tolerance). Esporre la distribuzione potrebbe essere in alcuni casi utile: permette all’utente di usare la risorsa più vicina, viene esposta per rendere all’utente più comprensibile cosa sta accadendo (es. messaggi di errore di timeout). Information Hiding e Astrazione L’information hiding è un concetto fondamentale nell’ingegneria del software. Essa è la separazione tra quale servizio o componente il sistema offre, e come il servizio è implementato e “installato” (deployed). Il quale è definito da un “Interface Definition Language” (IDL) che ha lo scopo di definire l’“Application Programming Interface” (API) dei componenti del sistema. Dovrebbe, quindi, essere annotata semanticamente (cioè dovrebbe descrivere le informazioni scambiate e i comportamenti prescritti). Il come è implementato con uno strumento (framework, middleware, etc…) che è adatto per quel problema o all’ambiente in cui il sistema deve operare. Dovrebbe, quindi, essere implementato con algoritmi e tecnologie efficaci ed efficienti. L’interfaccia deve essere progettata sulla base di principi condivisi (comuni), completa e neutrale e deve supportare interoperabilità, portabilità ed estendibilità. Politiche e Meccanismi Un sistema distribuito dovrebbe essere costituito da componenti indipendenti: indipendenza logica → ogni componente fornisce autonomamente un servizio o performa un task (svolge una mansione). composizione → ogni componente utilizza o collabora con altre componenti per svolgere o eseguire un servizio o task più complesso. Una politica definisce quando una operazione deve essere effettuata, come le capacità possono essere sfruttate per definire comportamenti. Un meccanismo definisce come una operazione deve essere effettuata, capacità offerte dai componenti. 7 Le politiche semplificano la gestione e riducono la complessità a costo della flessibilità del programma. Più netta è la separazione tra politiche e meccanismi, più è necessario definire meccanismi adeguati a supporto di queste politiche, quindi più è complessa la gestione. Nelle applicazioni reali, la separazione è complessa da raggiungere. Il Concetto di Protocollo Un protocollo definisce il formato, l’ordine di invio e di ricezione dei messaggi tra i dispositivi, il tipo dei dati e le azioni da eseguire quando si riceve un messaggio. In un sistema distribuito è necessario concordare un protocollo per permettere ai processi di formulare richieste e comprendere messaggi. Le applicazioni su TCP / IP si scambiano stream di byte di lunghezza finita (meccanismo). Gli stream scambiati possono essere segmenti in messaggi (politica) definiti da un protocollo condiviso. [ FOTO: il file header.h definisce il protocollo usato sia dal client che dal server ]

Use Quizgecko on...
Browser
Browser