OPEN SOURCE

Containerizzazione delle applicazioni: come sfruttare i nuovi orizzonti open source

A livello di programmazione si può lavorare sulla virtualizzazione per ottimizzare anche l’uso delle applicazioni mobile. Il principio da sfruttare è la “containerizzazione”. Non a caso, Linux Container (LXC) sta diventando una risorsa preziosa per garantire la scalabilità delle applicazioni distribuite. Il ruolo della piattaforma Docker

Pubblicato il 25 Nov 2014

containerizzazione-linux-141027001945

La virtualizzazione ha avuto un profondo impatto sulle scelte computazionali, consentendo alle aziende di migliorare notevolmente l’utilizzo e la flessibilità delle risorse di calcolo.

Ma virtualizzare significa anche gestire sistemi operativi e hypervisor, con tutto un discorso di bilanciamento della memoria che non solo è fondamentale, ma è anche costosa, in termini di licenze.

La memoria è un punto nodale in un progetto di virtualizzazione perché è uno dei fattori da cui dipende la dimensione di una macchina virtuale (VM) e limita il numero di macchine virtuali che un server è in grado di ospitare.


Cos’è la containerizzazione
Per economizzare sulla memoria, recentemente è stata rispolverata una tecnica nota come containerizzazione (containerization): in pratica, attraverso un criterio di memorizzazione particolare dei dati, si cerca di virtualizzare le applicazioni, lasciando però la maggior parte del bagaglio in un container accessibille solo secondo criteri stabiliti, che possono essere governati da una unica consolle, sgravando così il carico della virtualizzazione.

L’idea non è nuova: sistemi operativi come OpenVZ, FreeBSD, Solaris Containers e Linux-VServer hanno sostenuto questo tipo di funzionalità per anni come un elemento centrale della scalabilità del cloud.

Ma è stata la recente introduzione di una piattaforma aperta come Docker a riportare in auge l’attenzione alla containerizzazione e al suo potenziale intrinseco nel supportare la scalabilità delle applicazioni distribuite per l’universo mobile. Anche questo è digital management.


Containerizzazione nativa nel kernel
Il supporto per la containerizzazione è stato effettivamente incluso nel kernel di Linux 2.6.24, con l’obiettivo di supportare la virtualizzazione a livello di sistema operativo e consentire a un singolo host di operare più istanze di Linux isolate, chiamate Linux Containers (LXC).

LXC si basa su un concetto in cui sono previsti dei gruppi di controllo Linux (cgroups) in cui ogni gruppo di controllo è in grado di offrire applicazioni complete come se fossero risorse isolate, processore, memoria o accesso I/O inclusi, senza che siano necessarie delle macchine virtuali vere e proprie.

Linux Containers offre anche un sistema autonomo completo per la gestione dei namespace, in modo che il raggruppamento di ogni processo risulti separato e non possa vedere le risorse degli altri gruppi, supportando così file system, user ID, network ID e altri elementi tradizionalmente associati ai sistemi operativi che vengono visualizzati come un container dall’identità unica (senza il rischio di omonimie).

Piattaforme di containerizzazione delle applicazioni come Docker non sostituiscono Linux Containers. Al contrario, il concetto è quello di utilizzare LXC come base, aggiungendo ulteriori funzionalità di livello superiore.

Ad esempio, una piattaforma come Docker consente la portabilità tra le macchine (anche mentre Docker è in esecuzione), il che permette a un applicazione e ai suoi componenti di esistere su un singolo oggetto mobile.

LXC da solo supporta la mobilità ma la progettazione è legata alla configurazione del sistema. Questo significa che se viene spostato su un’altra macchina, potrebbero subentrare delle differenze che potrebbero impedire al container dell’applicazione di funzionare nello stesso modo, se non addirittura a non funzionare proprio.


Evoluzione dello sviluppo dei container
Facendo altri esempi, Docker offre strumenti di compilazione automatica per semplificare agli sviluppatori il passaggio dal codice sorgente ai container utilizzando soluzioni come Chef, Maven, Puppet o altri framework di programmazione che automatizzano il processo di programmazione. Dal momento che qualsiasi contenitore può servire come immagine di base per altri contenitori, è più facile riutilizzare quelle componenti, che possono essere facilmente condivise attraverso un registro pubblico.

Quindi l’obiettivo di piattaforme come Docker e affini è di aiutare una più rapida integrazione delle applicazioni nei container e mantenere o aggiornare questi container applicativi per proseguire nello sviluppo e nell’integrazione del kernel di Linux.

La gestione logica della virtualizzaione porta nuovamente la programmazione a lavorare di concetto, oltre che di sistema. Una sfida quotidiana per ottimizzare i data center software defined.

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

Articoli correlati