La diffusione delle applicazioni cloud native ha dato un notevole impulso alle architetture IT chiamate a supportarne lo sviluppo. I container informatica costituiscono in tal senso un ambito tecnologico decisamente privilegiato, in quanto consentono di sposare alla perfezione la logica dei microservizi (qui tutto quello che c’è da sapere sull’architettura a microservizi) che compongono le applicazioni moderne lungo l’intero ciclo di vita basato su metodologie Agile e DevOps.

Vediamo dunque cosa sono i container, gli aspetti basilari del loro funzionamento nel contesto dello sviluppo software e quali sono gli evidenti vantaggi che possono generare per gli ISV e le aziende che decidono di implementarli nella loro infrastruttura IT.

Cosa sono i container in informatica

I container, come il nome stesso suggerisce, sono dei contenitori logici che includono tutti i componenti necessari per eseguire un’applicazione. In particolare, nascono per dare una risposta pratica all’esecuzione dei microservizi. Per comprendere appieno la logica su cui si basano i container, è dunque opportuno un rapido excursus sul superamento delle architetture software monolitiche, su cui si basano le tradizionali applicazioni legacy installate in locale.

Oltre al modello software tradizionale, si è progressivamente diffuso lo sviluppo di applicazioni in cloud, soprattutto per alimentare il mercato dei modelli a servizi. Il Software as a Service (SaaS) consente di rivoluzionare l’accesso e la gestione delle applicazioni, che vengono eseguite in cloud senza costringere l’IT delle singole aziende a gestire e mantenere localmente tutta l’infrastruttura. Gli utenti possono accedere alle applicazioni SaaS mediante un semplice browser web o una local app, senza dover necessariamente disporre di un’installazione in locale.

Dal punto di vista dell’architettura del software, lo sviluppo di applicazioni cloud native ha consentito una vera e propria rivoluzione, in quanto ha comportato la decomposizione di un unico blocco funzionale in vari componenti disaccoppiati, dando origine alla cosiddetta architettura a microservizi.

I microservizi costituiscono i vari componenti dell’applicazione complessiva, ma sono tra essi indipendenti, per cui possono essere sviluppati in maniera autonoma, in ambienti indipendenti, addirittura utilizzando delle tecnologie differenti, a partire dai linguaggi di preparazione. L’indipendenza dei singoli moduli che compongono l’applicazione risulta inoltre funzionale alle metodologie di sviluppo Agile e DevOps, per cui non è necessario che ogni programmatore conosca l’intera applicazione, in quanto la sua azione può essere prevista su un solo componente.

La rivoluzione messa in atto dai microservizi ha dunque dato seguito all’esigenza di nuove tecnologie per definire gli ambienti di sviluppo per i componenti disaccoppiati delle applicazioni. Tali elementi funzionali dovevano condividerne le logiche e tradurle nella disponibilità concreta di sistemi virtualizzati capaci di eseguire le applicazioni in tutte le fasi del loro ciclo di vita, con particolare attenzione per il test e il deploy.

I container costituiscono quindi la risposta pratica agli ambienti di sviluppo per le applicazioni cloud native. Vediamo nello specifico quali sono i loro presupposti funzionali.

Come funziona un container

Abbiamo visto come un container consente di eseguire un’applicazione in un ambiente virtuale isolato, dotato di tutte le tecnologie necessarie, come gli strumenti di sistema, le librerie, il codice binario, le dipendenze, i file eseguibili e file di configurazione. Questo avviene grazie ad una virtualizzazione a livello di sistema operativo.

In buona sostanza, per i soli scopi legati allo sviluppo software un’intera macchina virtuale, che comprende anche la disponibilità delle risorse hardware, risulta a dir poco ridondante quando l’obiettivo da perseguire è semplicemente quello di eseguire un’applicazione in un ambiente isolato e personalizzato, per cui è sufficiente condividere le risorse del sistema operativo host. Per tale motivo, i container avviati sullo stesso server condividono tutti il medesimo sistema operativo.

Chiunque abbia una conoscenza anche soltanto basilare in fatto di virtualizzazione sa che tale aspetto potrebbe apparire un limite, e per certi versi lo sarebbe, se non fossero state implementate delle piattaforme di deploy come Docker, che consentono di eseguire i container su sistemi host differenti, anche se la configurazione del sistema operativo non è del tutto identica rispetto allo stato in cui sono stati creati.

