MATEMATICA E INFORMATICAInformaticaAnno accademico 2023/2024
1015944 - SISTEMI CLOUD E LABORATORIO
Modulo 1015945 - SISTEMI CLOUD
Docente: Giuseppe PAPPALARDO
Risultati di apprendimento attesi
Il corso mira a fornire i fondamenti concettuali essenziali per lo sviluppo di soluzioni e sistemi Cloud e, più in generale, distribuiti. Quale esempio concreto di cloud verrà presentato, sia negli aspetti concettuali che operativi, Amazon AWS, prescelto per la completezza e ricchezza delle soluzioni e dei servizi offerti, che ne fanno un archetipo di cloud commerciale, nonché per la disponibilità di forme di utilizzo educativo gratuito. Verranno considerati prevalentemente servizi di calcolo (basati su virtualizzazione (IaaS) e di livello piattaforma (PaaS)), storage, networking, controllo dell'accesso; ed architetture con funzionalità di load-balancing ed auto-scaling.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi
Conoscenza e capacità di comprensione (knowledge and understanding): verrano acquisite conoscenza e comprensione dei fondamenti concettuali (nozioni di base, principali classi di problemi e soluzioni, aspetti architetturali) riguardanti i sistemi cloud e, più in generale, distribuiti.
Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di impiegare le soluzioni apprese e applicare i paradigmi acquisiti in contesti e scenari pratici, assimilabili a quelli oggetto del corso (o derivati da essi), tipici dello stato dell'arte della progettazione di sistemi cloud. Tali capacità saranno ulteriormente coltivate e potenziate grazie alle esercitazioni previste e nel modulo di laboratorio di questo corso.
Autonomia di giudizio (making judgements): lo studente sarà in grado di valutare comparativamente i meriti e i limiti delle soluzioni proposte, nel corso ed in letteratura, per problematiche e scenari tipici della progettazione di sistemi cloud e distribuiti, così da poter affrontare autonomamente le esigenze che gli si presenteranno nell'attività lavorativa come cloud engineer/architect.
Abilità comunicative (communication skills): lo studente apprenderà la terminologia specifica dei sistemi cloud e distribuiti e acquisirà le abilità comunicative appropriate per esprimere e discutere, ad un livello tecnico rigoroso, le problematiche di interesse.
Capacità di apprendimento (learning skills): lo studente sarà in grado di documentarsi mediante la consultazione della letteratura del settore, al fine di applicarne risultati e soluzioni in contesti concreti, in specie lavorativi, per far fronte alle problematiche progettuali e decisionali che emergono nello sviluppo e nell'implementazione di sistemi cloud.
Modalità di svolgimento dell'insegnamento
Le lezioni sono tenute in aule-laboratorio, nelle quali gli studenti possono utilizzare i PC disponibili o il proprio portatile. Esse consistono prevalentemente in sessioni live, operate dal docente, di utilizzo, amministrazione e sviluppo per il cloud. Come cornice e guida di tali sessioni, vengono proiettate delle note, condivise con gli studenti attraverso la piattaforma Teams d'ateneo o il portale Studium. Nelle esercitazioni, gli studenti sono vivamente incoraggiati a replicare e innovare le sessioni.
Le note delle lezioni non ambiscono a costituire un testo di riferimento, ma, oltre ad agevolare la comprensione, forniscono un dettaglio puntuale del materiale presentato e della documentazione tecnica da consultare quale riferimento.
Prerequisiti richiesti
Conoscenza delle principali architetture e tecnologie per lo sviluppo dei sistemi distribuiti e Web. Tali conoscenze possono essere acquisite nel relativo insegnamento del corso di laurea triennale in Informatica.
Frequenza lezioni
La frequenza è vivamente raccomandata, dato anche l'orientamento pratico dell'attività didattica, per il raggiungimento di una piena comprensione del materiale oggetto del corso.
Contenuti del corso
Fondamenti e concetti di sistemi distribuiti- Introduzione ai sistemi distribuiti: storia, motivazioni, caratteristiche.
- Sincronizzazione dei clock fisici nei sistemi distribuiti.
- Clock logici di Lamport e ordinamento temporale.
- Costruzione dello stato globale in un sistema distribuito.
- Elezione e mutua esclusione in un sistema distribuito.
- La coerenza ("consistency") in un sistema distribuito: forme forti, forme deboli e rispettive applicazioni).
- Replicazione dei dati e delle computazioni nei sistemi distribuiti.
- La tolleranza ai guasti nei sistemi distribuiti: concetti e tecniche.
Introduzione al cloud computing
- Principi e caratteristiche del cloud computing
- Modell di servizio: IaaS, PaaS, SaaS, XaaS
- Aspetti geografici del cloud computing. Regioni e availability zone di Amazon AWS. Edge locations. Availability.
- Modelli di costo e uso educational.
Cloud e servizi di calcolo
- AWS EC2. Istanze: creazione e gestione.
- Accesso sicuro con chiave pubblica-privata.
- Istanze linux e ssh. Istanze Windows.
Cloud e servizi di storage
- Servizio AWS S3.
- Bucket come contenitore di oggetti persistenti. Proprietà e permessi.
- Gestione degli oggetti di un bucket.
Controllo dell'accesso al cloud
- Servizio AWS IAM: Identity and Access Management.
- Risorse, policy di accesso e permessi
- Utenti e gruppi di utenti
- Naming in AWS: Amazon Resource Name (ARN)
- File di policy: sorgente JSON e uso del wizard per le policy
- I ruoli AWS per autorizzazioni temporanee
- Autenticazione federata
- Autenticazione multi-fattore
- Policy user/group-centric e resource-centric
- Accesso cross-acount a risorse
Cloud e networking
- Le Virtual Private Cloud (VPC) di AWS
- Regioni, availability zones, VPC e subnet
- Architetture di rete per applicazioni cloud multi-tier
- Route table e gateway nelle VPC. IP pubblici. Sottoreti private, pubbliche ed ibride.
- Sicurezza nelle VPC: NACL (Network Access Control List) e Security group. Regole stateless e stateful, inbound e outbound.
- Apparentamento (peering) tra VPC
La Command Line Interface (CLI) di AWS
- Installazione e configurazione della AWS CLI come package Python
- AWS CLI e sicurezza. Chiavi. Credenziali. Profili. Ruoli.
- Struttura e sintassi dei comandi. Parametri. Help in linea. Sintassi JSON e sintassi abbreviata.
- Esempio: AWS CLI e EC2
Il cloud elastico: load-balancing e auto-scaling in AWS
- Elastic load balancing (ELB): routing di richieste verso un pool di istanze.
- Tipi di load balancer. Creazione di un LB. Gestione di un LB ed istanze EC2 collegate. Security.
- Health check di un pool load-balanced.
- Auto-scaling. Configurazioni di lancio. Creazione e gestione. Autoscaling e ELB.
- Policy di scaling: increase e decrease. Soglie per lo scaling. Notifica mediante SNS. Stress test.
Cenni ad aspetti avanzati del cloud computing
- Servizi AWS per IOT (Internet of Things)
- Servizi per il machine learning su cloud pubblico
- Servizi per big data su cloud pubblico
- Cloud e container
Testi di riferimento
- Documentazione online, puntualmente indicata nelle Note delle lezioni (pubblicate attraverso la piattaforma Teams d'ateneo o il portale Studium).
- Sistemi distribuiti. Principi e paradigmi. Andrew S. Tanenbaum, Maarten Van Steen. Pearson/Paravia/Bruno Mondadori. 2007. ISBN 8871923669, 9788871923666
- Distributed Systems: Concepts and Design, 4th edition. Coulouris, Dollimore and Kindberg. Pearson Education. 2005.
- Note delle lezioni.
Programmazione del corso
| Argomenti | Riferimenti testi |
1 | Introduzione ai sistemi distribuiti. Motivazioni. Problematiche. Classi di soluzioni. | 4 |
2 | Sincronizzazione dei clock e clock logici. | 4 |
3 | Distributed snapshot. Stato globale di un sistema. | 4 |
4 | Nozioni di fault tolerance | 4 |
5 | Il cloud computing: motivazione e concetti, soluzioni. | 4 |
6 | Amazon web services: introduzione e architettura. | 4 |
7 | Amazon web services: principali task di amministrazione. | 4 |
8 | Amazon web services: servizi IAM di identificazione e controllo dell'accesso. | 4 |
9 | Amazon web services: EC2 e servizi di calcolo. | 4 |
10 | Amazon web services: S3 e servizi di storage. | 4 |
11 | Amazon web services: networking. | 4 |
12 | Amazon web services: console CLI. | 4 |
13 | Amazon web services: funzionalità avanzate per sviluppatori cloud. | 4 |
14 | Amazon web services: Elastic Load Balacing e Autoscaling. | 4 |
15 | Altri cloud pubblici. | 4 |
16 | Cloud privati. | 4 |
17 | Kubernetes e l'orchestrazione dei container. | 4 |
18 | Temi avanzati sul cloud: big data, machine learning, IOT | 4 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame finale consiste in un colloquio orale che verterà sugli argomenti del corso e sull'analisi di un progetto, svolto dallo studente individualmente o in un piccolo gruppo. La realizzazione del progetto comporterà l'impiego di una o più tra le tecnologie e gli strumenti presentati nel corso. Il peso del progetto sulla valutazione complessiva verrà concordato all'atto dell'assegnazione.
Gli elementi di valutazione della prova orale includono la pertinenza delle risposte, la qualità dell'esposizione (compresa la proprietà di linguaggio tecnico), la capacità operativa dimostrata in esempi concreti di attività di gestione di risorse cloud.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, previa indicazione degli organo accademici preposti, qualora le condizioni lo dovessero richiedere.
Per l'attribuzione del voto si seguiranno di norma i seguenti criteri:
- Non approvato: lo studente non ha acquisito i concetti di base e non è in grado di risolvere semplici quesiti pratici.
- 18-20: lo studente dimostra una padronanza appena sufficiente dei concetti base, e/o riesce ad impostare le soluzioni dei quesiti pratici con molta difficoltà e vari errori.
- 21-24: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di collegamento dei contenuti sono modeste, riesce a risolvere semplici quesiti pratici.
- 25-27: lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di collegamento dei contenuti sono buone, risolve i quesiti pratici con pochi errori.
- 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di padroneggiarli compiutamente e di collegarli con spirito critico; risolve i quesiti pratici in modo completo e senza errori di particolare rilievo.
Esempi di domande e/o esercizi frequenti
Applicazioni dei clock logici al multicast.
Applicazioni dei protocolli che assicurano la consistency.
Costruzione di un distributed snapshot per un sistema distribuito.
Il problema dei generali bizantini.
Data-centric e client-centric consistency.
Gestione di istanze EC2 in AWS.
Gestione di container S3 in AWS.
Gestione delle policy per le autorizzazioni con IAM di AWS.
Gestione del networking in AWS: subnetting per un applicazione 3-tier sul cloud.
Attivazione di un pool di istanze EC2 con load balancing elastico e auto-scaling con policy basate su soglie e dotate di funzionalità di notifica SNS.
English version