• Blog

Indietro

Vagrant e Docker supporto allo sviluppo di applicazioni

In passato la fase di set-up e/o di start-up di un progetto in sviluppo richiedeva notevole impegno e tempo. Tipicamente una volta terminata la fase progettuale di un’applicazione ed una volta individuate le risorse da impiegare per il suo funzionamento,eranecessarioconfigurare un ambiente capace di mettere a disposizione queste risorse.Immaginando un’applicazione molto sempliceil cui obiettivo è di storicizzare informazioni e di fornirne una visualizzazione attraverso una pagina web, gli elementi indispensabili all’interno dell’ambiente ospiterà l’applicazione, saranno la presenza di un DBMS ela presenza di un web container.

Questo comunemente si traduceva nella configurazione, nel migliore dei casi, di un server (dedicato allo sviluppo) oppure nell’installazione di queste risorse sulla stessa macchina dello sviluppatore. Tutto ciò portava all’installazione di un DBMS, un web container ed, eventualmente, una serie di attività di configurazione delle macchine di destinazione. Ovviamente all’interno di una software house il numero di progetti è molteplice perciò quanto detto precedentemente doveva essere ripetuto per ogni progetto in sviluppo.

Ipotizzando inoltre che ad ogni applicazione in sviluppo sia necessario un ambiente fisico dedicato, si presentava un problema di costi, dovuto all’acquisto di più elaboratori, di spazio occupato da essi e di manutenzione di ogni macchina. Tutto questo si aggiungeva alle problematiche di configurazione.

Una soluzione che ha permesso una notevole riduzione del numero di server dedicati e conseguentemente di risorse è stata l’introduzione delle macchine virtuali. Per macchina virtuale si intende un software che simula il comportamento di una macchina fisica attraverso un processo di virtualizzazione. Questo comporta che all’interno di una macchina fisica possono essere messe in esecuzione più macchine virtuale e quindi più ambienti a cui destinare più applicativi. Risolte le problematiche delle macchine fisiche, sostituite da quelle virtuali,permanevano le problematiche dovute alla configurazione. Il problema venne spostato, se prima eradi configurazione delle macchine fisiche successivamente divenne di configurazione delle macchine virtuali. Nel corso del tempo si è cercato di risolvere parte di questi problemi condividendo, attraverso il web, macchine virtuali parzialmente configurate ma le personalizzazioni richiedevano comunque del tempo.

 

 

 

Tool per la semplificazione della gestione degli ambienti virtuali e della configurazione

Negli ultimi anni sono nati tool che hanno permesso un notevole passo in avanti. Questi tool semplificano non solo la reperibilità, ma anche la gestione degli ambienti virtuali e la messa in funzione. I due principali strumenti che consentono la gestione di questi ambienti, seppur con approcci profondamente diversi, sono Vagrant e Docker. Entrambi i tool permettono una gestione veloce e snella degli ambienti di sviluppo. Attraverso repository condivisi, è possibile trovare ambienti pre-configurati già pronti all’uso. Le modalità con cui questi due strumenti consentano la gestione di questi ambienti è profondamente diversa.

Vagrant sfrutta a pieno la virtualizzazione, ogni ambiente creato corrisponde ad una macchina virtuale gestita dall’hypervisor (detto anche virtual machine monitor). Le molteplici macchine virtuali gestite da Vagrant restano separate ed inoltre la natura di ognuno di essi può essere diversa. Gli svantaggi della virtualizzazione sono legati alle performance. Ogni macchina virtuale avrà risorse dedicate,  l’hypervisor per poter gestire contemporaneamente ognuna di esse potrebbe consumare tutte le risorse della macchina fisica. Nell’immagine sottostante possiamo vedere l’architettura della virtualizzazione. La macchina fisica con il suo sistema operativo (host OS) ospita il virtual machine monitor, all’interno del VM monitor sarà possibile definire gli ambienti virtuali ospiti (guest OS). Vagrant, in questa architettura, si colloca tra il sistema operativo della macchina fisica e il virtual machine monitor, migliorando la gestione di ognuna di esse.

 

 

 

Docker sfrutta la “containerizzazione” ovvero utilizza le funzionalità di isolamento delle risorse del kernel Linux (come ad esempio cgroups e namespace) per consentire a container diversi di coesistere in maniera indipendente sulla stessa istanza Linux. Per questa sua caratteristica viene definita un’applicazione light-weight. L’architettura di questo approccio è riportata nell’immagine sottostante. Docker sfrutta le funzionalità del kernel creando container separati ed indipendenti. Le performance della containerizzazione di Docker sono migliori rispetto al processo di virtualizzazione di Vagrant, in quanto Docker non utilizzando un hypervisor sfrutta direttamente le risorse della macchina fisica.

 

 

 

Mentre Vagrant può essere eseguito solo da terminale di comando, Docker possiede anche un’interfaccia grafica che rende molto più veloce l’installazione e la gestione dei moduli. Per approfondire i due tool vi rimandiamo ai rispettivi articoli.

A questo punto sorge l’annosa questione: è meglio utilizzare la virtualizzazione o la containerizzazione? Per poter rispondere a questa domanda è necessario analizzare attentamente il contesto in cui si opera in quanto la scelta dipende da una serie di fattori tipici dell’ambito IT: prestazionali, di scalabilità, di affidabilità, di sicurezza, sui sistemi esistenti e costi da sostenere; giusto per citarne alcuni.

Nel dettaglio guardiamo alcuni degli aspetti fondamentali:

Latenza – applicazioni con una bassa soglia di tolleranza per la latenza hanno risultati migliori con l’uso dell’ambiente fisico e quindi sui container.

Capacità  - Le macchina virtuali sono strutturate sull’ottimizzazione dei sistemi di carico. In caso in cui applicazioni containerizzate non consumano tutta la capacità sul box fisico, le macchine virtuali potrebbero offrire benefici maggiori.

Ambienti misti – La containerizzazione esegue un’istanza solo di sistema operativo. Se si vuole interagire con sistemi operativi diversi la virtualizzazione lo consente.

Coesistenza – Alcuni sistemi hanno carichi di lavoro che non consentono di condividere il kernel quindi è necessario isolarli interamente. La virtualizzazione fornisce un isolamento dei singoli sistemi.

Licenze - L’utilizzo della containerizzazione riduce i costi dovuti alle licenze per acquisto di un hypervisor e del sistema operativo su cui l’hypervisor si poggia.

 

La decisione finale quindi può avvenire a valle di tante considerazioni e vincoli legati al contesto.

Successivo
Commenti
URL di Trackback:

Nessun commento. Vuoi essere il primo.