Docker è una piattaforma open source nata per aggiungere numerose funzionalità ai container Linux di base, agevolando moltissimo il compito di chi è chiamato a gestirli. Docker agisce come un vero e proprio sistema operativo per container, in quanto consente di creare, testare e distribuire le applicazioni containerizzate, tenendo sempre sotto controllo il codice eseguito.

L’orchestrazione dei container

Le applicazioni moderne di una certa rilevanza possono arrivare a contare anche diverse centinaia di container, considerando anche le istanze multiple che vengono definite durante la fase di testing. Se è pur vero che il disaccoppiamento dei singoli microservizi consente uno sviluppo più agile, tale architettura tende naturalmente ad una certa frammentazione, che si traduce nella complessità di avere il controllo di un numero tale di elementi, sia quando si tratta di ricomporre l’intera applicazione, sia per un fatto di pura gestione, per eliminare le ridondanze, piuttosto che i container che non vengono più utilizzati, ma continuano di fatto ad occupare preziose risorse.

Per dare una risposta pratica a questa esigenza è nata la container orchestration, in particolare grazie ad una tecnologia open source come Kubernetes, originariamente creata da Google nel 2015, per essere successivamente ceduta in gestione alla Cloud Native Computing Foundation, di cui sono membri tutti i principali CSP e i fornitori di tecnologie IT per lo sviluppo software.

Kubernetes agisce in maniera coerente con i principi dell’IT governance, consentendo di ottenere una visibilità unificata di tutti i container attivi, a prescindere dalla loro posizione, che equivale a differenti servizi in cloud, offerti da differenti provider. Grazie al suo piano di controllo e ai file di configurazione manifest (JSON o YAML), Kubernetes consente di automatizzare le operazioni sui container e renderle incredibilmente più semplici rispetto alla loro implementazione manuale.

Attualmente la gestione dei container vede di frequente l’utilizzo di tecnologie commerciali basate su Docker e Kubernetes, con lo scopo di rende più semplice ed automatizzata l’intera pipeline che dà luogo all’intero ciclo di vita delle applicazioni.

Quali sono i vantaggi

A testimonianza dell’importanza strategica e del peso a livello di business che lo sviluppo cloud native ha progressivamente conquistato, è opportuno rilevare come il The 2021 Open Source Jobs Report di Linux Foundation mette al primo posto tra le competenze richieste sul mercato quelle relative al cloud e alle tecnologie basate sui container. Si tratta di un sorpasso storico rispetto a Linux, per un trend in continua ascesa, reso ancora più evidente dall’enorme richiesta di applicazioni SaaS generata dalla pandemia Covid-19, con il nuovo scenario legato al remote working che va ad accelerare il generale contesto di trasformazione digitale che le aziende avevano in molti casi tenuto in standby.

Tra i vantaggi comuni che l’utilizzo dei container per lo sviluppo delle applicazioni comporta possiamo facilmente riscontrare:

  • Riduzione del time to market delle applicazioni;
  • Funzioni standardizzate per agevolare la distribuzione delle applicazioni;
  • Elevata scalabilità in funzione dei carichi di lavoro effettivamente richiesti;
  • Riduzione generale dei costi grazie alla logica “pay per use” dei servizi in cloud, che demanda al CSP (Cloud Service Provider) l’onere di gestire l’infrastruttura IT necessarie per rendere disponibili i container e le tecnologie ad essi associate.

Al di là di questi vantaggi generici, il beneficio principale per le aziende è dato dalla modernizzazione delle applicazioni, sia grazie allo sviluppo di nuove applicazioni cloud native, che portando in cloud in tutto o in parte i sistemi legacy che rappresentano una tradizione certamente funzionale, ma sempre più obsoleta nei confronti delle nuove esigenze comportante dalla trasformazione digitale dei processi.

A livello tecnologico, tali obiettivi sono garantiti grazie alla possibilità di personalizzare in maniera estrema gli ambienti di sviluppo software, pur rimanendo nella comfort zone offerta dagli standard condivisi da tecnologie open source come Docker e Kubernetes. Il tutto si riflette in una elevata portabilità, coerente con l’architettura a microservizi e capaci di sfruttare pienamente le opportunità offerte dalla concorrenza del mercato dei servizi in cloud.

I container rappresentano pertanto uno dei attori fondamentali nel processo di modernizzazione delle applicazioni che costituirà uno degli elementi trainanti del business IT per molti anni a venire.

 

Container: Cosa Sono e Come Funzionano ultima modifica: 2021-11-04T10:17:34+01:00 da Francesco La Trofa

LEAVE A REPLY

Please enter your comment!
Please enter your name here