Salta ai contenuti. | Salta alla navigazione

Strumenti personali

SISTEMI DISTRIBUITI

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2022/2023
Docente
CESARE STEFANELLI
Crediti formativi
6
Periodo didattico
Primo Semestre
SSD
ING-INF/05

Obiettivi formativi

Il corso descrive i sistemi distribuiti, affrontandone i temi principali, i più importanti modelli e architetture e presentando infine le principali realizzazioni di sistemi, servizi e applicazioni distribuite.
L'obiettivo principale del corso consiste nel fornire agli studenti le basi per affrontare lo studio dei sistemi distribuiti e per sviluppare quindi la capacità di progettare applicazioni e servizi distribuiti che soddisfino i principali vincoli di prestazioni, scalabilità, apertura, trasparenza e sicurezza.
Le principali conoscenze acquisite saranno:
elementi di base e caratteristiche dei sistemi distribuiti.
principali modelli e architetture dei sistemi distribuiti;
paradigmi di comunicazione;
il problema della tolleranza ai guasti;
i servizi di nomi
le principali infrastrutture middleware per il supporto di servizi e applicazioni distribuite (Web Services, Oggetti Distribuiti, Cloud Computing, supporto ai sistemi mobili, …).
Alcuni seminari di approfondimento su alcune tematiche (Blockchain, programmazione smartphone, ...).

Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:
analizzare un sistema distribuito per capirne i principali componenti e le loro interazioni;
identificare i vincoli di progetto che determinano la scelta di modelli, architetture, paradigmi, più adatti per il contesto applicativo di interesse;
valutare la migliore tipologia di middleware disponibile per il supporto di una determinata applicazione;
saper configurare e installare almeno i principali middleware e piattaforme software per il supporto di servizi e applicazioni distribuite.

Prerequisiti

E’ necessario avere acquisito e assimilato le seguenti conoscenze fornite dai corsi di “Fondamenti di Informatica”, “Sistemi Operativi” e “Reti di Calcolatori”:
ottima conoscenza del linguaggio C e buona del linguaggio Java;
ottima conoscenza della programmazione di sistema in Unix (con particolare riferimento alle system call per la gestione dei processi);
ottima conoscenza della programmazione di rete in Unix (socket);
capacità di realizzare in Unix un sistema client/server come applicazione concorrente multiprocesso.

Contenuti del corso

Il corso prevede 60 ore di didattica tra lezioni ed esercitazioni. Le lezioni saranno registrate e i video saranno caricati sul sito Classroom con codice: tx7pukb

Introduzione ai sistemi distribuiti (10 ore). Introduzione ai sistemi distribuiti, definizioni, principali caratteristiche, proprietà e sfide progettuali. Principali modelli e architetture dei sistemi distribuiti.
La comunicazione nei sistemi distribuiti (6 ore). I principali paradigmi di comunicazione. Semantica della comunicazione e la tolleranza ai guasti. I sistemi di routing. I modelli di interazione.
I servizi di nomi (6 ore). Il problema del naming (come identificare le risorse) e i servizi di nomi (per trovare l’indirizzo delle risorse distribuite). Principali soluzioni ed esempio (il Domain Name System).
Il Middleware (8 ore). Le infrastrutture software per il supporto di servizi e applicazioni distribuite: il middleware. Definizioni, proprietà, modelli. Classificazione dei principali middleware.
Esempi di Middleware (18 ore). Esempi principali di infrastrutture middleware: Web Services (SOAP e ReST), il middleware a oggetti distribuiti, il Cloud Computing, Mobile Computing, infrastrutture software a supporto della Internet of Things (IoT).

Seminari di approfondimento:
La programmazione smartphone (6 ore). Introduzione alla programmazione smartphone. L’ambiente di programmazione iOS. L’ambiente di programmazione Android.
Blockchain (6 ore). Introduzione alla tecnologia. Esempi di uso in ambito smart manufacturing.

Metodi didattici

Il corso è organizzato nel seguente modo:
lezioni video registrate e caricate sul sito classroom;
Focus group in presenza e online per un confronto costante con gli studenti.

Modalità di verifica dell'apprendimento

L’obiettivo della prova d’esame consiste nel verificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
L’esame è costituito da una prova orale che valuterà la capacità di uno studente di progettare un’applicazione distribuita. A questo fine lo studente dovrà dimostrare di essere in grado di: identificare i principali requisiti di progetto dettati da uno specifico scenario applicativo di riferimento; identificare modelli e architetture più adatte per il supporto; scegliere e descrivere le caratteristiche di un middleware mettendo in luce vantaggi e svantaggi.

Testi di riferimento

I video e le slide delle lezioni sono disponibili sul sito Classroom con codice: tx7pukb

Testi adottati nel corso:
M.van Steen, A. Tanenbaum, Distributed Systems 3rd Edition (2017), gratis al link: https://www.distributed-systems.net (ringraziamo il prof. van Steen).

G.Couloris, J. Dollimore, T. Kindberg, G. Blair, Distributed Systems – Concepts and Design, fifth edition, Addison Wesley, 2011.

Approfondimenti:
Per tutti gli argomenti si consiglia di consultare le riviste edite da ACM (Association for Computing Machinery) e IEEE (Institute of Electrical and Electronic Engineering) che si possono trovare in biblioteca. Siti di riferimento www.computer.org e www.comsoc.org
Riviste più “divulgative”: IEEE Computer, ACM Communications.
Riviste di approfondimento su aree specifiche: IEEE Internet Computing, IEEE Communications, Distributed Systems OnLine (dsonline.computer.org), ACM Computing Surveys, ACM Transactions on... IEEE Transactions on .... , tutte le IETF Request for Comments (RFC)

Esempi di alcuni articoli interessanti:
programmazione concorrente: ANDREWS, SCHNEIDER, Concepts and Notations for Concurrent Programming.
Middleware: Le rfc2768 (middleware) e 1034 (DNS) sono sul sito dell'ietf
Cloud Computing: Neal Leavitt, "Is Cloud Computing Really Ready for Prime Time?", IEEE Computer, January 2009, pp. 15-20