Dall’architettura monolitica ai microservizi: i vantaggi dei software con servizi indipendenti
Nell’ultimo decennio, lo sviluppo delle app ha subito un’importanza trasformazione: dal predominio delle applicazioni monolitiche siamo passati progressivamente al primato delle architetture a microservizi.
Quella a microservizi è un’architettura che consente di strutturare un’app come un insieme di servizi distribuiti in modo indipendente capaci di comunicare tra loro tramite API. Un approccio modulare, insomma, che trasforma un’applicazione in un insieme di unità funzionali più piccole e autonome in cui ogni componente ha il minor numero possibile di dipendenze dall’esterno. Considerati i vantaggi, l’affermarsi dell’architettura a microservizi non stupisce affatto. In effetti, dalla possibilità di distribuire i servizi in modo indipendente deriva quella di poter intervenire con maggior frequenza e rapidità in applicazioni grandi e complesse senza dover riscrivere gran parte del codice esistente e, quindi, senza rischiare di compromettere le funzionalità dell’applicazione.
Ma cosa sono i microservizi e, soprattutto, come si differenziano dalla tradizionale architettura monolitica?
Un’architettura a sistemi distribuiti
Con architettura a microservizi si fa riferimento a un approccio di sviluppo e organizzazione del software che prevede di scorporare un’applicazione in piccole parti autosufficienti. Per semplificare, possiamo immaginare l’app in questione come una suite di piccoli servizi costruiti attorno a specifiche funzionalità operative come il servizio catalogo, di gestione degli ordini, carrello, login e così via.
L’architettura a microservizi non è una novità, ma le nuove tecnologie di containerizzazione hanno contribuito significativamente al suo attuale successo. Perché in effetti, l’idea alla base di questo approccio è sostanzialmente il risultato di un nuovo modo di intendere lo sviluppo software celebrando i vantaggi della scomposizione in pacchetti, tipica del cloud e del modello SaaS in particolare.
Tra i microservizi più diffusi rientrano i container, capaci di isolare l’ambiente di sviluppo dal sistema fisico del server che li esegue. Di tipologie di container ne esistono molte: dal generico Linux a Docker passando per Kubernetes, lo strumento di orchestrazione che consente di gestire in modo razionale un numero di container anche particolarmente elevato.
Cosa sono i microservizi
Ma che cosa sono, quindi, i microservizi?
Un microservizio è una funzione di base di un’applicazione che viene eseguita indipendentemente dagli altri servizi. Si caratterizza per essere:
- facile da sostituire;
- sviluppabile singolarmente;
- implementabile singolarmente.
Naturalmente, l’applicazione sviluppata con architettura a microservizi è un ecosistema ampio nel quale operano più microservizi distribuiti come contenitori indipendenti l’uno dall’altro, ma in grado di interagire e comunicare tramite API. Si tratta di protocolli quali http (REST) ma anche AMQP per la comunicazione asincrona.
Poiché ogni servizio è una base di codici distinta, ne deriva che un team di sviluppo può agilmente sviluppare e distribuire un microservizio senza influire su altri sottosistemi.
È proprio da qui che deriva in effetti uno dei grandi vantaggi dell’architettura a microservizi: la possibilità di poter sviluppare e scalare le applicazioni in modo rapido accelerando il time-to-market di nuove funzionalità e permettendo ai team di sviluppo di lavorare anche contemporaneamente alle singole funzionalità.
Dall’architettura monolitica ai microservizi
Architettura monolitica
L’architettura monolitica è tipica di quei software concepiti come una singola unità e sviluppati con un solo linguaggio di programmazione. Nelle applicazioni monolitiche, tutti i processi sono collegati tra loro ed eseguiti come un singolo servizio. Questo rende necessario, in caso di modifiche o migliorie delle funzionalità, ridistribuire l’intera applicazione mediante la pubblicazione di un nuovo eseguibile. Proprio per questo, ogni cambiamento impone un aggiornamento completo e un ciclo di Quality Assurance.
Dover intervenire sull’applicativo aumentando la base di codice è naturalmente un rischio: un eventuale errore impatta infatti non soltanto sul singolo processo ma sull’insieme. Allo stesso tempo, anche il bug fixing si trasforma in una lunga attesa per gli utenti non essendo possibile risolvere rapidamente i problemi ma dovendo necessariamente pianificare l’uscita di una serie di service update per raccogliere le migliorie. Le applicazioni monolitiche, proprio per questo, scoraggiano la sperimentazione e l’implementazione di nuove idee.
I software monolitici sono funzionali in ambienti circoscritti (com’erano appunto i primi mainframe) ma poco pratici quando raggiungono dimensioni importanti. Le complessità attuali e la potenza dei computer costringono infatti alla realizzazione di applicazioni monolitiche estremamente costose da aggiornare e mantenere correttamente.
Da qui è nata quindi la necessità di individuare nuovi processi per migliorare la qualità del software e la sua gestione tra i quali, appunto, l’architettura a microservizi.
Architettura a microservizi
Nell’architettura a microservizi, l’app monolite viene scomposta in vari servizi “specializzati” ovvero distinta nelle sue funzioni base. Poiché ognuna di queste funzioni è indipendente dalle altre, un suo (eventuale) mancato funzionamento non compromette gli altri servizi.
Naturalmente, l’architettura a microservizi sposa l’approccio DevOps e rende più semplice applicare il principio CI/CD con l’iterazione e la distribuzione costanti. Gli sviluppatori possono infatti concentrarsi su una singola parte del software, lavorando alla creazione dei singoli pacchetti che, nel loro insieme, compongono l’applicazione. Ciò è valido non solo per l’implementazione di nuove funzionalità ma anche per l’aggiornamento o la modifica delle sue componenti, senza la necessità di distribuire o procedere con il deployment dell’intera applicazione.
Ogni servizio dell’applicazione, insomma, esegue una specifica funzione aziendale in modo indipendente, comunicando con gli altri servizi attraverso API leggere, e può essere aggiornato, distribuito e ridimensionato per rispondere alla richiesta di funzioni specifiche.
I vantaggi dell’architettura a microservizi
Ricapitolando, questi sono alcuni dei vantaggi dell’adozione dei microservizi:
- Autonomia: ogni servizio può essere sviluppato, distribuito, eseguito e ridimensionato senza influenzare il funzionamento degli altri componenti;
- Specializzazione: i singoli servizi vengono progettati per rispondere ad uno specifico problema mettendo in atto una precisa capacità;
- Resilienza: essendo i microservizi indipendenti l’uno dall’altro, l’eventuale errore di un componente non determina il blocco dell’intera applicazione;
- Agilità e rilasci rapidi: la distribuzione indipendente dei microservizi rende più semplice per i team di sviluppo gestire le correzioni di bug e i rilasci delle funzionalità in tempi rapidi riducendo i tempi del ciclo di sviluppo, soprattutto in combinazione le metodologie di sviluppo agile.
- Codice riutilizzabile: microservizi scritti per una certa funzione possono essere utilizzati come blocco costruttivo per altre funzionalità permettendo agli sviluppatori di sfruttare l’esistente senza dover scrivere del codice da zero;
- Semplicità di distribuzione: supportando l’integrazione e la distribuzione continua, i microservizi rendono più semplice testare nuove idee e poter ripristinare impostazioni precedenti quando necessario;
- Scalabilità e flessibilità: i servizi sono altamente scalabili e permettono di rispondere al meglio alla richiesta delle funzionalità supportate dall’applicazione. In base alle necessità, l’infrastruttura può essere ridimensionata per proteggere la disponibilità dell’app nel caso in cui il servizio sperimenti un aumento della richiesta;
- Libertà tecnologica: i team di sviluppo possono scegliere liberamente il linguaggio e la tecnologia più adatta per la funzione da realizzare non essendo necessario applicare un unico approccio all’intera applicazione;
- Team di piccole dimensioni: ogni microservizio può essere creato, testato e distribuito da team di piccole dimensioni capaci di lavorare in modo flessibile.
Sei alla ricerca di una soluzione software per il tuo business? Contattaci e definiamo insieme ciò che fa per te.