Microservizi e container: cosa sono e perchè adottarli in produzione

L’approccio alla distribuzione delle applicazioni è cambiato radicalmente negli ultimi due decenni. Quando, tra la fine degli anni ’90 e l’inizio del 2000, i server di base a basso costo hanno sostituito i mainframe, le aziende hanno finalmente trovato un modo conveniente per isolare le applicazioni tra loro:

  • hanno potuto distribuire un solo servizio principale su ogni macchina fisica;
  • hanno configurato ogni server in base alle esigenze di risorse e sicurezza dell’applicazione che ospitava. Questo era utile perché se un server si guastava, solo un’applicazione ne risentiva.

Ci fu quindi un’enorme crescita del numero di server all’interno dei data center, che li resero sempre meno gestibili e, di conseguenza, meno utilizzati.

Con la nuova era delle macchine virtuali (VM) è stato possibile utilizzare più efficientemente le risorse di calcolo, consentendo allo stesso hardware di ospitare più di un server, ognuno dei quali si comporta come una macchina a sé stante.

Negli ultimi anni, tuttavia, tutte le piattaforme web hanno iniziato ad adottare un metodo diverso di partizionamento dell’infrastruttura e un nuovo tipo di architettura applicativa, utilizzando rispettivamente i container, microservizi ed orchestratori.

Cosa sono i container?

I container sono un’alternativa leggera alle macchine virtuali per fornire ambienti operativi isolati per i carichi di lavoro, utilizzando un metodo diverso per astrarre le risorse. Invece di basarsi su un hypervisor, i container condividono il kernel del sistema operativo (OS) host. Di conseguenza, evitano l’overhead dell’infrastruttura di un sistema operativo completo e forniscono solo le risorse di cui le applicazioni hanno effettivamente bisogno. Ciò significa che possono essere fermati e avviati più rapidamente in risposta alle fluttuazioni dei requisiti di scalabilità e offrono prestazioni complessive migliori rispetto alle macchine virtuali. Inoltre, per costruzione, risultano essere un sistema isolato con tutte le dipendenze necessarie al servizio che ospitano, essendo così portabili e condivisibili su diverse infrastrutture.

Cosa sono i microservizi?

L’architettura a microservizi è un approccio alla progettazione del software in cui un’applicazione è suddivisa in una serie distribuita di servizi che interagiscono fra loro. Ogni microservizio svolge la propria funzione specifica indipendentemente dagli altri microservizi che compongono l’applicazione. I microservizi sono una frammentazione logica che bene si adatta ai container, che offrono un controllo a grana fine sull’allocazione delle risorse e un uso più efficiente della capacità di calcolo.

Che cosa sono gli orchestratori?

Gli orchestratori sono un livello di astrazione superiore, permettono di avere un’interfaccia di gestione globale dei singoli container. Essendo ogni container un microservizio, può essere necessario averne a centinaia, rendendo così la loro amministrazione molto complessa. Gli orchestratori permettono invece di raggruppare logicamente container fra loro, rendendo più facili le attività di troubleshooting. Similmente, possono contribuire ad una migliore gestione dell’infrastruttura diminuendo il numero di interventi necessari per esempio ad allocare risorse, configurare network e assegnare volumi dedicati.

Vantaggi

I microservizi containerizzati assicurano una maggior resilienza rispetto ad una applicazione monolitica tradizionale. In caso di failure di un singolo componente, questo può essere rimpiazzato in pochi secondi da un suo clone e nessuno degli altri servizi interromperà la sua attività. Inoltre, la frammentazione rende possibile allocare esclusivamente la quantità di risorse richiesta, rendendo così più efficiente l’impiego dell’hardware.