Scopri tutti gli articoli e le iniziative nelle varie sezioni del portale

Più consultati


Tags

Hypervisor VS Container: Tecnologie di Virtualizzazione a confronto come risposta ai moderni modelli di sviluppo

05/11/2016


L’affermazione e la crescita del Cloud Computing in questi ultimi anni si basa anche sull’utilizzo di una serie di tecnologie che ad oggi sono largamente utilizzate in ambito IT e che spesso non sono poi così recenti. Quella che ha contribuito maggiormente a questo processo di diffusione è la virtualizzazione, nata alla fine degli anni ’60 da un gruppo di ricercatori IBM, che svilupparono con successo il CP-40 il primo sistema operativo per macchina virtuale basato su hardware completamente virtualizzato.


La virtualizzazione è la possibilità di astrarre le componenti hardware (cioè fisiche) di un server o di un cluster di server quali ad esempio la CPU, la memoria, i dischi e la banda, rendendole disponibili a livello software come risorse computazionali virtuali. In questo modo quindi è possibile creare un rapporto tra le risorse virtuali e le risorse reali maggiore di uno, in moda da ottimizzare al meglio le risorse fisiche sottostanti che spesso risultano essere sottoutilizzate.


La virtualizzazione può essere implementata anche su più livelli, andando a virtualizzare risorse che lo sono già a loro volta e creando quindi dei layer di virtualizzazione impilati uno sull’altro, utilizzando spesso anche tecnologie differenti per ogni layer.

La principale distinzione sulle tecnologie in questo ambito riguarda la tipologia di risorse che si vuole rendere disponibile all’utente finale, sistemisti sviluppatori. Da un lato esiste la possibilità di virtualizzare l’intero stack, sia hardware che software, di un server tradizionale, esportando quindi una macchina virtuale completa in tutte le sue parti: dalla CPU fino al sistema operativo e ai contesti applicativi che su questo si appoggiano. Dall’altra è possibile virtualizzare solamente dei contesti applicativi, detti anche container, esportando semplicemente delle partizioni volte ad ospitare una o più applicazioni dell’utente.




Con una macchina virtuale, al sistemista o allo sviluppatore utilizzatore del sistema di virtualizzazione viene presentato un insieme di risorse virtuali su cui installare un sistema operativo; con un container all'utente viene presentata invece una partizione del sistema operativo corrente, su cui installare applicazioni che rimangono isolate in essa [3].

Quando si offrono macchine virtuali, si parla di virtualizzazione a livello hardware, quando invece si offrono container per applicazioni, si fa riferimento invece alla virtualizzazione a livello di Sistema operativo o virtualizzazione a livello di container).

Nella virtualizzazione hardware, i sistemi operativi vengono eseguiti in modo concorrente sullo stesso host fisico e possono solitamente essere eterogenei. L'hypervisor, chiamato anche Virtual Machine Monitor, è il software di orchestrazione che consente di eseguire la macchina virtuale e si occupa di orchestrare e sequenzializzare l'accesso alle risorse hardware, garantendo protezione isolamento tra le diverse macchine virtuali.

La virtualizzazione a livello di containers è composta da un solo ed unico kernel di Sistema operativo (quello dell’host fisico) e multiple isolate istanze di “user-space” in cui eseguire applicazioni, che possono essere avviate e spente in maniera indipendente tra loro. 


A differenza delle classiche macchine virtuali, i container, non dispongono tuttavia di un sistema operativo guest (ospite) dedicato ma si appoggiano invece al kernel ed alle librerie del sistema operativo dell’host fisico sottostante. Questo li rende non sempre adatti. Applicazioni infatti che necessitano di accedere al kernel e alle librerie del sistema operativo non sono eseguibili in container. Inoltre è possibile scegliere un solo sistema operativo per ogni host fisico, che sarà poi “ereditato” da tutti i container sovrastanti. 

La tecnologia basata sui container, sebbene nasca “concettualmente” agli albori della modernità tecnologica, ovvero nel “lontano” 1979, è letteralmente esplosa negli ultimi anni, (si pensi alla diffusione di Docker, nata appena 3 anni fa, marzo 2013) come tecnologia che consente agli sviluppatori di creare e rilasciare applicazioni con velocità prima impensabili.

Come side-effect ai plus dei container, c’è chi ritiene che l'isolamento offerto tra i diversi container di uno stesso host fisico sia limitato, con il rischio che la compromissione di uno o più container possa ripercuotersi a cascata sugli altri. 

Rispetto all’approccio classico, i container richiedono un quantitativo di risorse minore permettendo di eseguire un numero elevato di applicazioni su un singolo host; abbattono i tempi di lancio e riavvio delle applicazioni (i container non sono altro che processi) favorendo la continuità lavorativa e l’uptime generale

Per tale ragione i container favoriscono Continuous Delivery e Continuous Integration e sono alla base delle metodologie di sviluppo DevOps che puntano alla comunicazione, collaborazione e integrazione tra sviluppatori addetti IT


Lucio Savino

Senior Cloud Product Manager

TIM SpA



Fonti:

https://it.wikiversity.org/wiki/Tecnologie_di_virtualizzazione

http://www.internetpost.it/virtualizzazione-soluzioni-a-confronto/

http://www.internetpost.it/container-linux-storia-tecnologia/