Differenza e vantaggi tra Architettura monolitica e Architettura di microservizi in informatica

Differenza e vantaggi tra Architettura monolitica e Architettura di microservizi in informatica

Perchè i microservizi?

Nel nuovo mondo informatico, il mobile e il cloud sono le leve che stanno spingendo verso una trasformazione dalle attuali applicazioni aziendali legacy rispetto alle applicazioni per componenti, ossia i microservizi. Lo scenario dei sistemi informativi in azienda negli ultimi anni è stato travolto da una serie di cambiamenti che hanno impattato sia utenti che fornitori di soluzioni e servizi. Aspetti come la migrazione verso servizi cloud e la sempre più alta diffusione di smartphone e dispositivi IoT hanno costretto a ridefinire rispettivamente i processi e le modalità operative, variando anche le dinamiche di offerta. La sfida adesso è quindi progettare architetture estremamente flessibili e implementabili anche su realtà piccole e medie, che trovano un limite invalicabile nelle attuali tecnologie e nei costi necessari a sostenerle.

Cosa sono, a cosa servono e vantaggi dei microservizi in informatica

Cosa sono i microservizi

I microservizi rappresentano un’architettura ma soprattutto un approccio alla scrittura di software. Tramite i microservizi, le applicazioni vengono scomposte nei loro elementi più piccoli, indipendenti l’uno dall’altro. Rispetto allo stile monolitico tradizionale, per cui ogni componente viene generato all’interno di un unico elemento, i microservizi interagiscono per portare a termine le stesse attività
Ciascun componente, o processo, rappresenta un microservizio. Questo tipo di approccio allo sviluppo del software, essendo molto leggero, promuove la granularità e consente di condividere processi simili tra più applicazioni. L’orientamento ai microservizi è uno dei principali fattori che, ottimizzando lo sviluppo applicativo, si avvicina ad un modello cloud-native.

Differenza e vantaggi tra Architettura monolitica e Architettura di microservizi in informatica

Architettura monolitica vs Architettura di microservizi

Nelle architetture monolitiche tutti i processi sono strettamente collegati tra loro e vengono eseguiti sequenzialmente come un unico servizio. Ciò significa che, qualora si volesse limitare un processo dell’applicazione che esegue un numero elevato di richieste, sarebbe necessario ridimensionarla interamente. Aggiungere, eliminare o migliorare una singola funzione dell’applicazione monolitica risulta più complesso in quanto richiede un riadattamento di tutto il progetto. Tale complessità limita la sperimentazione, rendendo più difficile l’implementazione di nuove idee. Questo tipo di sviluppo rappresenta un ulteriore rischio per la disponibilità dell’applicazione, in quanto la presenza di numerosi processi dipendenti e strettamente connessi tra loro aumenta l’impatto di un errore in un singolo processo. Grazie ad un’architettura incentrata su microservizi, un’applicazione è formata da componenti indipendenti che eseguono ogni processo applicativo come un servizio. I servizi sono realizzati in modo da svolgere una sola funzione, questi ultimi non devono condividere alcun codice o risorse con gli altri. Qualsiasi comunicazione tra i componenti individuali avviene attraverso API leggere ben definite. Poiché eseguiti in modo indipendente, ciascun servizio può essere monitorato, aggiornato, distribuito e ridimensionato per rispondere alla richiesta di funzioni specifiche di un’applicazione.

Vantaggi dei microservizi

La divisione in componenti isolati sicuramente rende un ambiente predisposto al build e alla gestione di applicazioni altamente scalabili. I servizi sviluppati e distribuiti in modo indipendente portano a funzionalità più agili rispondendo facilmente ai cambiamenti ambientali odierni. In linea generale i microservizi offrono:

  1. Eliminazione di “single point of failure”: un’applicazione scomposta in microservizi riduce notevolmente il rischio che un errore di codice o configurazione si riversi sull’intero sistema. Eventuali servizi instabili possono essere gestiti singolarmente, corretti e distribuiti nuovamente senza necessariamente interrompere il flusso dell’intera applicazione.
  2. Amministrazione più elastica: lo sviluppo dei processi (build, test, deploy, update) può essere gestito in modo agile e semplice avendo microservizi. Gli ambienti di sviluppo, test e produzione rimangono quindi più coerenti e allineati tra loro.
  3. Scalabilità efficace: la scalabilità è definita a livello di servizio. In base alle esigenze del sistema, ogni componente può essere replicato e distribuito sull’hardware che è più adatto in termini di risorse.
  4. Riusabilità: Durante un aggiornamento o una migrazione di un’applicazione alcuni microservizi che non devono essere modificati possono rimanere intatti per essere utilizzati dalla nuova versione e da applicazioni diverse.
  5. Versionamento: le API possono seguire un flusso diverso rispetto a quello dei servizi. Major e minor release vengono proposte a livello di applicazione, mentre i servizi richiedono aggiornamenti solo su richiesta.
  6. Libertà del linguaggio di sviluppo: il pattern dei microservizi elimina ogni vincolo preso a lungo termine sulla scelta del linguaggio. Quando si implementa un nuovo servizio, gli sviluppatori sono liberi di scegliere il linguaggio di programmazione e framework corrispondente più idonei al nuovo servizio. Inoltre, poiché i servizi sono di ridotte dimensioni, intervenire usando linguaggi e tecnologie migliori risulta molto agevole.

Infine, bisogna ricordare, però, che l’aspetto fondamentale di un’applicazione a microservizi deve risultare, all’utente finale, una singola applicazione. Tra i diversi servizi è necessaria una forte coesione, quindi un mantenimento ed una distribuzione paralleli preservando la user experience finale.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *