Le applicazioni dovrebbero essere sempre scalabili in microservizi, direbbe mia nonna!
Mia nonna è una personcina piuttosto avanti per la sua età: prima ha imparato ad usare il telefonino per telefonare, poi per inviare SMS – cose tipo “questoèiltuonumeroditelefono?” – e infine a mandare MMS, dopo aver scoperto come scattare foto al suo fantastico gatto Certosino, solitamente in posizione cacca. Questo dimostra che mia nonna, con la sua saggezza popolare del “un problema per volta, ratìn” ha sempre saputo dell’esistenza dei microservizi.
I microservizi: in breve di cosa si tratta
I microservizi sono un modo di spacchettare un’architettura digitale complessa, con l’obiettivo di semplificare, rendere più efficiente ciascuna funzione e ovviamente risparmiare.
Da un sistema unico, o monolitico, si viene a creare una raccolta di servizi che se messi insieme compongono l’applicazione completa, ma possono anche lavorare separatamente.
Semplifichiamo!
Lo schema mostra un’interfaccia web (cioè quello che noi utenti vediamo), che richiama a sé i servizi che le permettono di funzionare, ciascuno con il suo database di servizio.
- I microservizi sono progettati, creati e scalati separatamente gli uni dagli altri.
- Se serve possono essere connessi tra loro oppure rimanere indipendenti.
- Possono essere sempre accesi oppure spenti e usati solo se serve.
Nella progettazione di un sistema di questo tipo è fondamentale chiedersi quali siano le parti del sistema irrinunciabili e cosa invece può essere acceso e spento per realizzare economie di scala.
Come funzionano e parlano tra loro i microservizi?
I piccoli servizi, ciascuno con il proprio compito verticale, possono doversi mettere in relazione tra loro. Per farlo usano le API (Interfacce di Programmazione delle Applicazioni) ovvero dei banali pezzi di codice di programmazione, che dicono loro come fare.
Visto che gli esempi rendono tutto più semplice: se mia nonna ha imparato a condividere la sua posizione in tempo reale su WhatsApp, è perché una API mette in contatto Google Maps con Whatsapp, facendo in modo che io possa ottenere le indicazioni stradali per recuperarmi la nonna.
Facciamo un esempio: Netflix
Spacchettando Netflix potremmo trovare:
- Un’interfaccia grafica
- Un media player
- Contenuti video
- Un database che tiene traccia di tutto per tutti i suoi utenti (a quale serie, puntata, secondo di visualizzazione siamo arrivati, quali generi preferiamo, anagrafica, dati di pagamento…).
- Il marketing e le sue funzioni di e-mail marketing (elaborazioni delle preferenze e nuovi suggerimenti).
- …e molto altro
Tra queste ci sono delle componenti che devono essere sempre disponibili, come i contenuti video o il database degli utenti: non si possono spegnere, mai!
Alcuni servizi invece possono essere attivati solo se e quando necessario: ad esempio non serve che il software che aggiorna le preferenze di ciascuno di noi lavori 24/7 (per intenderci: quello che permette al marketing di mandarci le newsletter e di consigliarci cosa vedere prossimamente). In questo caso, vale la pena separarlo da tutto il resto e attivarlo solo nel momento in cui l’utente finisce di vedere la sua puntata giornaliera e occorre aggiornare il database.
Microservizi e cloud pay-per-use: 2 mondi strettamente connessi
Sono le 23.45, quasi tutti stiamo andando a dormire dopo aver finito di vedere la nostra serie preferita. Ecco che il software che aggiorna il nostro database delle preferenze entra in azione e per un paio d’ore avrà un picco di lavoro importante.
A Netflix ora – e solo ora, non per tutto il resto della giornata – conviene acquistare più potenza e spazio di calcolo da assegnare al microservizio che ne ha bisogno. Questo può essere fatto solo grazie all’architettura a microservizi, combinata con la tecnologia cloud.
Netflix paga così solo la capacità di calcolo che veramente utilizza per un periodo di tempo, gestendo il carico di lavoro in maniera efficiente. Non è necessario né ridimensionare l’intera struttura a causa dei picchi e del continuo crescere degli utenti, né modificare o riprogrammare tutto il sistema: sarà sufficiente attivare il cloud per il tempo necessario al singolo servizio di svolgere il proprio lavoro e smaltire il picco della buonanotte.
*Disclaimer: non sappiamo veramente come è fatta l’applicazione di Netflix, ma è un bell’esempio semplice.
Come si crea un’architettura a microservizi?
Ecco, qui ci addentriamo in un ambito che mia nonna chiamerebbe “ufficio complicazioni problemi inesistenti”. Giusto per amore di completezza, diciamo che esistono dei software per farlo. Docker e Kubernetes, nome in codice K8s, sono tra questi: si tratta di sistemi open-source per organizzare il lavoro e le risorse e creare un’architettura a microservizi.
I vantaggi delle architetture a microservizi
In sintesi: il lavoro risulta più veloce, agile e i costi si riducono. Vediamo nel dettaglio perché.
- I microservizi, essendo micro e indipendenti, sono semplici da modificare e ridistribuire. Ad esempio, se serve una modifica ad un solo servizio è possibile farla e ridistribuire solo quel pezzetto, rendendo l’operazione anche meno costosa.
Questo favorisce i test, l’innovazione e la crescita: perché sbagliando si impara e si cresce, direbbe mia nonna! - I microservizi favoriscono sia la specializzazione che l’integrazione delle differenze.
Poiché i microservizi non devono per forza condividere il codice, a ciascun “micro” può essere assegnato un team specializzato, libero di scegliere gli strumenti che ritiene migliori per risolvere il problema specifico. Alle API il compito di connettere i diversi “micro” per creare un’applicazione completa e ottimale. - La separazione degli elementi permette di creare architetture meno soggette a errori: nel piccolo è più difficile che l’errore si verifichi e, visto che i servizi non si influenzano tra di loro, l’errore rimarrebbe confinato ad un singolo componente dell’applicazione.
- I microservizi creano economie di scala: possono essere dimensionati separatamente, a seconda delle necessità del singolo servizio e sfruttando i meccanismi pay-per-use del cloud si abbattono ulteriormente i costi di un’infrastruttura monolitica di proprietà.
- I microservizi sono su misura: costruiti e combinati tra loro in base alle esigenze dell’azienda.
- I microservizi cambiano con l’azienda e creano strutture ordinate anche nel tempo.
Man mano che le aziende crescono, anche le loro architetture digitali cambiano. L’architettura a microservizi permette di aggiornare semplicemente alcune parti e di lasciare la struttura in ordine. Senza contare che non si vengono a creare strutture monolitiche obsolete e costose da rimpiazzare.
Gli svantaggi delle architetture a microservizi
Non ve lo nascondiamo: come tutte le innovazioni, anche i microservizi all’inizio possono dare qualche problema.
- Occorre una pianificazione più che precisa. I dati vengono gestiti separatamente dai singoli servizi. Se non c’è una buona previsione di tutte le azioni può ad esempio capitare che il database con i dati dei clienti non comunichi con quello degli ordini online, creando incoerenza tra i dati.
- Più si microservitizza, più l’architettura diventa estesa e complessa, con tante connessioni tra i servizi e dunque tanti nodi da tenere sotto controllo. Anche in questo caso una buona progettazione può ovviare al problema.
- Infine, non tutti sono come mia nonna e accettano di buon grado i cambiamenti epocali. Scegliere i microservizi significa portare un cambiamento organizzativo notevole, per questo potreste incontrare un po’ di resistenza.
Momit e i microservizi: notizie fresche di giornata
A partire dalla prossima release di Zadara Cloud – nostro partner esclusivo per la fornitura di servizi in cloud – sarà possibile usare il software anche come orchestrator di Docker e Kubernetes e scalare i microservizi.
Il nome per una volta viene in aiuto alla comprensione: come un vero direttore d’orchestra, assegna piccoli compiti e permette di gestire tutta la struttura armoniosamente.
Mia nonna l’amerebbe: oltre a precorrere i tempi con la sua visione a microservizi è stata una brava pianista, ospite assidua dei teatri di musica classica.