Anteprima
Vedrai una selezione di 17 pagine su 77
Cloud e Mobile Computing - Appunti completi del corso Pag. 1 Cloud e Mobile Computing - Appunti completi del corso Pag. 2
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 6
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 11
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 16
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 21
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 26
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 31
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 36
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 41
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 46
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 51
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 56
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 61
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 66
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 71
Anteprima di 17 pagg. su 77.
Scarica il documento per vederlo tutto.
Cloud e Mobile Computing - Appunti completi del corso Pag. 76
1 su 77
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

AWSElastic BeanStalk e AWS Lambda

AWSElastic BeanStalk è la soluzione PaaS di Amazon: permette di ottenere un ambiente di sviluppo per applicazioni e servizi web. Gli sviluppatori possono caricare il codice dell'applicazione, mentre il servizio crea in modo automatico l'ambiente di esecuzione, gestisce il bilanciamento del carico su diverse macchine e monitora le applicazioni. Lo sviluppatore deve solo fornire il codice, mentre Elastic BeanStalk rende molto meno complessa la gestione dell'applicazione. Elastic BeanStalk gestisce automaticamente:

  • approvvigionamento delle risorse
  • bilanciamento del carico
  • dimensionamento automatico con Auto Scaling
  • monitoraggio

AWS Lambda è un servizio di serverless computing: il server viene completamente gestito da Amazon, mentre l'utente fornisce solo il codice. L'utente non fornisce ad Amazon l'applicazione intera, ma solo un insieme di funzioni il cui codice sarà eseguito solo se necessario e se richiesto.

Casi

d'uso:

  • Processamento dei dati: esegue codice in risposta a trigger, in seguito a cambiamento dei dati o azioni dell'utente
  • Applicazioni web: AWS Lambda può essere combinato ad altri servizi di AWS, in modo da rendere scalabile ed efficiente una parte dell'applicazione web che potrebbe rappresentare un collo di bottiglia
  • Processamento di file real-time: processa dati immediatamente dopo il loro caricamento.

AWS Fault Injection Simulator (FIS)

Si vuole progettare un'infrastruttura di rete con alta reliability e availability, sotto l'ipotesi che qualcosa potrebbe andare storto o si potrebbe verificare un problema non considerato durante la progettazione.

Si procede stressando l'infrastruttura, creando problemi in modo più o meno casuale: si spegne parte dell'infrastruttura senza alcun preavviso per vedere se l'infrastruttura è in grado di reagire in modo pronto ai problemi (es. spegnere VM, spegnere router, staccare dischi).

In modo virtuale, etc.). È utile fare test di chaos engineering nei momenti in cui si ha un numero limitato di utenti. Si procede accendendo e spegnendo servizi in modo più o meno casuale: se le prestazioni del servizio degradano sotto un certo livello allora si hanno dei problemi e si riattivano i servizi prima che i problemi diventino importanti.

Un container è un ambiente di esecuzione che limita l'accesso alle risorse a cui può accedere un processo che gira al suo interno. I processi hanno quindi un accesso limitato alle risorse: vedono solo le risorse che si trovano all'interno del container. Si ha l'esecuzione isolata dei componenti software di un'applicazione, in modo da poter spostare un componente da un ambiente di sviluppo a uno di esecuzione.

Rispetto alle macchine virtuali, i container forniscono un simile livello di isolamento dei componenti software a un costo in termini di performance significativamente inferiore: ad esempio,

