Data di pubblicazione: 3 marzo 2024
Collaboratori: Stephanie Susnjara, Ian Smalley
Una macchina virtuale (VM) è una rappresentazione virtuale o un'emulazione di un computer fisico che utilizza il software invece dell'hardware per eseguire programmi e implementare applicazioni.
Utilizzando le risorse di una singola macchina fisica come memoria, CPU, interfaccia di rete e storage, le macchine virtuali consentono alle aziende di eseguire più macchine virtualmente con diversi sistemi operativi su un unico dispositivo.
Le macchine virtuali vengono generalmente definite ospiti, con una o più macchine "guest" in esecuzione su una macchina fisica denominata macchina "host". La tecnologia VM comprende server virtuali, istanze di server virtuali (VSI) e server privati virtuali (VPS).
In un report Global Market Insights (GMI) (link esterno a ibm.com), la dimensione del mercato delle macchine virtuali ha superato i 9,5 miliardi di dollari nel 2023. GMI prevede che questo mercato si espanderà a un tasso di crescita annuo composto (CAGR) di circa il 12% tra il 2024 e il 2032, guidato dalla costante adozione del cloud computing. Mentre le aziende passano al cloud per la sua scalabilità, flessibilità ed efficienza dei costi, i provider di cloud continuano a integrare macchine virtuali e altre tecnologie critiche (ad esempio, i container) per fornire un'infrastruttura IT coerente.
Scopri in che modo il Desktop as a Service (DaaS) consente alle aziende di raggiungere lo stesso livello di prestazioni e sicurezza della distribuzione delle applicazioni on-premise.
Iscriviti alla newsletter IBM
Le VM funzionano utilizzando la virtualizzazione, un processo di creazione di versioni basate su software o versioni virtuali di risorse (calcolo, storage, reti, server) o applicazioni.
La virtualizzazione consente un uso più efficiente dell'hardware fisico del computer ed è alla base del cloud computing.
La virtualizzazione è resa possibile con un hypervisor, noto anche come monitor per macchine virtuali (VMM). Questo livello software leggero gestisce le macchine virtuali mentre vengono eseguite l'una accanto all'altra.
La nascita della virtualizzazione risale al 1964, quando IBM ha progettato e introdotto CP-40, un progetto sperimentale di ricerca sulla condivisione temporale per IBM System/360. Il CP-40, che in seguito si evolse nel CP-67 e poi in Unix, fornì hardware in grado di supportare più utenti simultanei e gettò le basi per le macchine virtuali.
Il 2 agosto 1972, IBM lanciò quella che molti considerano la prima macchina virtuale, la VM/370, e il primo mainframe System/370 che supportava la memoria virtuale.
Nel 1998, VMware (link esterno aibm.comi) ha sviluppato il sistema operativo x86, che ha consentito la segmentazione di un singolo computer in diverse macchine virtuali, ognuna con il proprio sistema operativo. Nel 1999, l'azienda ha lanciato VM Workstation 1.0, il primo prodotto commerciale che consentiva agli utenti di eseguire più sistemi operativi come macchine virtuali su un singolo PC.
Oggi la virtualizzazione è una pratica standard per l'infrastruttura IT di livello aziendale e una forza trainante nell'economia del cloud computing, in quanto consente alle aziende di promuovere un maggiore utilizzo della capacità e ridurre i costi. Tutte le infrastrutture IT possono essere virtualizzate, tra cui ambienti desktop, sistemi operativi, hardware di storage, data center e altro ancora.
La virtualizzazione si basa sulla tecnologia hypervisor. Questo livello software che si appoggia a un computer o un server fisico (noto anche come serverbare metal) consente al computer fisico di separare il sistema operativo e le applicazioni dal proprio hardware. Queste macchine virtuali possono eseguire i propri sistemi operativi e le applicazioni in modo indipendente pur condividendo le risorse originali (memoria, RAM, archiviazione e così via) dal server, gestito dall'hypervisor. In sostanza, l'hypervisor si comporta come un vigile urbano, allocando risorse alle macchine virtuali e assicurando che non si interrompano a vicenda.
Esistono due tipi primari di hypervisor:
Oltre alla classificazione in base alla gestione dell'hypervisor, le macchine virtuali si dividono in due categorie principali: macchine virtuali di sistema (chiamate anche macchine a virtualizzazione completa) e macchine virtuali di processo.
Le macchine virtuali di sistema consentono la condivisione delle risorse fisiche sottostanti tra diverse macchine virtuali, ognuna delle quali esegue il proprio sistema operativo. Al contrario, le macchine virtuali di processo (denominate anche macchine virtuali dell'applicazione) eseguono un'applicazione all'interno di un sistema operativo e supportano un singolo processo. Le macchine virtuali Java, che eseguono programmi compilati in Java, sono esempi di macchine virtuali di processo.
Le macchine virtuali offrono numerosi vantaggi rispetto all'hardware fisico tradizionale.
Dal momento che su un singolo computer fisico vengono eseguite più macchine virtuali, i clienti non devono acquistare un nuovo server ogni volta che desiderano eseguire un ulteriore sistema operativo. Pertanto, possono ottenere un maggiore rendimento da ogni componente hardware che già possiedono, riducendo significativamente i costi IT legati al capitale e alle spese operative.
Dal momento che le macchine virtuali sono basate su software, è facile crearne di nuove, rendendo più rapida la scalabilità per soddisfare le nuove richieste di workload rispetto al provisioning di nuovi ambienti basati su hardware.
Le aziende possono riposizionare le macchine virtuali secondo necessità tra i computer fisici di una rete. Questa funzionalità consente di allocare i workload sui server con potenza di calcolo di riserva. Le macchine virtuali possono persino spostarsi tra ambienti locali e cloud, il che le rende utili per scenari di cloud ibrido in cui condivide le risorse elaborazione tra il suo data center e un fornitore di servizi cloud.
La creazione di una VM è più rapida e semplice rispetto all'installazione di un sistema operativo su un server fisico, in quanto è possibile clonare una macchina virtuale con il sistema operativo già installato. Gli sviluppatori e i tester del software possono creare nuovi ambienti su richiesta per gestire nuove attività non appena si presentano.
Le VM migliorano la sicurezza in diversi modi rispetto ai sistemi operativi, eseguiti direttamente sull'hardware. Utilizzando un programma esterno, è possibile eseguire la scansione di un file VM alla ricerca di software dannoso. Puoi creare in qualsiasi momento un'istantanea della VM e ripristinarla in quello stato se viene infettata da malware, riportando di fatto la VM indietro nel tempo. La creazione rapida e semplice di macchine virtuali consente inoltre di eliminare e ricreare rapidamente una VM compromessa, accelerando il ripristino dalle infezioni da malware.
Con un numero inferiore di server fisici necessari per eseguire workload e applicazioni, è possibile ridurre drasticamente il consumo di energia per migliorare l'impatto ambientale.
Anche se le macchine virtuali presentano numerosi vantaggi, ci sono degli svantaggi da considerare.
Le macchine virtuali dipendono dalle risorse hardware messe a loro disposizione sul computer host. Le risorse limitate possono portare a prestazioni ridotte e inefficienze.
Le macchine virtuali possono essere complesse da configurare e gestire e richiedono team con conoscenze e competenze tecniche per configurarle e gestirle.
Le VM comportano il rischio di un singolo punto di errore, in quanto si affidano a un unico computer fisico.
Le macchine virtuali hanno un'ampia gamma di utilizzi sia per gli amministratori IT aziendali che per gli utenti, tra cui i seguenti:
Prima azienda a commercializzare con successo la virtualizzazione dell'architettura dei microprocessori x86, VMware è un leader nel mercato della virtualizzazione (link esterno a ibm.com). VMware fornisce hypervisor di tip 1 e di tipo 2 e software VM a clienti aziendali.
La maggior parte degli hypervisor supporta le macchine virtuali che eseguono il sistema operativo Windows come guest. L'hypervisor Hyper-V di Microsoft fa parte del sistema operativo Windows. Una volta installato, crea una partizione principale che contiene se stessa e il sistema operativo Windows primario, ognuno con accesso privilegiato all'hardware. Altri sistemi operativi, compresi i guest di Windows, vengono eseguiti in partizioni secondarie e comunicano con l'hardware attraverso la partizione madre.
Il sistema operativo Android open-source di Google è comune su dispositivi mobili e connessi.
Il sistema operativo Android funziona solo con l'architettura del processore ARM tipica di questi dispositivi, ma gli appassionati, i gamer Android o gli sviluppatori di software potrebbero volerlo eseguire su PC. Questa situazione può essere problematica, perché i PC vengono eseguiti su un'architettura di processore x86 completamente diversa e un hypervisor di virtualizzazione hardware passa solo le istruzioni tra la VM e la CPU, non le traduce per processori con vari set di istruzioni.
Diversi progetti, come Shashlik o Genymotion, possono risolvere questo problema utilizzando un emulatore che ricrea l'architettura ARM nel software. Un'alternativa, il progetto Android-x86, porta invece Android sull'architettura x86. Per eseguirlo è necessario installare il programma Android-x86 come una macchina virtuale che utilizza l'hypervisor VirtualBox di tipo 2. Un'altra alternativa, Anbox, esegue il sistema operativo Android sul kernel di un sistema operativo Linux host.
Apple consente al suo sistema macOS di funzionare solo su hardware Apple. Ciò significa che non è possibile eseguirlo su hardware non Apple come VM o in base al contratto di licenza con l'utente finale. Tuttavia, è possibile utilizzare gli hypervisor di tipo 2 sull'hardware Mac per creare macchine virtuali con un macOS guest.
Oggi è impossibile eseguire iOS in una macchina virtuale perché Apple controlla rigorosamente il sistema operativo iOS e ne consente l'esecuzione solo su dispositivi iOS.
La cosa più vicina a una macchina virtuale iOS è il simulatore iPhone fornito con l'ambiente di sviluppo integrato Xcode, che simula l'intero sistema iPhone nel software.
La piattaforma Java è un ambiente di esecuzione per i programmi scritti nel linguaggio di sviluppo software Java. La promessa di Java, "scrivi una volta, esegui ovunque", significa che qualsiasi programma Java poteva essere eseguito su qualsiasi piattaforma Java, motivo per cui la sua piattaforma includeva una macchina virtuale Java (JVM).
I programmi Java contengono bytecode, che è una forma di istruzione destinata alla JVM. La JVM compila questo bytecode in codice macchina, che è il linguaggio di livello più basso utilizzato dal computer host. La JVM nella piattaforma Java di una piattaforma informatica crea una serie di istruzioni in linguaggio macchina diverse da quelle della JVM di un'altra, in base al linguaggio macchina che il processore si aspetta.
Pertanto, la JVM non esegue un intero sistema operativo e non utilizza un hypervisor come fanno le altre macchine virtuali. Al contrario, traduce i programmi software a livello di applicazione in modo che vengano eseguiti su un particolare hardware.
Come JVM, VM Python non viene eseguito su un hypervisor e non contiene un sistema operativo guest. È uno strumento che consente ai programmi scritti in Python di essere eseguiti su diverse CPU.
Analogamente a Java, Python traduce i suoi programmi in un formato intermedio chiamato bytecode e li archivia in un file pronto per l'esecuzione. Quando il programma viene eseguito, la macchina virtuale Python converte il bytecode in linguaggio macchina per garantire un'esecuzione rapida.
Linux è un tipico sistema operativo guest utilizzato in numerose macchine virtuali. È inoltre un tipico sistema operativo host utilizzato per eseguire macchine virtuali e dispone persino di un proprio hypervisor, la macchina virtuale basata su kernel (KVM). Sebbene sia un progetto open source, Red Hat® possiede KVM.
Ubuntu è una distribuzione Linux prodotta da Canonical. È disponibile nelle versioni desktop e server, installabili come VM. Gli utenti possono implementare Ubuntu come sistema operativo guest su Microsoft Hyper-V. Fornisce una versione ottimizzata di Ubuntu Desktop che funziona bene nella modalità sessione avanzata di Hyper-V, fornendo una stretta integrazione tra l'host Windows e la VM Ubuntu. Include il supporto per l'integrazione degli appunti, il ridimensionamento dinamico dei desktop, le cartelle condivise e lo spostamento del mouse tra l'host e i desktop guest.
Le macchine virtuali pubbliche o multi-tenant sono macchine virtuali con più utenti che condividono un'infrastruttura fisica comune. Questo modello rappresenta l'approccio più conveniente e scalabile per il provisioning delle macchine virtuali. Tuttavia, gli ambienti multi-tenant mancano di alcune caratteristiche di isolamento che le organizzazioni con rigidi mandati di sicurezza o conformità potrebbero preferire.
Due modelli di macchine virtuali single-tenant sono gli host dedicati e le istanze dedicate.
Un modello pay-as-you-go non prevede costi iniziali per la macchina virtuale, e gli utenti pagano semplicemente per ciò che utilizzano. I clienti pagano all'ora o al secondo, a seconda del provider e del tipo di istanza.
Il modello più economico di VM, le istanze transitorie o spot sfruttano l'eccesso di capacità di un provider ma possono essere recuperate dal provider in qualsiasi momento. Le istanze transient/spot sono utili per le applicazioni che non devono essere sempre attive o sono proibitivamente costose in qualsiasi altro modello.
A differenza dei modelli pay-as-you-go, i casi riservati prevedono un impegno esplicito a scadenza, di solito compreso tra uno e tre anni, ma sono anche associati a forti sconti.
L'utente paga in genere il costo totale del server fisico e viene fatturato in base agli incrementi che il provider offre ai server dedicati, in genere su base oraria o mensile.
I server bare metal si basano sull'hardware grezzo, sulla potenza e sull'isolamento. Si tratta di server fisici single-tenant, completamente privi di cicli di hypervisor (software di virtualizzazione) e interamente dedicati a un singolo cliente: tu.
I workload che danno priorità alle prestazioni e all'isolamento, come le applicazioni ad alta intensità di dati e i mandati di conformità normativa, sono in genere più adatti per i server bare metal, soprattutto se distribuiti per periodi prolungati.
Programmi di risorse aziendali (ERP), gestione delle relazioni con i clienti (CRM), gestione della supply chain (SCM), applicazioni di e-commerce e servizi finanziari sono solo alcuni dei workload ideali per i server bare metal.
Al contrario, quando i workload richiedono la massima flessibilità e scalabilità, è meglio posizionare un hypervisor sull'hardware bare metal per creare una macchina virtuale. Le macchine virtuali aumentano la capacità e l'utilizzo dei server. Sono ideali per spostare i dati da una VM all'altra, ridimensionare i set di dati e dividere i workload dinamici.
Il modo più semplice per comprendere un container è sapere come si differenzia rispetto a una macchina virtuale tradizionale (VM). Nella virtualizzazione tradizionale, on-premise o nel cloud, un hypervisor aiuta a virtualizzare l'hardware fisico. Ogni macchina virtuale contiene quindi un sistema operativo guest, una copia virtuale dell'hardware necessario per l'esecuzione del sistema operativo e un'applicazione e le relative librerie e dipendenze associate.
Invece di virtualizzare l'hardware sottostante, i container virtualizzano il sistema operativo (in genere Linux). Ogni container contiene solo l'applicazione e le relative librerie e dipendenze. L'assenza del sistema operativo guest è il motivo per cui i container sono così leggeri, veloci e portatili.
Container e Kubernetes, la piattaforma open source di orchestrazione dei container che li gestisce, sono diventati le unità de facto di moderne architetture cloud-native e microservizi. Sebbene i container siano più comunemente associati ai servizi senza stato, le organizzazioni possono utilizzarli anche per i servizi con stato. I container sono standard negli scenari di cloud ibrido, perché possono essere eseguiti in modo coerente nel cloud pubblico, nel cloud privato e nelle impostazioni tradizionali on-premise. Oggi, un'organizzazione potrebbe eseguire l'applicazione sul proprio cloud privato, ma domani potrebbe essere necessario distribuirla su un cloud pubblico di un provider diverso. Le applicazioni di containerizzazione offrono ai team la flessibilità di cui hanno bisogno per gestire i numerosi ambienti software dell'IT moderno.
È importante notare che le aziende possono coesistere con container e macchine virtuali. Ad esempio, è normale eseguire container in macchine virtuali poiché molte aziende dispongono di un'infrastruttura basata su macchine virtuali.
Un'azienda può scegliere un container per eseguire un'applicazione e avere una macchina virtuale in grado di fornire l'infrastruttura sottostante. Questo metodo combina la portabilità e la velocità dei container con la sicurezza delle macchine virtuali. In un altro scenario, un istituto finanziario può utilizzare le macchine virtuali per i propri sistemi di database, garantendo una maggiore sicurezza con l'isolamento delle risorse e utilizzare i container per applicazioni front-end come le app mobili customer-facing.
Il post sul blog "Containers versus VMs: What's the difference?" offre ulteriori spiegazioni.
Il seguente video illustra le basi della containerizzazione e il confronto con l'utilizzo delle VM:
La selezione di una macchina virtuale e di un provider di cloud inizia con la revisione delle esigenze di workload e dei requisiti di budget, insieme ad altri fattori critici. Di seguito sono elencate 10 cose da considerare quando si seleziona un fornitore di servizi per macchine virtuali.
Macchine virtuali altamente scalabili, single-tenant e multi-tenant, che puoi avviare rapidamente per ottenere il massimo isolamento e controllo della rete.
IBM® Power Virtual Server è una famiglia di server IBM Power virtuali multi-tenant configurabili con accesso ai servizi IBM Cloud. Sposta e gestisci facilmente i workload fra ambienti cloud e on-premise.
IBM® z/VM è un sistema operativo con hypervisor e tecnologie di virtualizzazione scalabili e totalmente sicuri progettati per eseguire server guest come Linux®, z/OS e macchine virtuali z/TPF, oltre a Red Hat OpenShift su server IBM® Z e LinuxONE.
Il cloud computing trasforma l'infrastruttura IT in un programma di utilità, così puoi “collegarti” alle risorse di elaborazione e alle applicazioni tramite internet, senza doverle installare e mantenere on-premise.
Il cloud ibrido integra servizi di cloud pubblico, servizi di cloud privato e infrastrutture on-premise in un unico ambiente di computing distribuito.
DevOps accelera la distribuzione di software di qualità superiore combinando e automatizzando il lavoro dei team di sviluppo software e delle operazioni IT.
I microservizi, o architettura a microservizi, sono un approccio architettonico cloud-native in cui una singola applicazione è composta da numerosi componenti o servizi più piccoli ad accoppiamento libero e distribuibili in modo indipendente.
I container sono unità eseguibili di software in cui il codice dell'applicazione viene impacchettato insieme alle librerie e alle dipendenze, secondo modalità comuni, in modo che il codice possa essere eseguito ovunque, che si tratti di desktop, IT tradizionale o cloud.
La virtualizzazione è un processo che consente un utilizzo più efficiente dell'hardware fisico del computer ed è alla base del cloud computing.