SISTEMI CLOUD E LABORATORIO

Anno accademico 2019/2020 - 2° anno - Curriculum Sistemi di Rete e Sicurezza
Docenti Crediti: 9
SSD: INF/01 - Informatica
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 36 di lezione frontale, 24 di esercitazione, 12 di laboratorio
Semestre:

Obiettivi formativi

  • SISTEMI CLOUD

    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.

  • LABORATORIO

    Conoscenza e capacità di comprensione (knowledge and understanding): verrano acquisite conoscenza e comprensione dei concetti essenziali e di alcune tra le principali soluzioni del cloud e del web computing.
    Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di impiegare le tecnologie introdotte e sperimentate nel corso, in modo da acquisire capacità operative e progettuali nel campo del cloud computing.
    Autonomia di giudizio (making judgements): lo studente sarà in grado di valutare comparativamente i vantaggi e i limiti delle principali tecnologie disponibili nel campo del cloud computing.
    Abilità comunicative (communication skills): lo studente apprenderà la terminologia specifica del cloud computing 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 utilizzare la documentazione tecnica delle soluzioni per il cloud computing, al fine di impiegarle concretamente nelle attività di amministrazione e sviluppo per il cloud computing.


Modalità di svolgimento dell'insegnamento

  • SISTEMI CLOUD

    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 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.
    Sono previsti interventi di approfondimento tenuti da esperti del settore.

  • LABORATORIO

    Sessioni di laboratorio con esercitazioni


Prerequisiti richiesti

  • SISTEMI CLOUD

    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.

  • LABORATORIO

    Conoscenza delle principali architetture e tecnologie per lo sviluppo dei sistemi distribuiti.


Frequenza lezioni

  • SISTEMI CLOUD

    La frequenza è vivamente raccomandata, dato anche l'orientamento pratico dell'attività didattica, per il raggiungimento di una piena comprensione del materiale oggetto del corso.

  • LABORATORIO

    Consigliata, per il raggiungimento di effettive capacità operative nel campo dell'amministrazione e dello sviluppo per il cloud computing.


Contenuti del corso

  • SISTEMI CLOUD

    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 ine 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 AWS per il machine learning
    • Servizi AWS per big data
    • Cloud e container
  • LABORATORIO
    • Amazon web services
    • Microsoft azure
    • Google app engine
    • Soluzioni open: openstack
    • Virtualizzazione in ambiente Linux
    • Docker e container
    • Devops

Testi di riferimento

  • SISTEMI CLOUD
    1. Documentazione online, puntualmente indicata nelle Note delle lezioni (pubblicate attraverso il portale Studium).
    2. Sistemi distribuiti. Principi e paradigmi. Andrew S. Tanenbaum, Maarten Van Steen. Pearson/Paravia/Bruno Mondadori. 2007. ISBN 8871923669, 9788871923666
    3. Distributed Systems: Concepts and Design, 4th edition. Coulouris, Dollimore and Kindberg. Pearson Education. 2005.
  • LABORATORIO

    Documentazione tecnica resa disponibile in rete dai principali fornitori di risorse per il cloud computing.


Programmazione del corso

SISTEMI CLOUD
 ArgomentiRiferimenti testi
1Introduzione ai sistemi distribuiti. Motivazioni. Problematiche. Classi di soluzioni.[1], cap. 1 
2Sincronizzazione dei clock. Soluzioni di Cristian e Berkeley. NTP.[1], sezione 6.1 
3Clock logici e multicast totalmente ordinato.[1], sezione 6.2.1 
4Clock logici vettoriali. Ordinamenti temporali. Multicast con causal delivery.[1], sezione 6.2.2 
5Distributed snapshot. Stato globale di un sistema. Safety e liveness nei sistemi distribuiti. Mutual exclusion distribuita.[2], sezioni 11.5 e 11.6 
6Consistency nei sistemi distribuiti. Data-centric e client-centric consistency.[1], sezioni 7.1, 7.2, 7.3 
7Protocolli di coerenza per i dati. Algoritmi epidemici. Protocollo di replicazione. [1], sezioni 7.4 e 7.5 
8Affidabilità e tolleranza ai guasti nei sistemi distribuiti. Modelli di guasto. Fault masking. Fault recovery.[1], sezioni 8.1 e 8.2 
9Commit a due e a tre fasi[1], sezione 8.5 
10Checkpointing e backward recovery[1], sezione 8.6 
11Il problema dei generali bizantini[2], sezione 12.5 
12Il cloud computing: motivazione e concetti, soluzioni. materiale fornito dal docente 
13I web services e architetture a microservizimateriale fornito dal docente 
LABORATORIO
 ArgomentiRiferimenti testi
1Amazon web services: introduzione e architettura. 
2Amazon web services: principali task di amministrazione. 
3Amazon web services: servizi IAM di identificazione. 
4Amazon web services: servizi di elaborazione. 
5Amazon web services: servizi di storage. 
6Amazon web services: funzionalità avanzate per sviluppatori cloud. 
7Amazon web services: networking 
8Amazon web services: console CLI 
9Amazon web services: Elastic Load Balacing e Autoscaling 
10Docker: nozione di container 
11Docker: swarm,servizi, stack 
12Devops: sviluppo e produzione 
13Microsoft Azure: concetti e amministrazione. 
14Microsoft Azure: principali servizi ed esempi di sviluppo. 
15Google app engine. 
16Openstack: architettura e installazione. 
17Virtualizzazione in ambiente Linux. 

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

  • SISTEMI CLOUD

    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.

    Note

    • Per sostenere gli esami è necessario prenotarsi utilizzando l'apposito modulo del portale studenti.
    • In mancanza di prenotazione, l'esame non può essere nè sostenuto nè verbalizzato.
  • LABORATORIO

    Svolgimento di un progetto concordato in anticipo col docente. Discussione in sede d'esame dei risultati ottenuti.


Esempi di domande e/o esercizi frequenti

  • SISTEMI CLOUD

    NB: tutti gli esempi elencatti sotto sono trattati in maniera dettagliata nelle note di supporto alle lezioni (disponibili sul portale Studium).

    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.

  • LABORATORIO

    Impiego delle tecnologie tipiche del web e del cloud computing nella realizzazione del progetto scelto.

    Accesso ai servizi delle piattaforme Cloud presentate nel corso.