Caratteristiche e differenza tra Macchine Virtuali e Container in informatica

Caratteristiche e differenza tra Macchine Virtuali e Container in informatica

Macchine Virtuali e Container

Un confronto tra il modello delle macchine virtuali (vm) e il modello dei container è d’obbligo perchè alcuni concetti alla base del funzionamento sono molto simili tra loro se non identici: container e vm hanno vantaggi di isolamento molto simili ed entrambi virtualizzano le risorse della macchina host. Per questo motivo si sente spesso parlare di container come “versione più leggera di macchine virtuali”. Ovviamente non sono la stessa cosa e si nota una prima e profonda differenza osservando gli obiettivi fondamentali dei due modelli: le vm nascono per adempiere alla necessità di emulare un ambiente di esecuzione estraneo a quello attuale mentre lo scopo di un container è rendere le applicazioni portatili e autonome.

I container e le vm presentano un comportamento simile perchè sono unità di esecuzione. Entrambi, attraverso la virtualizzazione, costruiscono una immagine che può essere eseguita su una piattaforma host adeguatamente equipaggiata. La stessa immagine può poi essere spostata su un altro host (sempre adeguatamente predisposto), senza che si presentino problemi nell’esecuzione delle applicazioni al suo interno. Una grande differenza tra i due modelli in questo caso, sta nel fatto che i container virtualizzano il sistema operativo mentre le vm virtualizzano tutto l’hardware. Si parla di virtualizzazione a due livelli completamente diversi, con grandi differenze sia nel funzionamento, sia nell’utilizzo delle risorse.

Caratteristiche e differenza tra Macchine Virtuali e Container in informatica

Un altro aspetto simile tra i due modelli è l’isolamento da loro creato, infatti, entrambi permettono l’esecuzione di applicazioni al loro interno senza che queste possano accedere a file e risorse esterne al container o alla vm. E’ differente invece, il modo in cui sono ottenuti questi isolamenti: le vm sono isolate dai supervisori che fanno uso di funzionalità hardware della infrastruttura mentre i container utilizzano controlli software forniti dal kernel. Questo significa che i processi in esecuzione all’interno dei container sono equivalenti ai processi nativi sull’host e non comportano i costi associati all’esecuzione del hypervisor delle vm. Un’altra importante differenza per quanto riguarda l’isolamento è il “cosa” viene isolato: i container separano l’ambiente interno da quello esterno a livello applicativo mentre le vm operano ad un livello più basso. Quindi più container possono condividere tra di loro file appartenenti al sistema operativo mentre le vm necessitano di risorse personali e private (una copia completa del SO, l’applicazione in esecuzione, le librerie necessarie, l’hardware virtualizzato inclusi adattatori di rete virtualizzati, memorie e CPU, etc). Questa differenza è il motivo principale per il quale si dice che i container sono più leggeri, portatili ed efficienti (nell’uso delle risorse) rispetto alle vm.

Inoltre, nell’avviamento di nuove istanze sono presenti ulteriori differenze tra i due modelli. Per quanto riguarda i container, vengono prima di tutto scelti i file ai quali si è interessati e successivamente si avvia il container layer. Per una macchina virtuale invece si parte da un sistema operativo completo e si eliminano i componenti non necessari. Si tratta di due metodi di avviamento completamente diversi in quanto il modello dei container utilizza un approccio simile al modello di sviluppo bottom-up (strategia nella quale si scelgono prima di tutto i singoli elementi necessari e successivamente si aggregano tra loro) mentre le vm usano un approccio simile al modello top-down.

Altra differenza riguarda le tempistiche di avvio di applicazioni per la gestione di container che sono dell’ordine di qualche minuto e che l’operazione nel suo complesso non impiega molte risorse. Per quanto riguarda invece le macchine virtuali le spese sono nettamente superiori: l’installazione di una applicazione per la creazione di vm (per esempio VMware e Sun VirtualBox) non impiega molto tempo in se stessa; l’installazione del sistema operativo invece, necessita di tempo, risorse fisiche e attenzione per il settaggio delle impostazioni. Avere un container in funzione per pochi minuti o anche secondi è un’idea del tutto ragionevole e fattibile mentre non lo è per le vm. Parlando della velocità dei due modelli si può introdurre anche l’aspetto legato allo spazio in memoria occupato. Ogni vm include una copia completa del sistema operativo, una o più applicazioni in esecuzione, file e librerie necessarie al funzionamento, etc. Tutto questo si riassume in decine di GB occupati. Dato il caricamento del sistema operativo inoltre, le macchine virtuali possono essere molto lente da avviare.

La sicurezza è un aspetto di fondamentale importanza quando si utilizzano tecnologie per la virtualizzazione in quanto i due concetti sono profondamente legati. Per quanto riguarda i container, bisogna fare molta attenzione che gli utenti non ottengano permessi da amministratore e che non riescano a uscire dal proprio ambiente controllato perchè non sono presenti altre barriere di protezione tra il gestore dei container e il sistema operativo. In una vm il discorso è molto diverso. Anche se un utente riuscisse a prendere il controllo del sistema operativo della vm, difficilmente riuscirebbe a superare la separazione creata dal hypervisor. Inoltre, le vm sono un software con una elevata esperienza mentre i container sono ancora relativamente giovani. Significa che le vm sono state testate in innumerevoli scenari, hanno superato attacchi di cracker e resistito a malware e virus. Tutte queste prove ne hanno rafforzato la struttura, migliorando la sicurezza e la stabilità. Questi aspetti, non solo possono essere di fondamentale importanza per lo sviluppo di determinate applicazioni, ma sono anche tenuti in alta considerazione dalle aziende sviluppatrici di software.

Qual’è il modello migliore tra i due?

Non esiste un vero vincitore tra questi due modelli perchè differiscono tra loro sotto tanti aspetti (incluso il loro scopo originario) e quindi non ci può essere un vero confronto. Ci sono però casi d’uso nei quali un modello presenta pregi migliori e quindi funziona meglio rispetto all’altro. La leggerezza dei container si paga ad esempio con l’impossibilità di avere un container con ambienti di esecuzione diversi al suo interno. Una applicazione come VMWare invece è in grado di avere innumerevoli sistemi operativi installati e ambienti di esecuzione anche di diverso tipo al suo interno al costo però, di una quantità di risorse utilizzate nettamente superiore. Data una piattaforma per container installata su una singola macchina, il sistema operativo in comune potrebbe diventare un altro punto debole dei container: in linea teorica un container potrebbe compromettere la stabilità del kernel stesso influenzando negativamente tutti gli altri container in funzione.

Le vm sono più sicure sotto questo punto di vista e garantiscono una maggiore stabilità sempre al costo di un consumo di risorse nettamente superiore. Bisogna osservare il contesto nel quale si vuole lavorare prima di fare una scelta tra i due modelli. Se c’è bisogno di un ambiente di sviluppo o di esecuzione agile, veloce, flessibile allora i container sono la scelta migliore. Al contrario, le vm garantiscono una maggiore sicurezza, una migliore stabilità e una più grande varietà di ambienti di esecuzione e di sviluppo.

Precedente Caratteristiche, architettura e applicazioni dello Smart personal assistant Successivo Sviluppo del Software: Perchè utilizzare un Container in azienda

Lascia un commento