Per molti anni le aziende di tutto il mondo hanno costruito i propri modelli di business avvalendosi dell’uso di software di tipo monolitico, ovvero quei programmi i cui componenti di base sono interdipendenti e non possono essere separati senza l’aggiornamento completo dell’applicazione.
Il bisogno di affrontare situazioni sempre più complesse ed imprevedibili ha portato molte società a doversi rinnovare.
È quindi da tale esigenza che è nata l’idea di una nuova architettura dei microservizi, secondo la quale i software sono composti da servizi indipendenti tra loro che rendono lo sviluppo delle applicazioni più rapido.
Oggi sono tantissime le imprese che si sono affidate ai microservizi per le loro architetture in quanto tale approccio offre scalabilità, flessibilità, framework di lavoro e varie metodologie.
Proviamo allora a capire cosa sono i microservizi, come si esegue la migrazione e quali vantaggi garantiscono.
Come funzionano i microservizi
I microservizi rappresentano un particolare e nuovo approccio utile per sviluppare l’architettura dei software in maniera tale che questi siano basati su servizi indipendenti di dimensioni più piccole in grado di comunicare attraverso API (Application Programming Interface) definite.
I servizi sono gestiti a loro volta da altrettanti piccoli team autonomi e con questo genere di architettura è possibile ottenere applicazioni in modo molto più veloce e semplice, riducendo anche il time-to-market delle nuove funzionalità.
I microservizi possono quindi essere considerati come la suddivisione di un’applicazione monolitica in singole parti applicative che riguardano i processi coinvolti in un preciso ambito di attività business.
La specificità è che i microservizi sono accoppiati tra di loro, ma soltanto in maniera debole o loosey-coupled. Ogni microservizio è poi dotato di API capace di inviare e ricevere messaggi tramite protocolli come HTTP e HTTPS. L’API più utilizzata è RESTful API, uno stardard architetturale nato per la comunicazione tra servizi web.
Dunque, ciascun microservizio agisce come una piccola applicazione autonoma e riesce ad eseguire operazioni sui dati di cui è responsabile. Inoltre, ha a disposizione un codebase controllabile da un gruppo di lavoro dedicato, il quale può avvalersi di metodologie DevOps e Agile.
Il fatto di essere loosey coupled, cioè debolmente collegati, fa si che i guasti temporanei o spegnimenti programmati di uno o più servizi non vadano ad impattare sulla funzionalità dell’applicazione a livello generale.
Migrare verso un’architettura dei microservizi non produce però una semplificazione delle attività poiché andrà ad aumentare il numero dei team di lavoro che includeranno altri sviluppatori.
Architettura dei microservizi vs. architettura monolitica
Con le architetture di tipo monolitico tutti i processi sono strettamente legati tra di loro e di conseguenza sono eseguiti come un singolo servizio. Ciò vuole dire che se un determinato componente dell’applicazione subisce una modifica, è necessario ripensare l’intera architettura.
In parole più semplici, andare a migliorare o ad aggiungere funzionalità all’applicazione monolitica è più complicato perché bisogna incrementare la base di codice. Di conseguenza, è molto più difficile inserire nuove idee o sperimentazioni.
In aggiunta, le architetture monolitiche hanno dei limiti per quanto riguarda la disponibilità dell’applicazione in quanto i diversi processi dipendenti tra loro vanno ad aumentare l’eventuale impatto di un unico errore.
Invece con l’architettura dei microservizi l’applicazione è sviluppata partendo da elementi indipendenti.
Tali servizi sono in grado di comunicare tramite interfaccia che impiega API molto leggere. Infine, ogni servizio può essere modificato, aggiornato e distribuito per rispondere alle funzioni specifiche di un’applicazione.
Come implementare i microservizi
Ci sono principalmente due metodi differenti per adottare l’architettura dei microservizi: brownfield e greenfield. Nel primo caso si inizia dalla soluzione monolitica già esistente, si individuano le singole funzionalità ed i loro confini e si va a scorporare i vari servizi gradualmente.
Ognuno dei servizi viene poi sottoposto a code refactoring, cioè viene modificato in porzioni di codice senza cambiarne il significato esterno, così da diventare microservizio. Il microservizio dovrà quindi avere una RESTful API per cooperare con l’applicazione monolitica e gli altri microservizi.
Con l’approccio greenfield invece l’architettura dei microservizi viene sviluppata interamente da zero. Il principale elemento a sfavore di tale impostazione è che non si ha davanti un esempio di piattaforma già collaudata dalla quale trarre ispirazione.
Al contrario, il vantaggio più importante è che ci si potrà concentrare esclusivamente sulla definizione di un sistema IT fondato su metodologie e tecnologie cloud native, come appunto i microservizi.
Le tipologie di microservizi
I microservizi possono essere di tre categorie differenti: Stateless, Persistence e Aggregator. Il primo tipo rappresenta la maggior parte dei microservizi che non conservano l’informazione di stato tra una sessione e l’altra.
Infatti, svolgono una transazione alla volta e non memorizzano nessun dato delle operazioni precedenti. Quindi, anche nell’eventualità di guasti, non pesano sul servizio all’utente poiché possono essere sostituiti da altri microservizi.
La seconda categoria invece deve mantenere l’informazione di stato nel caso in cui debbano essere usati i dati trasmessi nel corso delle richieste precedenti. Se una sessione viene interrotta, i microservizi di questo genere devono poter riprendere da dove si erano fermati.
Per finire, ci sono i microservizi Aggregator, i quali generalmente ricevono richieste che presuppongono la raccolta di dati da diversi servizi. Man mano che l’Aggregator riceve tali dati, li andrà poi a correlare e memorizzare fino ad ultimare il raggruppamento e mandare un messaggio aggregato in qualità di output.
I benefici offerti dai microservizi
L’architettura dei microservizi è la soluzione ideale per tanti buoni motivi. Vediamo quali sono i vantaggi che può apportare alle imprese:
- Maggiore agilità: realizzare software con i microservizi consente di avere team di dimensioni contenute che sono proprietari del servizio gestito. I team operano in contesti ridotti e ben definiti, così da lavorare in maniera rapida e indipendente. Questo va ad abbattere le tempistiche del ciclo di sviluppo;
- Scalabilità: con i microservizi è possibile scalare ogni servizio in forma indipendente per soddisfare le funzionalità che l’applicazione supporta. Questo permette ai team di ridurre l’infrastruttura secondo necessità e verificare i costi di una determinata funzione;
- Libertà d’azione: le architetture fondate sui microservizi non si servono di un unico approccio allo sviluppo dell’applicazione. Infatti, i team di lavoro hanno la libertà di selezionare gli strumenti più idonei per risolvere difficoltà e problemi;
- Il codice diventa riutilizzabile: suddividere il software in parti più piccole e definite consente ai gruppi di lavoro di usufruire di più funzioni per scopi diversi. Così un servizio studiato per una certa funzione può essere impiegato anche come base per un’altra funzionalità. Insomma, gli sviluppatori possono ideare nuove funzioni senza necessariamente dover riscrivere il codice da zero;
- Resilienza: in quanto indipendenti tra loro, i microservizi assicurano una maggiore resilienza in caso di errori. Non a caso le applicazioni sono capaci di gestire gli errori andando ad isolare soltanto la specifica funzionalità, senza fermare l’intera applicazione.
Esempi d’uso dei microservizi
Dal momento in cui hanno iniziato a diffondersi, i microservizi hanno presto cominciato a mietere successi e sono già molte le aziende di tutto il mondo che hanno deciso di puntare su questo tipo di architettura di sviluppo software.
Uno dei migliori esempi di applicazione di un approccio così innovativo proviene dal colosso dello streaming Netflix. Nel 2008 si è verificato un danno al database sul quale si basava la piattaforma con architettura monolitica ed ecco che la società ha pensato di cambiare codebase.
Avvalendosi dell’aiuto degli ingegneri di Amazon Web Services, i tecnici di Netflix hanno deciso di comporre un’architettura che univa microservizi e algoritmi capaci di scalare orizzontalmente, diventando leader nel campo dello streaming e produzione di serie tv e film.
Altro esempio molto apprezzabile è quello di Uber, l’app di trasporti privata che consente di prendere un passaggio in auto in qualsiasi momento.
In principio la società proponeva un’applicazione monolitica che riusciva a collegare passeggeri e conducenti, eseguire pagamenti, svolgere controlli in background e molto altro.
Successivamente l’impresa americana ha preferito spostarsi verso i microservizi, ideandone anche di nuovi. In tal modo l’azienda ha ampliato il proprio business a tutto il mondo ed ha potuto costruire ulteriori attività produttive.