in un altro namespace, creando così un ambiente isolato per l'esecuzione dei container. ● Cgroups: permettono di limitare e gestire le risorse (CPU, memoria, I/O) utilizzate dai processi all'interno di un container. ● Union file system: permette di creare un filesystem virtuale che combina i file e le directory di più filesystem in uno solo, consentendo così di creare immagini dei container leggere e veloci da avviare. Container e Docker Docker è diventato il tool di riferimento per la gestione dei container. Fornisce un'interfaccia semplice ed intuitiva per creare, gestire e distribuire i container. Docker permette di creare immagini dei container, che possono essere condivise e riutilizzate in diversi ambienti. Vantaggi dei container I container offrono diversi vantaggi rispetto alle macchine virtuali tradizionali: ● Leggerezza: i container condividono il kernel del sistema operativo host, riducendo così l'overhead e il consumo di risorse. ● Velocità: i container possono essere avviati e fermati in pochi secondi, consentendo un deployment rapido e scalabile delle applicazioni. ● Isolamento: i container forniscono un ambiente isolato per l'esecuzione delle applicazioni, garantendo che le risorse e le dipendenze siano gestite in modo separato. ● Portabilità: le immagini dei container possono essere facilmente distribuite e eseguite su diversi ambienti, garantendo la stessa esperienza di esecuzione. Conclusioni I container rappresentano una soluzione innovativa per lo sviluppo e il deployment delle applicazioni. Grazie alla loro leggerezza, velocità e portabilità, i container consentono di creare ambienti isolati e scalabili, facilitando così il continuous integration e il continuous deployment.
  • in altri Namespace
    • Control groups (Cgroups): limitano le risorse ad un gruppo di processi
    • Layered file system: filesystem a più strati
  • Namespace
  • I namespace rappresentano un meccanismo fornito dal kernel di Linux per l'isolamento logico dei processi.

    Esistono diversi tipi di Namespace, tra i principali:

    • Pid namespace: processo padre vede solo i propri figli
    • Network namespace: abilita comunicazioni di rete solo all'interno dei processi, potendo usare porte già usate da altri processi all'interno della stessa macchina
  • Control groups (Cgroups)
  • Rappresenta il meccanismo di controllo per limitare il set di risorse assegnate a un container o a un gruppo di container.

    Serve ad impedire che i container di un Control group utilizzino più risorse di quelle assegnate (es. RAM, CPU, etc.).

    Il kernel fornisce diversi cgroup controller, ciascuno dei quali gestisce una specifica risorsa.

    I cgroup sono controllati attraverso uno specifico file system, chiamato

I cgroup possono essere organizzati gerarchicamente. È complicato verificare che le risorse limitate vengano fornite in modo giusto (senza rallentamenti, no starvation, etc.), per cui è stato sviluppato uno scheduler di nuova generazione chiamato CFQ (Completely Fair Queuing). Consente di definire un file system come un insieme di vari strati, di alto e basso livello: consentono di condividere i file su disco, salvando una quantità di spazio considerevole e consentendo un avvio più rapido dei container.
  • Lo strato di alto livello è uno strato read and write
  • Gli strati di basso livello sono strati read-only: vengono inseriti file e librerie da rendere accessibili nell'applicazione
Strati:
  • Container mount: i file in questo strato non esistono, ma vengono presi dal primo dei layer in cui si trova il file partendo dall'alto
  • Container layer
  • Image layer: può contenere ad esempio un'immagine di una

La distribuzione di Linux, che può essere condivisa da più container. In questo modo il file è salvato una sola volta nel filesystem, comportando un accesso più rapido ai file e un notevole risparmio di spazio.

Docker è la prima implementazione importante dei container, datata 2013, che ha portato poi allo sviluppo di altre tecnologie poi diventate standard. La rilevanza di Docker è decisamente diminuita da quanto Kubernetes ha deciso di rimuovere il Docker daemon dalla propria architettura in favore di container-d.

In Linux esistono altre soluzioni alternative, come podman.

Architettura di Docker: Docker è un sottosistema che gira completamente in user-space e supporta la creazione e la gestione dei container che gestiscono i diversi spazi. Docker daemon fornisce tutte le funzionalità di creazione e gestione dei container: è accessibile sia da linea di comando che da interfaccia remota. I container risiedono in spazi di memoria diversi.

