Da qualche tempo, uno degli argomenti di maggior interesse riguardo alle infrastrutture orientate all’alta disponibilità delle applicazioni è sicuramente costituito dai container software che consentono di isolare le applicazioni dal contesto in cui vengono eseguite.
Attraverso un container è possibile eseguire in modo coerente e agevole il deployment delle applicazioni, su qualunque ambiente di destinazione, qualunque esso sia, dal data center privato, al cloud pubblico, al computer portatile di uno sviluppatore.
La cosiddetta containerizzazione favorisce la netta separazione dei compiti tra coloro che si occupano dello sviluppo che possono concentrarsi sulla logica e le dipendenze dell’applicazione e la funzione di IT Operations che può concentrarsi sul deployment e sulla gestione dei sistemi, senza preoccuparsi di dettagli relativi alle applicazioni, come le versioni software o le configurazioni specifiche dal punto di vista applicativo.
I container in questo senso hanno una similitudine con le macchine virtuali (VM) impiegate in tutti i data center, che consentono di gestire in modo ottimizzato e condiviso l’hardware sottostante, pacchettizzando componenti software inter-dipendenti.
Tuttavia i container sono unità molto più leggere e offrono una serie di vantaggi aggiuntivi sia agli sviluppatori che ai team di IT Operations.
Le macchine virtuali virtualizzano lo stack hardware isolando l’intero sistema operativo dalle risorse fisiche che consentono di eseguirlo assieme alle applicazioni.
I container, invece, eseguono la virtualizzazione a livello del sistema operativo, isolando i pacchetti applicativi da questo.
Diversi container possono essere eseguiti direttamente sul kernel del sistema operativo, a tutto vantaggio di velocità di avvio e consumo di memoria. Infatti, più container condividono il kernel del sistema operativo e utilizzano una frazione della memoria rispetto a quella richiesta dall’avvio di un intero sistema operativo.
Allo stato dell’arte il più diffuso e noto sistema di containerizzazione è Docker, un prodotto open source sviluppato da Solomon Hykes sulla base dell’esperienza maturata in DotCloud, e attualmente è uno dei prodotti su cui si concentra l’interesse di molte aziende.
In realtà, per chi si occupa di grandi infrastrutture, e quotidianamente si trova ad effettuare il deployment di pacchetti applicativi su vasta scala, il problema è affrontato da almeno un decennio attraverso la sperimentazione e l’impiego non solo di soluzioni, più o meno proprietarie, per la containerizzazione del software, ma anche attraverso lo sviluppo di soluzioni di container management system in grado di consentire una maggiore automazione dei processi di distribuzione e controllo dei singoli container.
Per conto di alcuni dei nostri più importanti clienti, nel corso degli ultimi anni abbiamo avuto modo di sperimentare differenti soluzioni con architetture e paradigmi spesso molto diversi tra loro, maturando una nostra individuale visione sulle caratteristiche che piattaforme di questo tipo dovrebbero offrire.
Come è spesso accaduto nella storia dell’ICT, le soluzioni open source, specie quando sono promosse e supportate dai big player del nostro settore, risultano le scelte ottimali, non solo per le intrinseche qualità delle tecnologie proposte, ma anche per la grande base di competenze che si creano nell’ambito delle vaste community di sviluppatori, che facilmente sono aggregate da giganti come Google.
È indubbio che nessuna azienda, per quanto grande, possa aver dovuto affrontare il deployment di centinaia di milioni di container al giorno come accaduto a Google nel momento in cui ha diffuso i propri servizi basati sul cloud.
Per questa, e altre ragioni, una delle soluzioni più convincenti che consente di gestire il problema dell’orchestrazione dei container sembra essere Kubernetes, la piattaforma open source sviluppata proprio da Google a seguito di un processo incrementale, durato oltre dieci anni, che ha visto il rilascio per uso interno di diversi prodotti orientati a problemi più specifici e contingenti e che, nel corso del tempo, sono evoluti verso l’architettura finale.
Kubernetes è compatibile con diverse piattaforme di containerizzazione tra cui Docker.
L’impiego di Docker e Kubernetes per noi rappresenta la soluzione ideale per tutte quelle aziende che hanno la necessità di realizzare e gestire un’infrastruttura realmente orientata alle applicazioni.
Oggi, la maggior parte delle grandi aziende possiede data center basati su tecnologie di virtualizzazione che sono prevalentemente machine-oriented, dove il problema dell’alta disponibilità dell’hardware è definitivamente risolto. Tuttavia, l’high-availability delle applicazioni è un obiettivo ben più difficile da raggiungere, essendo dipendente anche da problemi intrinsecamente connessi alla qualità del software e alla qualità dei processi di deployment.
Containerizzazione e relativa orchestrazione sono senza dubbio gli strumenti principali che permettono di passare dall’architettura machine-oriented all’infrastruttura application-oriented.