Want to create interactive content? It’s easy in Genially!
I sistemi Distribuiti
Pietro La Pietra
Created on December 28, 2023
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Geniaflix Presentation
View
Vintage Mosaic Presentation
View
Shadow Presentation
View
Newspaper Presentation
View
Zen Presentation
View
Audio tutorial
View
Pechakucha Presentation
Transcript
I SISTEMI DISTRIBUITI
Danilo Gargano
INDICE
Wearable Computing
Informazioni generiche
L'architettura Client-Server
I SD
Le applicazioni
L'architettura Collaborativa e completamente distribuita
Vantaggi
L'architettura a livelli
Svantaggi
L'HTTP
La Trasparenza
I codici di stato
Le architetture
Le tecnologie client-side
Il Cluster computing
Unicast e Multicast
Il Grid Computing
Sistemi Distribuiti Pervasivi
I Layer dell'HTTP
Le 3 architetture
Caratteristiche Principali
Cos'è un SD?
Obiettivo Comune
Un sistema distribuito è una collezione di computer indipendenti che appaiono agli utenti come un unico sistema coerente.
L'obiettivo di un sistema distribuito è quello di operare insieme per raggiungere un obiettivo comune, sfruttando le risorse distribuite.
I sistemi distribuiti si distinguono per la comunicazione e coordinazione tra i componenti hardware o software, che sono posizionati in calcolatori collegati in rete.
I SD
I sistemi distribuiti sono un tipo di sistema informatico composto da più componenti che operano insieme per raggiungere un obiettivo comune.A differenza dei sistemi centralizzati, in cui un singolo server gestisce tutte le operazioni, i sistemi distribuiti distribuiscono le responsabilità tra più nodi o computer interconnessi. Questi nodi comunicano e coordinano le proprie attività per fornire un servizio o eseguire un'applicazione. Nei sistemi centralizzati, le applicazioni operano su un singolo processore o, più in generale, su un'unica macchina che funge da host. Questa macchina costituisce l'unico componente autonomo nel sistema e viene condivisa da diversi utenti. Tutte le risorse presenti in tale componente sono costantemente accessibili agli utenti condivisi nel sistema.
Nei sistemi distribuiti, le applicazioni sono composte da diverse attività cooperative, che vengono eseguite simultaneamente su un insieme di unità di elaborazione indipendenti. Questi sistemi risultano dalla combinazione di singoli processori, sistemi di memorizzazione e dispositivi periferici, che lavorano in collaborazione per svolgere le operazioni necessarie.
Le applicazioni
All'interno di un sistema distribuito abbiamo vari ruoli: Client: Un client è un'applicazione o un processo che richiede servizi o risorse da un altro componente, noto come server. Il client inizia la comunicazione inviando richieste al server e attende una risposta. Può essere un'applicazione utente, un dispositivo hardware o un modulo software che richiede l'esecuzione di un servizio.
Actor: L'attore è un'entità concorrente che può ricevere e inviare messaggi in un ambiente distribuitoNegli ambienti distribuiti, gli attori sono utilizzati per modellare entità concorrenti che esistono su nodi separati. Ogni attore ha un proprio stato interno, e le comunicazioni avvengono attraverso lo scambio di messaggi. Gli attori sono utili per la gestione della concorrenza e la progettazione di sistemi altamente scalabili.
Server: Un server è un componente che fornisce servizi, risorse o dati ai client. Risponde alle richieste del client e gestisce le risorse richieste. I server sono progettati per ascoltare le richieste in entrata, elaborarle e restituire i risultati al client. Possono essere fisicamente distribuiti su più nodi per gestire carichi elevati o garantire la disponibilità.
Condivisione delle Risorse: I sistemi distribuiti consentono la condivisione efficiente delle risorse, come file, stampanti e dispositivi di archiviazione. Questa condivisione facilita la cooperazione tra utenti e applicazioni.
I Vantaggi di un SD
Affidabilità e Ridondanza: La distribuzione delle risorse su più nodi consente di migliorare l'affidabilità del sistema. Se un nodo fallisce, altri possono continuare a fornire i servizi richiesti, garantendo la continuità del sistema.
Miglior Utilizzo delle Risorse: La distribuzione delle risorse permette di utilizzare meglio la capacità computazionale complessiva del sistema. I carichi di lavoro possono essere bilanciati tra i nodi per massimizzare l'utilizzo delle risorse disponibili
Tolleranza ai Guasti: La distribuzione delle risorse può migliorare la tolleranza ai guasti. Se un nodo fallisce, il sistema può continuare a funzionare grazie alla presenza di altri nodi. I meccanismi di ripristino e di rilevamento dei guasti possono essere implementati per mantenere la stabilità del sistema.
Scalabilità: I sistemi distribuiti possono essere facilmente scalati aggiungendo nuovi nodi alla rete. Questo rende possibile gestire un aumento della domanda senza dover sostituire o aggiornare un singolo sistema centralizzato.
Privacy e Sicurezza: La distribuzione dei dati può contribuire a migliorare la sicurezza e la privacy. La decentralizzazione può rendere più difficile per un attaccante compromettere l'intero sistema.
Prestazioni Migliorate: La distribuzione delle risorse può portare a prestazioni migliorate, in quanto la computazione può essere parallela e distribuita su più nodi. Ciò è particolarmente utile per applicazioni che richiedono un'elevata capacità di calcolo.
Coerenza dei Dati: Mantenere la coerenza dei dati su nodi distribuiti può essere complesso. La sincronizzazione e la gestione della coerenza richiedono particolare attenzione per evitare inconsistenze nei dati.
I Svantaggi di un SD
Complessità: La progettazione, lo sviluppo e la gestione di sistemi distribuiti sono generalmente più complessi rispetto ai sistemi centralizzati. La complessità aumenta con il numero di nodi coinvolti.
Costi: La distribuzione di hardware e risorse su più nodi può comportare costi aggiuntivi, specialmente in termini di infrastruttura di rete e manutenzione.
Comunicazione di Rete: La comunicazione tra nodi richiede risorse di rete, e la latenza può essere un problema. La trasmissione di dati attraverso la rete può causare ritardi rispetto a sistemi locali.
Tolleranza ai Guasti: Sebbene la distribuzione possa migliorare la tolleranza ai guasti, può anche complicare la gestione di situazioni di errore, richiedendo meccanismi sofisticati per il rilevamento e il recupero da guasti.
Sicurezza: La sicurezza nei sistemi distribuiti è una sfida complessa. La distribuzione delle risorse su una rete può aumentare i rischi di accesso non autorizzato e di attacchi informatici. La sicurezza deve essere attentamente gestita attraverso autenticazione, autorizzazione e cifratura.
Difficoltà nella Diagnosi dei Problemi: Identificare e risolvere i problemi di prestazioni o di errore in un ambiente distribuito può essere più complicato rispetto ai sistemi centralizzati, a causa della presenza di molti componenti interconnessi.
La trasparenza
La trasparenza nei sistemi distribuiti si riferisce alla capacità di nascondere la complessità dell'architettura distribuita e fornire agli utenti e agli sviluppatori la percezione di interagire con un sistema centralizzato e coeso. L'obiettivo è rendere il sistema distribuito "trasparente" o invisibile, in modo che gli utenti possano operare senza consapevolezza delle complicazioni dovute alla distribuzione delle risorse su più nodi. Esistono diverse forme di trasparenza nei sistemi distribuiti, ciascuna affronta specifiche sfide associate all'architettura distribuita. Le principali forme di trasparenza includono:
Trasparenza di Concorrenza (Concurrency Transparency): Questa forma di trasparenza consente ai processi di operare concorrentemente, nascondendo i dettagli dell'accesso concorrente a risorse condivise. Si implementano meccanismi di locking per garantire che l'accesso concorrente mantenga la consistenza delle risorse.
Trasparenza di Locazione (Location Transparency): La trasparenza di locazione nasconde agli utenti la conoscenza di dove si trova fisicamente una risorsa. Gli utenti possono accedere alla risorsa senza dover preoccuparsi della sua posizione effettiva. Ad esempio, un URL che nasconde l'indirizzo IP di un server web.
Trasparenza di Accesso (Access Transparency): Questa forma di trasparenza cerca di nascondere le differenze nella rappresentazione dei dati e nelle modalità di accesso alle risorse. Gli utenti dovrebbero poter accedere alle risorse locali e remote utilizzando le stesse operazioni, in modo uniforme.
Trasparenza alla Migrazione (Mobility Transparency): La trasparenza alla migrazione nasconde eventuali spostamenti, sia logici che fisici, di una risorsa. Gli utenti continuano a interagire con la risorsa senza essere influenzati dal suo spostamento.
Trasparenza di Replicazione (Replication Transparency): La trasparenza di replicazione permette di duplicare risorse senza che gli utenti ne siano consapevoli. Gli utenti vedono le risorse replicate come una singola entità, migliorando l'affidabilità e le prestazioni del sistema.
Trasparenza di Scalabilità (Scaling Transparency): La trasparenza di scalabilità permette al sistema di espandersi senza interruzioni o modifiche significative al funzionamento. Il sistema può adattarsi dinamicamente al variare del carico di lavoro.
Trasparenza alle Prestazioni (Performance Transparency): La trasparenza alle prestazioni nasconde le operazioni necessarie per riconfigurare il sistema in risposta a variazioni di carico al fine di migliorarne le prestazioni. Gli utenti non dovrebbero essere consapevoli delle ottimizzazioni operate dal sistema.
Trasparenza ai Guasti (Failure Transparency): Questa forma di trasparenza maschera i guasti e le procedure di recupero delle risorse distribuite. Gli utenti non dovrebbero percepire i problemi o i fallimenti di una risorsa e dovrebbero continuare a operare senza interruzioni.
Le Architetture
I sistemi distribuiti si sono evoluti verso la creazione di sistemi e dispositivi dotati di più di una CPU al fine di ottenere maggiore potenza di calcolo senza sfruttare al massimo i limiti di velocità di ciascuna CPU. Le architetture hardware possono essere categorizzate in base a due flussi di informazioni tipicamente presenti nei calcolatori: flusso delle istruzioni e flusso dei dati. A seconda di come questi flussi si combinano, si possono identificare quattro situazioni possibili: Macchine SISD (Single Instruction Single Data): un unico flusso di istruzioni e un unico flusso di dati. Macchine SIMD (Single Instruction Multiple Data): un unico flusso di istruzioni, ma con flussi di dati multipli. Macchine MISD (Multiple Instruction Single Data): flussi di istruzioni multipli, ma con un unico flusso di dati. Macchine MIMD (Multiple Instruction Multiple Data): flussi di istruzioni e dati multipli. SISD: Un computer, come la macchina di Von Neumann, che ha un solo flusso di dati e un solo flusso di istruzioni. Questa categoria include tutti i dispositivi con una singola CPU, come personal computer, workstation e mainframe. SIMD: L'elaborazione avviene su più flussi di dati contemporaneamente, ma con un unico flusso di istruzioni. Solitamente, sono presenti più processori che eseguono la stessa istruzione su dati diversi, sfruttando il parallelismo a livello di dati. Questo tipo di architettura è particolarmente adatto per calcoli vettoriali e matriciali, soprattutto in ambienti grafici. MISD: Questa categoria comprende elaboratori che eseguono più istruzioni sullo stesso flusso di dati. Ciò implica l'esistenza di più processori, ciascuno con la propria memoria e flusso di istruzioni. Sebbene questa tipologia di architettura ricordi la modalità di esecuzione delle istruzioni in pipeline, al momento non sono state ancora costruite macchine commerciali con questa configurazione. MIMD: Questa categoria include tutti gli elaboratori composti da più unità centrali di elaborazione indipendenti, capaci di lavorare su flussi di dati altrettanto indipendenti. A seconda di come è organizzata la memoria fisica, si possono distinguere: Macchine MIMD a memoria fisica condivisa (multiprocessor): con un unico spazio di indirizzamento condiviso tra tutti i processori. Macchine MIMD a memoria privata (multicomputer): con comunicazione basata su scambio di messaggi espliciti tramite procedure dedicate (send e receive).
Il cluster computing
Il cluster computing è una forma di elaborazione distribuita in cui un insieme di computer, noti come nodi o nodi di calcolo, sono collegati tra loro attraverso una rete ad alta velocità. Questi nodi collaborano per risolvere un problema o eseguire un'applicazione, suddividendo il carico di lavoro tra di loro. Ogni nodo in un cluster può essere un computer autonomo con la propria CPU, memoria e sistema operativo. Caratteristiche principali del cluster computing includono: Parallelismo: I cluster sono progettati per sfruttare il parallelismo, consentendo a più nodi di lavorare contemporaneamente su diverse parti del problema. Comunicazione veloce: La comunicazione tra i nodi avviene tramite una rete ad alta velocità, riducendo al minimo i ritardi e consentendo una cooperazione efficiente. Scalabilità: I cluster possono essere facilmente scalati aggiungendo o rimuovendo nodi in base alle esigenze di elaborazione. Affidabilità: La ridondanza dei nodi in un cluster migliora l'affidabilità complessiva del sistema.
Il Grid Computing
Il grid computing va oltre il concetto di cluster, coinvolgendo risorse di calcolo distribuite geograficamente attraverso una rete. In un sistema di grid computing, le risorse di calcolo possono appartenere a organizzazioni diverse e possono variare in termini di capacità di elaborazione, architettura hardware e software. Caratteristiche principali del grid computing includono: Distribuzione geografica: Le risorse di calcolo sono distribuite su diverse località geografiche, spesso connesse attraverso Internet o reti dedicate. Condivisione di risorse: Le risorse di calcolo, come CPU, memoria e storage, sono condivise tra diverse organizzazioni e progetti. Elevata flessibilità: Gli utenti possono accedere a risorse di calcolo distribuite senza dover gestire direttamente l'infrastruttura sottostante. Soluzioni per problemi complessi: Il grid computing è spesso utilizzato per risolvere problemi computazionali complessi che richiedono un'enorme quantità di risorse di calcolo.
Sistemi distribuiti pervasivi
Una generazione innovativa di sistemi distribuiti con nodi compatti, agili, dotati di connessioni di rete senza fili e spesso integrati in un contesto più ampio. Alcuni requisiti chiave per i sistemi pervasivi includono: Variazioni nel contesto: il sistema si integra in un ambiente che può mutare continuamente; Composizione ad hoc: ciascun nodo può essere impiegato in modi molto vari dai diversi utenti; Necessità di una configurazione agevole; Condivisione come impostazione predefinita: i nodi possono entrare e uscire, fornendo informazioni e servizi destinati alla condivisione.
Wearable computing
Il Wearable Computing rappresenta un'affascinante evoluzione nei sistemi distribuiti, poiché si concentra sull'integrazione di dispositivi tecnologici direttamente sugli indumenti o sugli accessori personali. Questa nuova frontiera offre opportunità significative per migliorare l'interazione dell'utente con il mondo digitale, fornendo funzionalità computazionali e di comunicazione accessibili ovunque. Abbiamo varie caratteristiche: Indossabilità: I dispositivi di Wearable Computing sono progettati per essere indossati direttamente dagli utenti, offrendo un'estensione naturale dei sistemi distribuiti verso il corpo umano. Connettività Ubiqua: La presenza di connettività wireless, come Bluetooth o Wi-Fi, sottolinea la natura distribuita di questi dispositivi, consentendo comunicazioni fluide tra wearables e altri nodi della rete. Sensori Integrati: I sensori incorporati nei wearables, come accelerometri, giroscopi e sensori di frequenza cardiaca, aggiungono una dimensione sensoriale distribuita, permettendo il monitoraggio e la raccolta di dati in tempo reale. Interazione User-Friendly: Interfacce utente intuitive, come schermi touchscreen, comandi vocali e gestuali, rendono l'interazione con i dispositivi indossabili accessibile e senza sforzo, sfruttando la facilità d'uso come pilastro fondamentale.
L'architettura client server
L'architettura client-server è un modello di progettazione distribuita ampiamente utilizzato nella realizzazione di sistemi complessi, in particolare nell'ambito dei sistemi distribuiti. Questo modello fornisce una struttura chiara e scalabile per la gestione delle risorse e la distribuzione delle responsabilità tra le varie componenti del sistema. Essa si basa su: Separazione delle Responsabilità: Il modello client-server si basa sulla separazione chiara delle responsabilità tra il client e il server. Il client gestisce l'interfaccia utente e le operazioni di presentazione, mentre il server gestisce l'elaborazione delle richieste, l'accesso ai dati e la logica di business. Comunicazione: La comunicazione tra client e server avviene attraverso protocolli di comunicazione standard, come HTTP, TCP/IP o UDP. I client inviano richieste al server, che a sua volta risponde fornendo dati, eseguendo operazioni o restituendo risultati specifici. Sincronizzazione e Asincronia: La comunicazione tra client e server può essere sincrona o asincrona a seconda delle esigenze dell'applicazione. Le richieste sincrone richiedono una risposta immediata, mentre le richieste asincrone consentono al client di continuare le proprie operazioni senza attendere una risposta immediata dal server.
L'architettura client server
Essa è composta da: Client: Il client costituisce il front-end dell'applicazione e interagisce direttamente con l'utente finale. Invia richieste al server, gestisce la presentazione dei dati e fornisce un'interfaccia utente intuitiva. Può essere implementato su diversi dispositivi, come computer personali, smartphone, tablet o dispositivi indossabili. Server: Il server è il back-end dell'applicazione, responsabile dell'elaborazione delle richieste provenienti dai client. Gestisce l'accesso ai dati, esegue operazioni specifiche e fornisce risposte ai client. Può essere implementato su macchine dedicate o distribuito su più server, a seconda della complessità del sistema.
L'architettura collaborativa e completamente distribuita
L'evoluzione del modello client-server porta all'architettura collaborativa, che si fonda su entità autonome che esportano e richiedono servizi secondo il paradigma di sviluppo a componenti, in linea con l'approccio di programmazione a oggetti lato server. L'Architettura Completamente Distribuita invece è tipica di sistemi in cui è necessaria la collaborazione tra gruppi di entità paritarie, come nei sistemi di groupware, che comunicano tra loro offrendo ognuno i propri servizi e richiedendo servizi che talvolta possono essere duplicati per garantire la tolleranza ai guasti.
L'Architettura a Livelli
L'architettura a livelli è un modello organizzativo fondamentale nei sistemi distribuiti, in cui i componenti sono organizzati in strati distinti, ognuno con funzionalità specifiche. Questo approccio mira a migliorare la modularità, la manutenibilità e la scalabilità dei sistemi, facilitando allo stesso tempo lo sviluppo, l'aggiornamento e la comprensione dell'architettura complessiva. Essa è strutturata così: Livello di Presentazione: Il livello superiore gestisce l'interfaccia utente e la presentazione dei dati. Si occupa della visualizzazione e dell'interazione con l'utente. Livello di Applicazione: Questo livello implementa la logica di business e le funzionalità specifiche dell'applicazione. Si basa su informazioni dal livello di presentazione e prepara i dati per l'elaborazione successiva. Livello di Business: Gestisce la logica di business principale, eseguendo le operazioni specifiche richieste dalle funzionalità dell'applicazione. Manipola i dati provenienti dal livello di applicazione. Livello di Dati: Questo è il livello più basso, responsabile della gestione e della manipolazione diretta dei dati. Fornisce un'interfaccia standardizzata per il salvataggio e il recupero delle informazioni.
L'HTTP
Il World Wide Web opera seguendo il paradigma client-server, caratterizzato da due distinti componenti: Utenti (client), attivi nell'impiego del protocollo HTTP per stabilire connessioni con i server, utilizzando URL per identificare risorse e richiedendo pagine Web dai server per visualizzarne il contenuto. Server, passivi e in attesa di potenziali connessioni da nuovi client su specifiche porte TCP. Questi utilizzano il protocollo HTTP per interagire con i client e offrono alle richieste delle risorse web richieste, come documenti, pagine o elementi di una singola pagina Web, da un host noto come server a un altro denominato client.
L'HTTP
Il dialogo client-server nell'HTTP rappresenta il processo di comunicazione tra un client e un server basato sul protocollo HTTP (Hypertext Transfer Protocol), che è alla base del funzionamento del World Wide Web. Questo dialogo segue una serie di passaggi standard, noti anche come ciclo di richiesta-risposta. Vi sono 5 passaggi: Inizializzazione della connessione: Il client inizia stabilendo una connessione con il server. Richiesta HTTP: Dopo che la connessione è stata stabilita, il client invia una richiesta HTTP al server. Elaborazione della richiesta da parte del server: Il server riceve la richiesta HTTP e la elabora. Questo coinvolge la determinazione della risorsa richiesta, l'esecuzione di eventuali operazioni richieste dalla richiesta. Risposta HTTP: Il server invia una risposta HTTP al client. Questa risposta include uno stato di risposta (indicando se la richiesta è stata elaborata con successo o se si è verificato un errore), eventuali dati richiesti e metadati aggiuntivi come gli header HTTP. Chiusura della connessione: A seconda delle impostazioni e del tipo di connessione, la connessione può essere chiusa dopo che il server ha fornito la risposta. Tuttavia, nelle moderne implementazioni di HTTP, spesso si preferisce mantenere aperta la connessione (keep-alive) per consentire transazioni successive con minor ritardo.
I codici di stato
I codici di stato nell'HTTP sono numeri a tre cifre restituiti dal server web al client per indicare l'esito di una richiesta HTTP. Questi codici forniscono informazioni sul risultato della richiesta e guidano il comportamento del client e di eventuali intermediari nella gestione della risposta. I codici di stato sono inclusi nelle risposte HTTP nei campi delle righe di stato. I codici di stato sono suddivisi in cinque classi principali, ognuna delle quali rappresenta una categoria generale di risultati: 1xx (Informational): Fornisce informazioni sull'avanzamento della richiesta. Esempi includono 100 (Continue) e 101 (Switching Protocols). 2xx (Successful): Indica che la richiesta è stata ricevuta, compresa e accettata con successo. Esempi includono 200 (OK), 201 (Created) e 204 (No Content). 3xx (Redirection): Indica che ulteriori azioni devono essere intraprese per completare la richiesta. Esempi includono 301 (Moved Permanently), 302 (Found) e 304 (Not Modified). 4xx (Client Error): Indica che la richiesta contiene errori da parte del client. Esempi includono 400 (Bad Request), 403 (Forbidden) e 404 (Not Found). 5xx (Server Error): Indica che il server ha incontrato un errore o è incapace di eseguire la richiesta. Esempi includono 500 (Internal Server Error), 502 (Bad Gateway) e 503 (Service Unavailable). I codici di stato forniscono un modo rapido per interpretare il risultato di una richiesta HTTP senza dover analizzare il corpo completo della risposta. Ad esempio, un codice di stato 200 indica che la richiesta è stata elaborata con successo, mentre un codice 404 indica che la risorsa richiesta non è stata trovata sul server.
Le tecnologie client-side
Le tecnologie client-side svolgono un ruolo chiave nello sviluppo di applicazioni web moderne, mirando a migliorare l'esperienza utente e la dinamicità delle pagine. HTML, il linguaggio di markup, è utilizzato per definire la struttura dei documenti web, mentre CSS gestisce la presentazione e lo stile. JavaScript, come linguaggio di scripting, offre interattività alle pagine, consentendo manipolazioni dinamiche e risposte agli input degli utenti. Il DOM (Document Object Model) rappresenta gerarchicamente la struttura di un documento web, facilitando la manipolazione da parte di JavaScript. Le Web APIs forniscono un'interfaccia per accedere alle funzionalità del browser e integrare servizi esterni. Framework come Angular, React e Vue.js semplificano lo sviluppo, offrendo strumenti avanzati per la gestione dello stato e la creazione di interfacce utente reattive. Complessivamente, queste tecnologie consentono agli sviluppatori di creare applicazioni web dinamiche e interattive, migliorando l'usabilità e la fruibilità complessiva delle piattaforme online.
Unicast e Multicast
Nell'ambito di HTTP, le modalità di comunicazione Unicast e Multicast rivestono un ruolo significativo, influenzando l'efficienza e la gestione delle risorse nella distribuzione di contenuti web. La modalità Unicast rappresenta il metodo tradizionale di comunicazione tra un server HTTP e i suoi client. In questo approccio, ogni client stabilisce una connessione individuale con il server, inviando richieste e ricevendo risposte separatamente. Questa personalizzazione delle comunicazioni permette al server di rispondere in modo specifico alle richieste di ciascun client, offrendo contenuti personalizzati o dinamici. Nel contesto di HTTP, l'implementazione di Multicast è meno comune rispetto ad altri settori delle reti. Mentre il Multicast può offrire efficienze notevoli nella distribuzione di dati a gruppi di destinatari, è spesso meno pratico per le comunicazioni tipiche delle transazioni HTTP. Tuttavia, in alcune situazioni, l'uso di Multicast può essere considerato. Ad esempio, quando più client richiedono simultaneamente gli stessi dati, come nel caso di streaming di contenuti multimediali in tempo reale
I layer dell'http
La struttura dell'http è organizzata in diversi livelli e strati per facilitare la comunicazione tra client e server. Essa è composta da: Livelli di Applicazione, Trasporto e Rete: Applicazione: Il livello di applicazione è il punto di contatto diretto con l'utente finale, dove avviene l'interazione tramite il browser. Qui, si trova la logica di presentazione e l'interfaccia utente. Trasporto: Il livello di trasporto, spesso implementato con il protocollo TCP (Transmission Control Protocol), gestisce l'affidabilità nella trasmissione dei dati tra client e server. Garantisce la consegna corretta e completa delle risorse richieste. Strato di Applicazione HTTP: L'HTTP opera a livello di applicazione e si basa sulla suite di protocolli di trasporto, come TCP/IP. Questo strato gestisce la sintassi e la semantica delle richieste e delle risposte HTTP. Rappresentazione delle Risorse: L'interscambio di informazioni avviene attraverso la rappresentazione delle risorse, come documenti HTML, immagini, o altri contenuti web. Queste rappresentazioni sono trasferite tra client e server durante le richieste e le risposte HTTP.
Le 3 architetture utilizzate
L'evoluzione delle architetture di comunicazione è cruciale per garantire la fluidità e l'efficienza nelle interazioni tra sistemi distribuiti. la scelta tra architetture di comunicazione dipende dalle specifiche esigenze dell'applicazione. Le architetture client-server, peer-to-peer e ibride offrono approcci unici che devono essere valutati in base ai requisiti di centralizzazione, resilienza, complessità e scalabilità dell'applicazione in questione.
Le 3 architetture utilizzate
Architettura Client-Server: L'architettura client-server stabilisce una netta distinzione tra client e server, ciascuno con ruoli definiti. Nel contesto HTTP, i client sono elementi attivi che utilizzano il protocollo per richiedere risorse, mentre i server rimangono passivi, rispondendo alle richieste e fornendo le risorse desiderate. Questo modello è caratterizzato dalla centralizzazione delle risorse e dalla gestione asimmetrica dei ruoli. Architettura Peer-to-Peer: L'architettura peer-to-peer introduce un approccio decentralizzato, in cui ogni nodo, o "peer", ha la capacità di agire sia come client che come server. Questo modello promuove l'autonomia dei nodi, consentendo loro di condividere risorse direttamente tra loro. Nell'implementazione decentralizzata, la ricerca di risorse può essere più complessa, ma offre una maggiore resistenza ai guasti e una distribuzione più equa del carico. Architetture Ibride: Le architetture ibride combinano elementi di entrambi i modelli, cercando di sfruttare i vantaggi di ciascuno. Ad esempio, potrebbe essere implementato un sistema che utilizza un'architettura client-server per operazioni centralizzate critiche, mentre sfrutta il modello peer-to-peer per distribuire carichi di lavoro meno critici. Questa flessibilità consente di adattarsi alle esigenze specifiche dell'applicazione.
I 3 punti chiave
Centralizzazione vs. Decentralizzazione: Mentre l'architettura client-server centralizza risorse e controllo, il modello peer-to-peer decentralizza tali aspetti, favorendo la distribuzione e la resilienza.Complessità vs. Flessibilità: Le architetture ibride cercano di bilanciare la complessità delle implementazioni client-server con la flessibilità dei sistemi peer-to-peer, consentendo una maggiore adattabilità. Scalabilità: Mentre il modello client-server può diventare limitante con un aumento significativo di client, il peer-to-peer può gestire meglio la crescita distribuendo il carico tra i nodi.
Grazie per l'attenzione!
Danilo Gargano