file chiamato Dockerfile. Un Dockerfile è un file di testo che contiene una serie di istruzioni che Docker utilizzerà per creare un'immagine del container. Le istruzioni nel Dockerfile includono comandi come FROM, RUN, COPY, EXPOSE, CMD, e molti altri. Esempio di Dockerfile: ``` FROM ubuntu:latest RUN apt-get update && apt-get install -y python3 COPY app.py /app.py EXPOSE 8080 CMD ["python3", "/app.py"] ``` Nell'esempio sopra, il Dockerfile inizia con l'istruzione `FROM` che specifica l'immagine di base da utilizzare (in questo caso, l'ultima versione di Ubuntu). Successivamente, l'istruzione `RUN` viene utilizzata per eseguire comandi all'interno del container, in questo caso per aggiornare il sistema e installare Python3. L'istruzione `COPY` copia il file `app.py` all'interno del container. L'istruzione `EXPOSE` specifica la porta su cui il container sarà in ascolto. Infine, l'istruzione `CMD` specifica il comando da eseguire quando il container viene avviato. Una volta creato il Dockerfile, è possibile utilizzare il comando `docker build` per creare un'immagine del container utilizzando il Dockerfile come input.

Il Dockerfile specifica come creare un container a partire da un'immagine preesistente o nuova. Ogni istruzione dei Dockerfile genera un nuovo image layer: maggiore è il numero di istruzioni del Dockerfile, maggiore è il numero di strati contenuti nelle immagini del container.

Se si ha bisogno di utilizzare strumenti di sviluppo durante la build che devono essere disponibili nell'immagine, si può creare un'immagine multi-stage:

  • 1° stage: esegue il build del 2° stage. È usato solo per generare l'esecuzione
  • 2° stage: l'immagine viene messa in esecuzione escludendo parte del file richiesta e installata, ossia manda l'applicazione in esecuzione.

Docker Compose

Docker Compose è uno strumento per la gestione di un'applicazione realizzata tramite diversi container che collaborano tra loro. Utilizza un approccio dichiarativo: il programmatore descrive lo stato che Docker Compose deve

raggiungere in un file di configurazione yml, con Compose che si occupa di eseguire e connettere tra di loro i container necessari per raggiungere lo stato descritto dallo sviluppatore. Di default Compose realizza una singola rete in cui posiziona tutti i container, ma è possibile creare topologie di rete più complesse. Docker Swarm Docker Swarm è un sistema di clustering che permette di trattare un gruppo di Docker Engine come se fosse un singolo Docker Engine virtuale. Containers e Immagini Un'immagine Docker è composta da una serie di strati (layer): tutti i layer sono read-only a parte l'ultimo che è read-write. L'immagine viene associata a un filesystem layered: il container viene messo in esecuzione utilizzando un'immagine di dimensione inferiore rispetto alle VM grazie alla struttura a strati, in cui le immagini negli strati inferiori sono condivise. Si utilizza quindi un filesystem layered come base delle immagini, che poi vengonoutilizzando il tag html

per ogni paragrafo, il testo formattato sarebbe il seguente:

I Docker Volumes permettono ad un container di accedere ad una porzione del filesystem abbastanza larga, che sia condivisibile con altri container e di monitorare la porzione nel sistema ospite e all'interno del container.

I layered filesystem sono pensati per contenere un immagini abbastanza piccole, contenenti solo il minimo indispensabile per eseguire l'applicazione. Si ha infatti che non per tutte le applicazioni è necessario un file system ridotto, ma di avere una larga parte di storage e di avere filesystem condivisi con altri container.

I Registry sono dei repository di immagini e possono essere pubblici o privati. I registri pubblici presentano criticità di sicurezza, in quanto chiunque può fare un account e caricare immagini: alcune sono caricate

Dettagli
Publisher
A.A. 2020-2021
77 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher elefante1234 di informazioni apprese con la frequenza delle lezioni di Cloud e mobile computing e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Ferrara o del prof Tortonesi Mauro.