Caratteristiche e differenza tra Virtual machine e Container in informatica
Virtual machine VS Container
In informatica, seppur macchine virtuali e container sembrano molto simili tra loro sfruttando gli stessi benefici legati all’isolamento delle risorse, possono essere visti come modi alternativi e distinti per la creazione di un ambiente sul quale esegue un programma software, presentando parecchie differenze legate intrinsecamente al modo scelto per virtualizzare il nodo di computing.
I vantaggi e gli svantaggi principali delle macchine virtuali possono essere schematizzati come segue:
- Flessibilità: ogni applicazione ha il suo ambiente di esecuzione specifico (versione kernel, librerie) per il corretto funzionamento di questa;
- Esecuzione del software legacy: la possibilità di utilizzare programmi sviluppati con linguaggi di programmazione non recenti e che non sono sostituibili dati i costi per una nuova implementazione per i sistemi più recenti;
- Eccellente isolamento: l’esecuzione di una virtual machine, in condizioni nominali, non ‘disturba’ l’esecuzione di altre virtual machine dispiegate su una macchina host poiché l’isolamento è dettato dall’hardware (cpu, memory);
- Live migration: copia e spostamento di una macchina virtuale su macchine fisiche differenti, anche durante l’esecuzione (migrazione delle macchine virtuali);
- Sicurezza: l’hypervisor responsabile di eseguire le macchine virtuale guest è molto ridotto esponendo una superficie di attacco minore;
- Overhead: occupazione aggiuntiva di memoria (centinaia di MB) e di CPU per l’esecuzione dei sistemi operativi guest;
- Upgrade Time: necessita di configurare e tenere aggiornato ogni istanza del sistema operativo guest;
- Booting Time: decine di secondi o più prima che la macchina virtuale sia up e running non sono accettabili per applicazioni “fire and dye”.
Viceversa, i vantaggi e gli svantaggi principali dei container sono:
- Tempo di avvio più rapido: con la virtualizzazione del solo sistema operativo i tempi di avvio si riducono notevolmente rispetto all’esecuzione di una virtual machine;
- Deployment semplificato: ogni container include non solo l’applicazione – servizio ma anche tutto il pacchetto utile per eseguirlo, semplificando ogni operazione di deployment e facilitando la distribuzione su differenti sistemi operativi senza ulteriori sforzi di configurazione;
- Efficienza operativa: i contenitori occupano minor spazio su disco rispetto alle VM e hanno un consumo di CPU basso, rendono il sistema più agile, migliorando l’efficienza operativa, lo sviluppo e la gestione delle applicazioni;
- Sicurezza: il sistema operativo che ospita i container ha un numero di librerie maggiore rispetto all’hypervisor per garantire il corretto funzionamento dei container; ne consegue una superficie d’attacco maggiore;
- Flessibilità:il sistema operativo di tutti i container deve coincidere con quello in esecuzione sulla macchina host, dato che il kernel è condiviso; ne consegue l’impossibilità di usare un sistema operativo differente per ogni container;
- Live migration: a differenze delle virtual machine risulta essere più difficile da attuare poiché necessita dell’identificazione delle zone di memoria usate e proprie del container (che si vuole migrare) in kernel space prima di procedere con la migrazione su un’altra macchina host.