Con il termine “microservizi” si identifica un nuova tipologia architetturale con la quale progettare applicativi software. È da un po’ di tempo che tanti articoli di informatica e blog dedicano spazio a questa tematica: digitando la parola microservizi su un qualsiasi motore di ricerca si possono trovare moltissimi contributi tecnici. Tipicamente viene analizzato un aspetto tecnico identificandone i vantaggi e gli svantaggi. Meno frequenti invece sono gli interventi che cercano di fornire una visione di prospettiva su come questo nuovo approccio innovativo alla creazione di software possa impattare sensibilmente il mondo del business, in senso generale.
Vediamo assieme perché i microservizi sono un elemento importante per le future opportunità di business.
Viaggiatori digitali
Il termine digitalizzazione è molto utilizzato in questo periodo. Bene o male, se è chiaro a tutti che digitalizzare attività e processi di business è una cosa importante, forse è meno chiaro che cosa fare esattamente e quali progetti intraprendere da subito. L’offerta di tecnologie informatiche e digitali in genere è infatti talmente ampia e talmente variegata che diventa veramente molto difficile fare la scelta migliore. È un po’ come entrare in un grande bazar ricco di mercanzie ed avere solamente un euro da spendere. Si deve scegliere cosa acquistare, ma cosa?
Ogni negoziante vi fa entrare nel proprio negozio ricco, dice lui, di oggetti utilissimi da acquistare, e voi non potrete fare altro che fidarvi di quello che più vi convince. Come fare allora?
Ritengo che l’unico modo sia cambiare la mentalità con la quale si osserva la digitalizzazione, da turisti digitali dobbiamo diventare viaggiatori digitali. Il viaggiatore digitale infatti è colui che evita i luoghi pensati per la grande massa e si concentra solo su una cosa: sul proprio viaggio.
Nel caso del software veniamo bombardati da parole roboanti come BigData, Cloud Computing, Intelligenza Artificiale, Business Intelligence e così via. Ecco, siete entrati nel grande bazar! Non sono parole vuote, anzi, sono concetti importanti, ma possono confondere perché sono associate a una miriade di offerte altisonanti che però spesso sono difficili da valutare. Io credo che non si possa più rimandare il momento in cui svestire i panni del turista ed indossare invece quelli del viaggiatore.
In fondo il segreto di ogni viaggiatore è uno solo: conoscere bene sé stessi, avere consapevolezza cioè di chi si è. E se lo riportiamo al mondo digitale significa conoscere bene come è fatto il nostro sistema informativo e come le persone lo usano. Quali sono i processi di business che esso implementa? Quali sono quelli che non implementa? Quanti di quelli non implementati sono automatizzabili e quanti invece è bene che rimangano così come sono? E se volessimo automatizzare qualche processo o volessimo aggiungere delle nuove capacità al nostro sistema, di cosa avremmo bisogno? Queste nuove capacità ci aiuteranno a fare meglio il lavoro che stiamo facendo oggi? Come potrebbe essere la mia azienda, o la pubblica amministrazione di cui sono responsabile, se avessi queste nuove capacità all’interno del mio sistema informativo?
Rispondere a queste domande significa prendere consapevolezza di chi si è digitalmente. Significa iniziare ad essere dei viaggiatori.
Un nuovo tipo di architettura
In questo contesto cosa significa la parola microservizi e come potrebbe esserci utile all’interno del nostro viaggio? I microservizi sono un modo nuovo con il quale si possono creare applicazioni software e sistemi IT in generale. È come se avessimo scoperto come costruire i grattacieli. Se siamo riusciti a costruire edifici alti centinaia di metri è solo perché abbiamo sviluppato nel tempo un modo nuovo con il quale progettare le strutture portanti di un edificio e questa innovazione ha permesso all’uomo di salire molto più in alto di dove poteva arrivare prima. Lo stesso salto tecnologico accade per il software con i microservizi. I microservizi sono un nuovo modo di progettare il software e i sistemi software in generale: sono un nuovo modello architetturale
Essere adattabili, essere elastici
Il mondo nel quale stiamo viaggiando cambia in modo estremamente veloce. L’introduzione delle tecnologie informatiche ha stravolto la vita di tutti negli ultimi anni. Mentre valutiamo tutti gli effetti dei social e di come abbiano cambiato radicalmente il modo di comunicare, stanno avanzando altre rivoluzioni: crypto-monete, Internet delle cose, intelligenza artificiale, ecc.
Dobbiamo ancora pienamente capire come intercettare le opportunità delle rivoluzioni iniziate qualche anno fa, e già stanno arrivando le nuove. Allora facciamoci una domanda: in questo mondo che si muove così veloce, qual è la caratteristica che può farci emergere come vincenti? Sicuramente la capacità di essere adattabili ed elastici, ossia la capacità di poterci trasformare in base al contesto e di poterci adeguare alle mutevoli contingenze di mercato.
Nel nostro viaggio digitale, essere adattabili ed elastici significa avere un sistema informativo facile da trasformare, facile da adattare alle differenti esigenze che ci si parano davanti. In termini pratici questo significa abbattere i tempi e i costi di messa in opera dei nuovi progetti digitali. Significa avere la capacità anche di provare vie innovative prima degli altri senza correre il rischio poi di non riuscire a tornare indietro qualora si rivelino sbagliate. Diciamo perciò che il nostro sistema è adattabile quando ci costa poca fatica cambiarlo. Significa anche poter scalare il nostro sistema informativo in base alle esigenze, e cioè poterlo regolare in base alle necessità d’uso. Per funzionare ogni sistema informativo ha bisogno di computer sui quali il software viene eseguito, ha bisogno cioè di risorse. È chiaro che è totalmente inutile avere tante risorse nei momenti in cui non servono, mentre al contrario è di vitale importanza avere risorse quando servono. Dobbiamo perciò cercare di avere un sistema elastico, ossia un sistema che può essere regolato in base ai carichi di lavoro.
I microservizi permettono di aumentare l’adattabilità del nostro sistema e la sua elasticità. Per rendere adattabile ed elastico un software, lo si suddivide in pezzetti molto piccoli (micro) che possono essere “montati” e “spostati” a piacimento, da cui il nome microservizi. Invece di avere un unico grande software da gestire, si ricorre a piccoli pezzi da comporre tra di loro. Il software diventa quindi più adattabile: se si deve introdurre una nuova capacità al nostro sistema, sarà sufficiente aggiungere i pezzetti necessari a tale scopo senza alterare gli altri esistenti. Se, invece, avessimo un unico grande blocco, saremmo costretti ad agire su tutto il blocco producendo ritardi anche sulle funzioni non rilevanti per il nostro intervento.
Allo stesso modo, se si vogliono introdurre modifiche nel sistema, sarà sufficiente cambiare solamente i pezzi interessati senza dover agire, ancora una volta, su tutto il blocco. I microservizi rendono il sistema più elastico perché possiamo andare a scalare solamente i pezzetti che servono invece che tutto il blocco. Tornando all’esempio del grattacielo, è un po’ come se potessimo aggiungere e togliere piani a piacimento. Ci sono molti inquilini? Aggiungo un piano. Ce ne sono pochi? Lo tolgo. Con i microservizi possiamo creare un sistema che dipende linearmente dal carico d’uso permettendoci così di dimensionare i costi infrastrutturali in base alle reali necessità, senza esagerare e senza lesinare.
È adattabile ed elastico tutto ciò che è riconducibile ad un insieme collaborativo di elementi tra loro distinti. Pensiamo a quanto è adattabile il corpo umano che è totalmente composto da cellule: piccoli elementi simili tra loro che differiscono per funzione ma in grado di collaborare efficacemente.
Essere autonomi
Veniamo infine a un’ultima caratteristica importante dei microservizi: l’autonomia, proprio come in un viaggio. È bene essere autonomi nelle decisioni per poter definire il percorso senza che nessun altro ci imponga nulla ma anche avere buoni amici che ci accompagnano e i riferimenti giusti per tutte le occasioni in cui avremo bisogno di consigli e di opinioni per scegliere dove andare. Dobbiamo invece evitare di viaggiare con qualcuno che vuole farci fare il suo percorso invece che il nostro. È un’analogia che vale anche per il software poiché molto spesso la nostra autonomia decisionale si scontra con le rigidità delle applicazioni che abbiamo scelto.
Quante volte abbiamo chiesto dei cambiamenti nei nostri applicativi che ci sono stati negati oppure ci sono stati preventivati a prezzi molto alti rispetto al beneficio che potevamo trarne? Magari abbiamo selezionate le applicazioni in un momento in cui non avevamo ben capito cosa ci serviva, oppure ci siamo fatti attrarre da qualche funzionalità di grido che però alla fine si è rivelata inutile. È un fatto che attorno alla scelta di un software nel tempo vengono sviluppati processi e accumulati dati che potrebbero essere preziosi e che poi non è immediato eliminare o cambiare.
Tutto questo accade perché all’interno del nostro sistema IT ci siamo portati dei “pezzi” di software molto grossi e rigidi. In questo caso, anche se siamo stati bravi a creare il nostro sistema adattabile, alcuni dei suoi pezzi non lo sono perché sono controllati da partner esterni che non soddisfano più le nostre esigenze di adattabilità e di elasticità. Quando questo accade, sperimentiamo una perdita di autonomia: non siamo più in grado di decidere la direzione che vogliamo intraprendere perché ci è stato posto davanti un ostacolo più grande di quello che ci aspettavamo e sproporzionato rispetto ai requisiti di partenza.
Ogni volta che introduciamo un prodotto commerciale nella nostra architettura, sperimenteremo una piccola e inevitabile perdita di autonomia. Potremmo pensare di realizzare tutti i pezzi del nostri sistema IT in “casa”, ma per molte funzioni l’impegno è decisamente eccessivo e appoggiarsi ai prodotti commerciali è certamente la soluzione più sensata. Grazie ad un’architettura a microservizi, però, questa perdita di autonomia decisionale può essere ridotta. Come è possibile? L’introduzione di un’architettura a microservizi richiede di possederne la governance, ossia il controllo e la gestione. Un’architettura a microservizi ci obbliga cioè a sapere bene come funziona il nostro sistema informativo, quali processi implementa, e quali non implementa.
Portare la conoscenza e la gestione del sistema informativo all’interno della propria organizzazione potrebbe apparire come un costo da pagare, in realtà ci porta a quella trasformazione già descritta: il passaggio da turista digitale a viaggiatore digitale.
Un’architettura a microservizi ci spinge a portare in casa il cuore di tutto il nostro sistema, la sua architettura, la sua struttura. Quando questo accade, il modo con cui interpretiamo e curiamo il nostro sistema informativo cambia radicalmente. Siamo noi che conosciamo il sistema e siamo noi che diciamo e chiediamo cosa esattamente ci serve. Anche quando decidiamo di acquistare un prodotto commerciale siamo in grado di chiedere al fornitore le condizioni minime di accettabilità del suo prodotto all’interno del nostro sistema, e cioè di specificare molto più dettagliatamente i requisiti che deve soddisfare il suo prodotto affinché sia integrabile nel nostro sistema. Possiamo quindi fare scelte più precise e più oculate, evitando di investire denaro dove non serve e concentrandolo invece dove serve. I microservizi ci fanno acquisire una nuova autonomia.
Conclusioni
Il tema dei microservizi richiede molti approfondimenti, a partire dalle tecnologie che si possono utilizzare e al modo con il quale affrontare la gestione dei progetti. Qui ci siamo soffermati su alcuni aspetti essenziali della rivoluzione a microservizi che aiutano a comprendere perché e come la loro introduzione possa influenzare il nostro sistema software e, come ricaduta, il nostro business.
La parola chiave è certamente adattabilità, ossia la capacità di poter cambiare pelle nel minor tempo possibile ed al minor costo possibile. Va comunque compreso che se da una parte i microservizi ci offrono la possibilità di reagire più velocemente ed efficacemente a scenari sempre più mutevoli, dall’altra ci richiedono di non demandare più tutta la gestione del software a realtà esterne ma di internalizzarne la conoscenza e la gestione della sua struttura, della sua architettura, al fine di poterlo gestire in modo razionale e puntuale. In molte realtà del panorama italiano questo è un vero e proprio salto culturale che però è ora di affrontare.
Ciò che va metabolizzato, è che il sistema software di un’azienda o di una pubblica amministrazione è il suo sistema nervoso, e qualsiasi decisione di business si prenda non può più prescindere da come tale sistema funzioni. I microservizi offrono oggi la possibilità di prendere in mano questa parte così vitale della propria attività. Per alcuni è un’evoluzione naturale di quanto fatto negli anni passati, per altri è una vera e propria rivoluzione. Per tutti è un passaggio imprescindibile per affrontare le sfide che ci aspettano.
Claudio Guidi è CEO di italianaSoftware e lavora da diversi anni su archietture distribuite a microservizi. Insieme a Fabrizio Montesi, altro fondatore di italianaSoftware ha creato un nuovo linguaggio di programmazione open source orientato specificatamente ai microservizi (http://www.jolie-lang.org).