Che cosa sono i microservizi? Guida all'infrastruttura e all'architettura
I microservizi sono un tipo di architettura utilizzata da molte aziende per lo sviluppo di software. Esistono diverse definizioni di microservizi ma la più comune è quella di Martin Fowler: "Lo stile architetturale dei microservizi è un approccio allo sviluppo di una singola applicazione sotto forma di una suite di piccoli servizi. Questi servizi sono costruiti attorno a funzionalità operative dell'azienda e sono implementabili singolarmente." La definizione di Fowler prosegue così: "Esistono esigenze minime di gestione centralizzata di questi servizi, che possono essere scritti in diversi linguaggi di programmazione".
Relazione fra microservizi e API
Microservizi e API stanno avendo grande visibilità e c'è un po' di confusione sui due concetti e sulla loro correlazione... innanzitutto, non sono la stessa cosa. Un microservizio è un'architettura che separa le parti di un'applicazione in piccoli servizi "autosufficienti" (cioè le API). Le API sono un'interfaccia e, per usare le parole di un esperto, "sono focalizzate su consumo self-service della risorsa, semplicità, sicurezza, analisi e velocità da offrire."
In passato, il settore IT utilizzava soluzioni monolitiche o o basate su SOA Service Oriented Architecture come standard, ma a causa della crescente complessità delle infrastrutture odierne, le SOA non sono più in grado di soddisfare richieste sempre più dinamiche e crescenti. I microservizi sono concepiti per raggiungere un grado elevato di agilità, per velocizzare la consegna e per crescere in modo modulare.
Equivoci sui microservizi
Prima di entrare nel dettaglio dell'architettura dei microservizi, è opportuno chiarire alcuni equivoci ricorrenti. Innanzitutto, il termine "micro" potrebbe indurre a pensare che si tratti di un servizio piccolo che, quindi, non dovrebbe svolgere funzioni complesse, ma non è così. È vero che un microservizio è un componente piccolo, ma può svolgere una vasta gamma di funzionalità, dalle più grandi e complesse alle più minuscole, ad esempio un sistema di login o un motore di pagamenti.
Inoltre, molti pensano che i microservizi siano un nuovo tipo di protocollo. In realtà i microservizi non sono una novità e nemmeno un protocollo. Come accennato sopra, le architetture di microservizi utilizzano API esistenti come i servizi REST e SOAP, AMQP e JMS.
Panoramica sui microservizi
Il concetto di base del microservizio è che si tratta di una piccola applicazione che fa una sola cosa, ma la fa molto bene. Un microservizio è:
- facilmente sostituibile
- sviluppato singolarmente
- implementabile singolarmente
Pur essendo sviluppato e implementabile singolarmente, un microservizio non è un'isola. Solitamente esistono molti microservizi in un'architettura o in una soluzione che devono interagire fra loro. Un microservizio fa parte di un ecosistema più ampio, nel quale opera accanto ad altri microservizi per realizzare ciò che normalmente verrebbe gestito da un'unica grande applicazione standalone.
Come i microservizi superano le problematiche di elaborazione
I problemi legati all'approccio preesistente, in particolare all'utilizzo di SOA, hanno portato a fare maggiore affidamento su un'architettura di microservizi. Spezzettando un'applicazione monolitica in molte piccole applicazioni indipendenti mediante contemporaneità o partizione, si ottiene un'applicazione che non offre l'efficienza necessaria. Se un'applicazione deve elaborare compiti, si parte dal presupposto che maggiore è l'efficienza del processo, migliore sarà il risultato. Con il tempo l'applicazione crescerà insieme alle capacità aziendali e, con l'aggiunta di nuove funzioni, aumenterà anche il traffico. Questo porta a una riduzione della velocità e dell'efficienza, fino al momento in cui diventa necessario potenziare l'applicazione; prima che arrivassero i microservizi, i metodi principali per suddividere le attività erano contemporaneità e partizione.
Questi approcci sono però difficili da sostenere quando si ha un'unica grande applicazione che deve essere implementata su ogni server, che a sua volta deve elaborare qualsiasi tipo di task. Quando le applicazioni diventavano complicate, spesso il rimedio era la crescita verticale, ottenuta espandendo l'hardware e aggiungendo altri server (mettendo una copia delle applicazioni sui nuovi server) oppure sviluppando verticalmente l'applicazione. Questo approccio aumenta le efficienze ma rende l'applicazione più complessa.
Best practice per un ecosistema di microservizi
Un microservizio richiede una grande infrastruttura e deve essere costruito da zero. I microservizi non sono isolati: sono concepiti per funzionare e interagire in un unico ambiente, l'ecosistema dei microservizi.
I microservizi devono essere realizzati nell'ottica della sostenibilità, sapendo come stabilizzare l'ambiente, modulare la soluzione e assicurare affidabilità e tolleranza ai guasti. Un ecosistema di microservizi ideale può essere articolato su quattro livelli:
- Hardware: questo livello comprende i server host fisici, i database e i sistemi operativi. La soluzione ideale è standardizzarsi su un unico sistema operativo. Che si tratti di Linux, Solaris o Windows, deve essere configurato con strumenti di gestione della configurazione come Ansible, Chef o Puppet, e deve essere utilizzato per installare tutte le applicazioni e impostare tutte le configurazioni necessarie. In caso contrario si avranno problemi di scalabilità e, quando si avrà la necessità di espandere il sistema, tutto dovrà essere riconfigurato. Serve anche il monitoraggio a livello di host per risolvere velocemente i problemi.
- Comunicazioni: questo livello dell'infrastruttura di microservizi influisce su tutti gli altri livelli; senza una comunicazione adeguata, nessuna altra parte dell'architettura può funzionare. Per i dati, i microservizi possono usare HTTP più RAF, oppure un canale di comunicazione TIFF. Per la messaggistica, il microservizio invierà messaggi via rete tramite HTTP o il protocollo prescelto. È molto importante anche includere nel livello di comunicazione funzionalità di scoperta, registro e bilanciamento del carico, per facilitare la comunicazione dinamica sull'intera infrastruttura di microservizi .
- Sviluppo: qui è dove vengono sviluppate le applicazioni, pertanto questo livello dovrebbe ospitare tutti gli strumenti di sviluppo self-service per la creazione di nuovi database, tabelle, message broker, schemi e porte. L'integrazione di strumenti di logging e monitoraggio è un passo fondamentale nel livello di sviluppo. Se tutto è stato costruito e testato correttamente, l'implementazione dovrebbe essere automatica.
- Microservizio: l'ultimo livello è il più semplice: è qui che vive e funziona il microservizio, qui si trova il file di configurazione e qui devono essere collocati gli strumenti self-service degli altri livelli quando è necessario fare modifiche.
I microservizi sono un'architettura sempre più apprezzata per lo sviluppo di software e applicazioni. La loro modularità consente di adottare pratiche di consegna continua. Sempre più aziende puntano sui microservizi per le loro architetture di sviluppo e applicazioni cloud. Scopri come costruire microservizi con Talend Open Studio for ESB.