Blog | SparkFabrik

Microservizi e applicazioni Cloud Native VS applicazioni monolitiche

Scritto da SparkFabrik Team | Sep 9, 2020 4:00:00 PM

In piena logica di Digital Transformation, gli attuali ecosistemi IT tendono verso il paradigma ibrido e multicloud, dove le applicazioni basate su un’architettura a microservizi possono restituire maggiori vantaggi rispetto al classico software monolitico, ad esempio in termini di resilienza e accelerazione del time-to-market. In questo articolo verranno analizzati i benefici derivanti dall’adozione dei nuovi modelli di sviluppo, evidenziando quando conviene effettuare il passaggio.


I limiti delle applicazioni monolitiche

L'architettura monolitica è considerata un modo tradizionale di costruire applicazioni. Un'applicazione monolitica è costruita come un'unità singola e indivisibile. Di solito, tale soluzione comprende un'interfaccia utente lato client, un'applicazione lato server e un database.

 

 

In passato l’approccio monolitico nello sviluppo software era lo standard. Oggi, tuttavia, la sua adozione è in calo perché la creazione di un'applicazione monolitica pone una serie di sfide. Tra le altre, ricordiamo la gestione di un'enorme codebase, la difficoltà nell’adottare velocemente nuove tecnologie, lo scaling, la delivery e l'implementazione di nuove modifiche.

Con l’approccio monolitico, modificare o aggiungere una funzionalità significa infatti intervenire sul comportamento dell’intera applicazione, con il rischio di comprometterne in toto il funzionamento in caso di problemi. Qualsiasi modifica del codice influisce sull'intero sistema, quindi deve essere accuratamente coordinato. Ciò rende il processo di sviluppo complessivamente più lungo.

Questo modello penalizza anche la velocità dei rilasci: apportare una modifica vuol dire fare re-deploy dell'intera applicazione. In termini di scalabilità, poi, non è possibile dimensionare le risorse per le singole funzionalità; per questo è necessario dimensionare l'intera infrastruttura su cui risiede l'applicazione, con evidenti sprechi di costi e risorse.

Sviluppo Cloud Native a microservizi

L’architettura a microservizi permette di superare le limitazioni tipiche dello sviluppo monolitico grazie a un approccio modulare. Ogni applicazione viene costruita aggregando unità funzionali indipendenti, che comunicano attraverso API e possono essere modificate singolarmente, senza interferire con il funzionamento complessivo del software.

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.

Martin Fowler

 

Il modello di sviluppo a microservizi può massimizzare il rendimento se inserito nel contesto della progettazione Cloud Native, con il ricorso alle tecniche di containerizzazione.

I container sono istanze virtuali di un ambiente di runtime completo che ospitano il programma o il microservizio e ne permettono l’esecuzione indipendentemente dall’infrastruttura sottostante. Si ottiene così il disaccoppiamento tra le componenti hardware e software, garantendo la piena portabilità delle applicazioni in sistemi differenti (on-premise e in cloud).

La containerizzazione consente un'efficace separazione dei compiti, in quanto gli sviluppatori si concentrano sulla business logic e sulle dipendenze dell'applicazione, mentre i team di Operations possono concentrarsi sul deployment e sulla gestione. Questi ultimi non devono così preoccuparsi di dettagli relativi alle applicazioni, quali le versioni software e le configurazioni specifiche dell'applicazione.

I container possono essere gestiti dinamicamente attraverso piattaforme di orchestrazione come Kubernetes, che permettono di automatizzare i processi e ottimizzare l’uso delle risorse.

LEGGI ANCHE: Cos’è il serverless computing e quali sono i suoi vantaggi?

Microservizi, ecco i principali vantaggi

I vantaggi derivanti dall’architettura a microservizi sono molteplici e ormai noti. Secondo una recente indagine di Kong, l’84% delle aziende americane utilizza già i microservizi per lo sviluppo applicativo e l’89% dei responsabili IT intervistati ritiene che il passaggio al nuovo modello architetturale sia una garanzia competitiva per il futuro.

Tra i pionieri dei microservizi, figurano multinazionali leader come Netflix, Amazon e Uber, ma anche le aziende più piccole possono ottenere importanti benefici da questo modello architetturale.

Il primo vantaggio da menzionare è la possibilità di scalare e distribuire su ambienti diversi la singola funzionalità, indipendentemente dall’applicazione e dagli altri servizi.

L'effetto immediato è anche la riduzione della complessità architetturale, decomponendo l'applicazione in una serie di servizi indipendenti che sono molto più veloci da sviluppare, da comprendere e da mantenere.

Il ricorso ai microservizi permette inoltre di velocizzare il processo di development e il time-to-market applicativo, perché i team di sviluppo possono intervenire contemporaneamente e rilasciare in modo indipendente. Per massimizzare e accelerare i ritorni, i team di sviluppo sono generalmente team piccoli, molto performanti e specializzati su singole parti dell'applicazione: competenza e commitment sono infatti le chiavi per ottenere risultati ancora più rapidamente.

La resilienza è un altro beneficio importante dei microservices: se un componente dell’applicazione risulta difettoso o corrotto, il disservizio non andrà a intaccare il funzionamento dell’intera applicazione o degli altri servizi. Viene così preservata la continuità operativa, mentre si andrà a correggere l’errore sulla funzionalità compromessa. L’indipendenza dei microservizi permette quindi di accelerare le operazioni di debugging e manutenzione, riducendo la rischiosità degli interventi e semplificando l’operatività.

Infine, la progettazione a microservizi favorisce l’adozione delle pratiche DevOps, che prevedono la stretta collaborazione tra Developers e Operations nel processo di sviluppo, e in particolare il raggiungimento degli obiettivi di Continuous Integration e Continuous Delivery. In questo scenario il nuovo codice viene prima testato e successivamente distribuito secondo criteri di continuità e automazione, garantendo un'alta frequenza dei rilasci.

LEGGI ANCHE: Cosa sono i microservizi? I vantaggi del loro utilizzo

Quando conviene adottare i microservizi

Le opportunità offerte dall’architettura a microservizi sono decisamente rilevanti, ma non sempre l'approccio monolitico è da scartare. Capiamo perché.

Se l’obiettivo è rilasciare una nuova applicazione o un MVP (Minimum Viable Product) nel più breve tempo possibile, con lo scopo di raccogliere feedback dal mercato e validare la tua idea di business, l’approccio monolitico è sicuramente più veloce e più economico. Nel caso di piccole startup con un team di sviluppo ridotto, è possibile raggiungere il risultato in poco tempo e in modo efficiente.

Anche nei casi di applicazioni molto semplici, che non hanno una business logic avanzata e che non hanno bisogno di caratteristiche di scalabilità o flessibilità avanzate, l'approccio monolitico si può rivelare tutt’oggi una buona scelta.

L'esperienza nella progettazione a microservizi e nei temi ad esso correlati, come DevOps o strumenti come Kubernetes, è un criterio di scelta determinante quando bisogna decidere l’approccio da adottare per lo sviluppo applicativo. L’uso dei microservizi richiede conoscenze approfondite, know-how ed esperienza per garantire i vantaggi auspicati.

In caso mancassero esperienza e/o figure competenti in azienda, sarebbe quindi opportuno valutare il ricorso a un partner specializzato che abbia già progettato architetture a microservizi, in modo da assicurarsi di adottare le best practice di questo approccio.

Sarà così possibile creare software capace di evolversi con rapidità, di essere flessibile e permettere di rispondere più velocemente e con agilità ai cambiamenti di mercato. Oggi il software è al centro di ogni impresa ed è il fattore critico di successo delle aziende moderne.