Che cos’è una macchina virtuale? (Perché e quando usarlo)

Se lavori all’interno o all’esterno dell’industria del software, probabilmente hai sentito parlare di macchine virtuali. In caso contrario, ti starai chiedendo cosa sono e a cosa servono.

In qualità di ingegnere del software, utilizzo quotidianamente macchine virtuali. Sono strumenti potenti nello sviluppo di software, ma hanno anche altri usi. Conosciute anche come VM, molte aziende le utilizzano per la loro flessibilità, affidabilità ed economicità; prevengono anche i disastri causati da test software incontrollati.

Diamo un’occhiata a cosa sono le macchine virtuali e perché vengono utilizzate.

Cos’è una macchina virtuale?

Una macchina virtuale è un’istanza di un sistema operativo (SO) come Windows, Mac OS o Linux in esecuzione all’interno del sistema operativo principale di un computer.

In genere, viene eseguito in una finestra dell’app sul desktop. Una macchina virtuale ha funzionalità complete e si comporta come un computer o una macchina separati. In sostanza, una macchina virtuale è un computer virtuale in esecuzione all’interno di un altro computer noto come macchina host.

Macchina virtuale 1
Immagine 1: macchina virtuale in esecuzione su un laptop.

Una macchina virtuale non dispone di hardware (memoria, disco rigido, tastiera o monitor). Utilizza hardware simulato dalla macchina host. Per questo motivo, più macchine virtuali, dette anche ‘ospiti’, possono essere eseguite su una singola macchina host.

Macchina virtuale 2
Immagine 2: macchina host che esegue più macchine virtuali.

L’host può anche eseguire più VM con diversi sistemi operativi, inclusi Linux, Mac OS e Windows. Questa capacità dipende da un software chiamato hypervisor (vedi Immagine 1 sopra). L’hypervisor viene eseguito sulla macchina host e consente di creare, configurare, eseguire e gestire macchine virtuali.

L’hypervisor alloca spazio su disco, pianifica il tempo di elaborazione e gestisce l’utilizzo della memoria per ciascuna VM. Questo è ciò che applicazioni come Oracle VirtualBox, VMware, Parallels, Xen, Microsoft Hyper-V e molti altri lo fanno: sono hypervisor.

Un hypervisor può essere eseguito su un laptop, PC o server. Rende le macchine virtuali disponibili al computer locale o agli utenti distribuiti su una rete.

Diversi tipi di macchine virtuali e ambienti richiedono diversi tipi di hypervisor. Diamo un’occhiata ad alcuni di loro.

Tipi di macchine virtuali

Macchine virtuali di sistema

Le macchine virtuali di sistema, a volte chiamate virtualizzazione completa, sono eseguite da un hypervisor e forniscono la funzionalità di un vero sistema informatico. Usano il sistema operativo nativo dell’host per gestire e condividere le risorse di sistema.

Le macchine virtuali di sistema spesso richiedono un host potente con CPU veloci o multiple, grandi quantità di memoria e tonnellate di spazio su disco. Alcuni, che funzionano su computer personali o laptop, potrebbero non richiedere la potenza di calcolo di cui hanno bisogno i server virtuali delle grandi aziende; tuttavia, funzioneranno lentamente se il sistema host non è adeguato.

Elabora macchine virtuali

Le macchine virtuali di processo sono molto diverse dalle SVM: potresti averle in esecuzione sulla tua macchina e nemmeno saperlo. Sono anche note come macchine virtuali applicative o ambienti di runtime gestiti (MRE). Queste macchine virtuali vengono eseguite all’interno di un sistema operativo host e supportano applicazioni o processi di sistema.

Perché usare un PVM? Svolgono servizi senza dipendere da sistemi operativi o hardware specifici. Hanno il loro piccolo sistema operativo con solo le risorse di cui hanno bisogno. Il MRE si trova in un ambiente separato; non importa se funziona su Windows, Mac OS, Linux o qualsiasi altra macchina host.

Una delle macchine virtuali di processo più comuni è quella di cui probabilmente hai sentito parlare e che potresti aver visto in esecuzione sul tuo computer. Viene utilizzato per eseguire applicazioni Java ed è chiamato in breve Java Virtual Machine o JVM.

Tipi di hypervisor

La maggior parte delle macchine virtuali di cui ci occupiamo utilizzano un hypervisor perché emulano un intero sistema informatico. Esistono due diversi tipi di hypervisor: Hypervisor Bare Metal e Hosted Hypervisor. Diamo una rapida occhiata a entrambi.

Hypervisor in metallo nudo

I BMH possono anche essere chiamati hypervisor nativi e vengono eseguiti direttamente sull’hardware dell’host invece di essere eseguiti all’interno del sistema operativo dell’host. Infatti, prendono il posto del sistema operativo dell’host, programmando e gestendo l’utilizzo dell’hardware da parte di ciascuna macchina virtuale, eliminando così il ‘middle man’ (il sistema operativo dell’host) nel processo.

Gli hypervisor nativi vengono normalmente utilizzati per VM aziendali su larga scala, che le aziende utilizzano per fornire ai dipendenti risorse server. Microsoft Azure o Amazon Web Services sono macchine virtuali ospitate su questo tipo di architettura. Altri esempi sono KVM, Microsoft Hyper-V e VMware vSphere.

