Esercizi sui sistemi distribuiti
- Andrea Pollini
- Sistemi Distribuiti
- 05 Jul, 2023
Esercizio 1: Progettazione di un’architettura distribuita
Scenario: Immaginate di dover progettare un sistema distribuito per una piattaforma di e-commerce che supporta un grande numero di utenti e gestisce una vasta quantità di transazioni.
Domanda: Definire i requisiti principali per il sistema distribuito e progettare un’architettura adatta a soddisfare tali requisiti. Descrivere i componenti principali del sistema e come interagiscono tra loro.
Esercizio 2: Comunicazioni tra processi
Scenario: In un sistema distribuito, ci sono tre processi che devono comunicare tra loro per condividere dati e coordinare le attività.
Domanda: Descrivere come i tre processi possono sincronizzarsi e scambiarsi messaggi in modo affidabile. Identificare e risolvere eventuali problemi di sincronizzazione e gestione dei messaggi che potrebbero sorgere durante l’esecuzione del sistema distribuito.
Esercizio 3: Gestione della coerenza dei dati
Scenario: Immaginate un sistema distribuito in cui più nodi condividono e modificano gli stessi dati. È necessario garantire la coerenza dei dati tra i nodi.
Domanda: Progettare un algoritmo per gestire la replica dei dati e mantenere la coerenza tra i nodi. Considerare situazioni in cui più nodi tentano di modificare lo stesso dato contemporaneamente e descrivere come risolvere i conflitti e mantenere la coerenza dei dati.
Esercizio 4: Scalabilità del sistema
Scenario: Avete progettato un sistema distribuito che gestisce una piattaforma di streaming video. Il sistema deve essere in grado di gestire un numero crescente di utenti e di fornire un’esperienza di streaming fluida.
Domanda: Analizzare la scalabilità del sistema distribuito. Identificare le sfide legate all’aumento del numero di utenti e descrivere le soluzioni per gestire il carico e migliorare le prestazioni del sistema.
Esercizio 5: Sicurezza nei sistemi distribuiti
Scenario: Un sistema distribuito gestisce transazioni finanziarie sensibili. È fondamentale garantire la sicurezza del sistema per proteggere i dati e prevenire accessi non autorizzati.
Domanda: Identificare le vulnerabilità di sicurezza che potrebbero sorgere in un sistema distribuito e progettare strategie per mitigare tali vulnerabilità. Valutare i potenziali rischi e fornire raccomandazioni per garantire un alto livello di sicurezza nel sistema.
Esercizio 6: Allocazione delle risorse
Scenario: Immaginate un sistema distribuito in cui i nodi devono condividere le risorse, come CPU e spazio di archiviazione, per eseguire determinate operazioni.
Domanda: Progettare un algoritmo di allocazione delle risorse che bilanci il carico tra i nodi e massimizzi l’utilizzo delle risorse disponibili. Considerare anche la gestione delle code di attesa per garantire una distribuzione equa delle risorse tra i nodi.
Esercizio 7: Gestione delle transazioni
Scenario: In un sistema distribuito, diversi nodi devono eseguire transazioni che coinvolgono operazioni su dati condivisi.
Domanda: Progettare un protocollo per garantire la coerenza delle transazioni nel sistema distribuito. Considerare aspetti come l’isolamento delle transazioni, la gestione dei conflitti e il ripristino in caso di guasti o interruzioni di rete.
Esercizio 8: Architettura a microservizi
Scenario: State sviluppando un’applicazione web complessa e state valutando l’utilizzo di un’architettura a microservizi invece di un’architettura monolitica.
Domanda: Descrivere l’architettura a microservizi e confrontarla con un’architettura monolitica in termini di vantaggi e svantaggi. Progettare un’architettura a microservizi per l’applicazione considerata e spiegare come i diversi servizi comunicherebbero tra loro.
Esercizio 9: Gestione delle code di messaggi
Scenario: In un sistema distribuito, i messaggi devono essere inviati tra i nodi per la comunicazione e la sincronizzazione delle attività.
Domanda: Descrivere come l’uso di code di messaggi può migliorare l’affidabilità e la scalabilità del sistema distribuito. Progettare un sistema di gestione delle code di messaggi che consenta ai nodi di inviare e ricevere messaggi in modo affidabile e sincronizzato.