Salta ai contenuti. | Salta alla navigazione

Strumenti personali

SISTEMI DISTRIBUITI I

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
2014/2015
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, CORBA, Cloud Computing, supporto ai sistemi mobili, …)
la programmazione “mobile”, in particolare smartphone (in ambito iOS e Android).

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;
saper sviluppare applicazioni smartphone in ambito iOS e Android.

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 48 ore di didattica tra lezioni ed esercitazioni. In particolare sono previste 40 ore di lezione in aula e 8 ore di esercitazioni guidate in laboratorio.
Introduzione ai sistemi distribuiti (6 ore). Introduzione ai sistemi distribuiti, definizioni, principali caratteristiche, proprietà e sfide progettuali. Principali modelli e architetture dei sistemi distribuiti.
La comunicazione nei sistemi distribuiti (4 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 (4 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 (6 ore). Le infrastrutture software per il supporto di servizi e applicazioni distribuite: il middleware. Definizioni, proprietà, modelli. Classificazione dei principali middleware.
Esempi di Middleware (14 ore + 4 ore di laboratorio). Esempi principali di infrastrutture middleware: Web Services (SOAP e ReST), il middleware a oggetti distribuiti (CORBA), il Cloud Computing (Heroku, AWS, OpenStack), Mobile Computing, infrastrutture software a supporto della Internet of Things (IoT) anche in ambiente industriale (manufacturing 2.0).
La programmazione smartphone (6 ore + 4 ore laboratorio). Introduzione alla programmazione smartphone. L’ambiente di programmazione iOS. L’ambiente di programmazione Android.

Metodi didattici

Il corso è organizzato nel seguente modo:
lezioni in aula su tutti gli argomenti del corso;
esercitazioni nel laboratorio di Informatica piccolo per l’installazione e configurazione di alcuni middleware di riferimento e per l’apprendimento delle tecniche di programmazione in ambiente smartphone. Al termine delle esercitazioni guidate gli studenti avranno libero accesso al laboratorio per ulteriori esercitazioni individuali.

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. Infine si verificheranno le abilità di programmazione in ambiente smartphone.

Testi di riferimento

Copia delle slide presentate a lezione.

Testi adottati nel corso:
G.Couloris, J. Dollimore, T. Kindberg, G. Blair, Distributed Systems – Concepts and Design, fifth edition, Addison Wesley, 2011.
A. Tanenbaum, M.Van Steen, Sistemi Distribuiti, Prentice Hall, 2007.


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