Hypervisor ospitato

Gli hypervisor in hosting vengono eseguiti su sistemi operativi standard, proprio come qualsiasi altra applicazione che eseguiamo sui nostri computer. Usano il sistema operativo dell’host per gestire e distribuire le risorse. Questo tipo di hypervisor è più adatto per i singoli utenti che devono eseguire più sistemi operativi sulle proprie macchine.

Questi includono applicazioni come Oracle VirtualBox, VMware Workstations, VMware Fusion, Parallels Desktop e molti altri. Puoi trovare informazioni più dettagliate sugli hypervisor ospitati nel nostro articolo, Il miglior software per macchine virtuali.

Perché usare macchine virtuali?

Ora che hai una conoscenza di base di cosa sia una macchina virtuale, probabilmente puoi pensare ad alcune applicazioni eccellenti. Ecco alcuni dei principali motivi per cui le persone usano le macchine virtuali.

1. Costo effettivo

Le macchine virtuali sono convenienti in numerose situazioni. Uno dei più importanti è nel mondo aziendale. L’utilizzo di server fisici per fornire risorse ai dipendenti può essere molto costoso. L’hardware non è economico e mantenerlo è ancora più costoso.

L’uso delle macchine virtuali come server aziendali è ormai diventato la norma. Con le macchine virtuali di un provider come MS Azure, non ci sono acquisti iniziali di hardware e costi di manutenzione. Queste macchine virtuali possono essere impostate, configurate e utilizzate per pochi centesimi all’ora. Possono anche essere spenti quando non vengono utilizzati e non comportano alcun costo.

L’uso di una VM sulla tua macchina può anche essere un enorme risparmio di denaro. Se hai bisogno di lavorare in più sistemi operativi o diverse configurazioni hardware, puoi farlo
usa più macchine virtuali su un host, non c’è bisogno di uscire e acquistare un computer separato per ogni attività.

2. Scalabile e flessibile

Che si tratti di server aziendali o macchine virtuali in esecuzione sul tuo laptop, le macchine virtuali sono scalabili. È facile adattare le risorse alle proprie esigenze. Se hai bisogno di più memoria o spazio su disco rigido, vai nell’hypervisor e riconfigura la VM per averne di più. Non è necessario acquistare nuovo hardware e il processo può essere completato rapidamente.

3. Configurazione rapida

È possibile configurare rapidamente una nuova VM. Ho avuto casi in cui avevo bisogno di una nuova configurazione di VM, ho chiamato il mio collega che le gestisce e le avevo pronte per l’uso in meno di un’ora.

4. Ripristino di emergenza

Se stai cercando di prevenire la perdita di dati e prepararti per il ripristino di emergenza, le macchine virtuali possono essere uno strumento eccezionale. Sono facili da eseguire il backup e possono essere distribuiti in luoghi diversi, se necessario. Se una terza parte come Microsoft o Amazon ospita le macchine virtuali, saranno fuori sede, il che significa che i tuoi dati sono al sicuro se il tuo ufficio va a fuoco.

5. Facile da riprodurre

La maggior parte degli hypervisor consente di creare una copia o un’immagine di una macchina virtuale. L’imaging ti consente di creare facilmente riproduzioni esatte della stessa VM di base per qualsiasi situazione.

Nell’ambiente in cui lavoro, diamo a ogni sviluppatore una VM da utilizzare per lo sviluppo e il test. Questo processo ci consente di avere un’immagine configurata con tutti gli strumenti e il software necessari. Quando abbiamo un nuovo sviluppatore che esegue l’onboarding, tutto ciò che dobbiamo fare è fare una copia di quell’immagine e loro hanno ciò di cui hanno bisogno per lavorare.

6. Perfetto per sviluppo/test

Uno dei migliori vantaggi dell’utilizzo delle macchine virtuali è che sono uno strumento perfetto per lo sviluppo e il test del software. Le macchine virtuali consentono agli sviluppatori di sviluppare su più piattaforme e ambienti su un’unica macchina. Se quella macchina virtuale viene danneggiata o distrutta, è possibile crearne una nuova rapidamente.

Consentono a un tester di avere un nuovo ambiente pulito per ogni ciclo di test. Ho lavorato su progetti in cui impostiamo script di test automatizzati che creano una nuova VM, installiamo l’ultima versione del software, eseguiamo tutti i test richiesti, quindi eliminiamo la VM una volta completati i test.

Le macchine virtuali funzionano magnificamente per i test e le recensioni dei prodotti come quelli che facciamo qui su TechFewer.com. Posso installare app in una macchina virtuale in esecuzione sul mio computer e testarle senza ingombrare il mio ambiente principale.

Al termine del test, posso sempre eliminare la macchina virtuale, quindi crearne una nuova quando ne ho bisogno. Questo processo mi consente anche di testare su più piattaforme anche se ho solo una macchina Windows.

Le parole finali

Come puoi vedere, le macchine virtuali sono uno strumento versatile e conveniente che può essere utilizzato per molte applicazioni. Non è più necessario acquistare, configurare e mantenere hardware costoso per fornire l’accesso al server a tester, sviluppatori e altri. Le macchine virtuali ci danno la flessibilità di creare facilmente e rapidamente i sistemi operativi, l’hardware e gli ambienti di cui abbiamo bisogno, in qualsiasi momento.