,

Microservizi: 6 motivi ed 1 esempio

Michele Girardi /

Cosa sono i microservizi e perchè progettarli

E’ sempre più frequente il disegno delle architetture dei software detto a microservizi.
Si tratta di un approccio all’organizzazione delle soluzioni software secondo cui esse sono scomposte in più servizi indipendenti di piccole dimensioni che comunicano tra loro tramite protocolli prestabiliti.

“Iniziamo con l’esempio”

Per inquadrare istantaneamente l’idea che sta alla base di questo approccio basta pensare a come sono organizzati i pit stop nei Gran Premi di F1:

In questa immagine possiamo considerare ogni meccanico come un microservizio, estremamente specializzato ed efficiente nello svolgere una funzione e contemporaneamente in perfetta comunicazione con gli altri. Ora questo articolo potrebbe anche finire qui, l’immagine è infatti perfetta per rappresentare il concetto di microservizi.

Per chi è più curioso possiamo andare però un po’ più a fondo.
Nelle applicazioni software le architetture a microservizi si contrappongono a quelle monolitiche, dove tutti i processi sono strettamente collegati tra loro e contenuti un singolo servizio con i conseguenti vincoli alla flessibilità.
Viceversa nell’approccio in questione, i microservizi sono controllati da piccoli team autonomi e tali architetture consentono di scalare e sviluppare le applicazioni in modo rapido e pulito permettendo di ottimizzare il time-to-market di nuove funzionalità.

“ma quali sono i 6 motivi per scegliere i microservizi?”

1) Agilità
Con i microservizi la complessità viene scomposta, ogni servizio richiede quindi piccoli team indipendenti e proprietari del servizio che gestiscono. In tal modo i team affrontano temi relativamente semplici e ben definiti, la situazione ideale per lo sviluppo del software.

2) Scalabilità
I microservizi consentono di dimensionare i servizi singolarmente ed indipendentemente in base alle necessità. Ciò permette anche di misurare con precisione i singoli costi e di rispondere rapidamente ad eventuali variazioni nei volumi di richieste di ogni singola funzionalità.

3) Distribuzione
I microservizi supportano integrazione e distribuzione continue che sono alla base del modello DevOps. In tale modo gli aggiornamenti del software sono più semplici e rapidi ed eventuali errori possono essere gestiti riducendo al minimo i rischi.

4) Tecnologia
Le architetture basate su microservizi non vincolano un approccio tecnologico unico all’intera soluzione software. I team hanno infatti libertà di scelta riguardo gli strumenti preferibili per i loro problemi specifici. Possono quindi scegliere il miglior strumento per ciascun lavoro.

5) Riutilizzo
I microservizi non sono progettati e sviluppati per uno specifico contesto ma sono blocchi indipendenti. Essi sono quindi perfettamente riutilizzabili ogni volta che si presenta la medesima necessità in contesti o funzionalità diverse.

6) Resilienza
In un’architettura monolitica un problema in un unico componente potrebbe avere ripercussioni sull’intera applicazione. Grazie ai microservizi invece, si possono isolare le funzionalità coinvolte senza bloccare l’intera applicazione ed aumentandone di conseguenza la resilienza.

“ma allora i microservizi sono la soluzione definitiva?”

Come sempre le cose non sono così semplici.
Innanzi tutto perchè l’approccio architetturale a microservizi non è per nulla banale, in particolare per quanto riguarda gli aspetti progettuali e comunicativi. Infatti, se i componenti non sono realizzati in maniera estremamente pulita, si rischia di muovere la complessità dall’interno di un componente alle sue connessioni con gli altri. Bisogna investire quindi molte risorse nella progettazione ed anche i costi di esercizio potrebbero essere importanti.

Bisogna infine prestare molta attenzione alle migrazioni di soluzioni monolitiche esistenti verso architetture a microservizi per non rischiare di ricadere in un monolite distribuito, che è una situazione che non porta vantaggi ed è difficile da gestire

Insomma i microservizi probabilmente non sono necessariamente la scelta migliore per ogni azienda.
Le realtà che ne possono trarre i maggiori vantaggi sono quelle che richiedono continui e rapidi cambiamenti per adeguare le soluzioni all’evolvere del loro business, sia in termini di funzionalità che di scalabilità e che dispongono delle risorse necessarie ad affrontare i progetti sia in termini di quantità che di qualità.