Una delle tendenze che si sta affermando in campo di progettazione software è basata sui cosiddetti microservices: moduli software di dimensioni ridotte che offrono una funzionalità specifica, non fine a sè stessa ma calata in una logica applicativa di grandi dimensioni.
L’evoluzione software, in buona parte basata su programmazione orientata agli oggetti, ha portato alla creazione di piattaforme applicative di dimensioni notevoli che incarnano progetti molto grandi e, a volte, l’intera produzione di un’azienda. Tali applicazioni, spesso definite monolitiche in quanto costituite da un corpo unico, presentano col tempo degli svantaggi:
- una complessa organizzazione del lavoro: distribuzione degli incarichi, formazione dei team, gestione delle responsabilità;
- spesso l’intera piattaforma è basata su un’unica tecnologia – ad esempio, interamente fatta in Java o in .NET, etc. – con lo svantaggio che alcune funzionalità potrebbero essere sviluppate meglio con altri linguaggi;
- difficoltà nello sviluppo e nella manutenzione;
- pianificazione dei test molto complessa.
La diffusione dei microservizi ha portato in tante aziende non solo la nascita di nuove piattaforme software così concepite ma anche la migrazione graduale di prodotti monolitici verso una struttura più modulare.
Tanto per chiarirci le idee, proviamo ad immaginare una piattaforma online costituita non da un motore unico ma da tanti piccoli servizi scritti in linguaggi diversi, ognuno autonomo come sviluppo, manutenzione e test, che dialogano tra loro in Rete. Ad esempio, potrebbero occuparsi uno di login degli utenti, uno dello storage di file, altri di elaborazioni, altri ancora della produzione di reportistica. Inoltre, possiamo legittimamente supporli scritti ognuno nel linguaggio che gli si addice: alcuni basati su Node,js, altri in Java, alcuni in .NET (perchè, ad esempio, devono interagire con prodotti Microsoft), altri in Ruby, Python e così via.
Anche la formazione dei team di sviluppo potrebbe essere più comoda con gruppi molto ristretti di sviluppatori che si occupano anche di un singolo microservizio.
Ci sono anche altri vantaggi come la possibilità di ridondare e scalare singoli microservizi che ne hanno bisogno per essere più reattivi mentre con un’applicazione monolitica si dovrebbe agire a livello globale.
Ovviamente anche i microservizi pongono alcuni problemi: devono necessariamente comunicare tra loro quindi ognuno deve avere il proprio strato di API da contattare, facilitano i test singoli ma si deve progettare bene dei test complessivi che mettono alla prova la piattaforma tutta insieme, le attività più complesse toccano spesso più microservizi quindi è necessario pianificarne la suddivisione e decidere a quale team assegnarlo.
Secondo il parere di molti esperti, sembra proprio che i microservizi siano pronti ad invadere il mondo e l’adozione di questa mentalità di progettazione da parte di grandi realtà dell’informatica appare come una conferma.
Stiamo a vedere cosa succede: noi continueremo a tenervi aggiornati!
No Responses to “Microservizi per logiche applicative di grandi dimensioni”