Architettura a microservizi, come funziona e quali vantaggi porta

Architettura a microservizi, come funziona e quali vantaggi porta

Un’architettura a microservizi si basa sullo sviluppo di ogni singola applicazione come insieme di software più semplici, isolati durante l’esecuzione in un proprio processo e intercomunicanti tra loro mediante protocolli leggeri e standardizzati. 

Il sistema di sviluppo a microservizi nasce come naturale evoluzione alla logica monolitica usata abitualmente nell’IT per tanti anni, che ha portato all’esistenza di piattaforme composte da una singola applicazione estremamente sofisticata e complessa. 

È una architettura evoluta che offre numerosi vantaggi e risolve importanti problematiche sia per il lavoro dei reparti IT sia per i responsabili della pianificazione strategica e le esigenze di business delle società. 

Container e microservizi 

Ogni architettura a microservizi si basa sul concetto di Container, un software che rappresenta un contenitore logico in grado di virtualizzare il sistema operativo di un host e le sue risorse, per esempio i database, eseguendo un processo o un insieme di processi in modo isolato rispetto al resto del sistema. Il container più diffuso attualmente in ambiente IT desktop, server e cloud è Docker, in grado di funzionare con decine di distribuzioni Linux e con Windows Server. 

Il concetto di containerizzare una applicazione insieme a tutti i componenti (codice binario, runtime, librerie, file di configurazione e così via) è comune con le Virtual Machine, o VM, in uso in vari ambiti da molti anniLa differenza principale è che i Container virtualizzano il sistema operativo condividendone il kernel, senza dovere inglobare tutto il sistema operativo. 

Il vantaggio immediato è che sono molto più compatti in termini di spazio di occupazione, si avviano più velocemente e permettono una migliore ottimizzazione delle risorse necessarie. In questo modo inoltre risultano più facilmente trasportabili dagli ambienti di sviluppo a quelli di produzione e possono operare con server fisici, virtuali, cloud pubblici, privati o ibridi virtualmente senza alcuna modifica grazie gli standard adottati da tutti i provider che adottano e supportano architetture a microservizi. 

Quando i moduli che costituiscono una applicazione sono molti da gestire diventerebbe difficile agire su ciascuno di essi manualmente, perciò si deve adottare uno strumento per semplificare e automatizzare le operazioni necessarie, per esempio deploy, aggiornamento e riavvio di servizi interrotti. Tali strumenti, in grado di amministrare in modo semplice e spesso del tutto automatico i requisiti di funzionamento e messa in opera di ogni microservizio sono definiti in gergo orchestratori e uno dei più utilizzati attualmente è l’open source Kubernetes. 

I vantaggi dei microservizi 

Quando si progetta una applicazione come un insieme di servizi più semplici, ciascuno deputato a una singola funzionalità, risulta in seguito possibile procedere parallelamente nello sviluppo effettivo, destinando specifiche risorse umane e tecnologiche a ogni singola componente in modo che il progetto avanzi perfino con tempistiche differenti tra i vari moduli necessari al suo funzionamento. 

I singoli componenti dei team di sviluppo di una architettura a microservizi possono testare e rilasciare i vari moduli in tempi più brevi, grazie anche a una maggiore specializzazione nel tempo sulle singole componenti, senza dovere conoscere nel dettaglio il funzionamento di tutta quanta l’applicazione. 

Se si deve aggiornare una applicazione complessa monolitica, è necessario considerare l’impatto delle modifiche su tutto il progetto, mentre operando su singoli servizi ben definiti e indipendenti, si riduce drasticamente il time to market. Rilevare e correggere un bug richiede naturalmente meno tempo in una architettura a microservizi ed è assai meno probabile che la sua esistenza infici o arrivi a bloccare il funzionamento dell’intero software, come invece avviene facilmente nelle piattaforme monolitiche. 

Quando si devono eseguire aggiornamenti di sistema, grazie all’isolamento offerto dai container sarà sufficiente operare virtualmente su un solo sistema operativo host, o un motore di database, il che se si usano licenze non Open Source ma proprietarie comporta un sensibile risparmio sia in termini di tempi sia di costi economici. 

modern-application-development