Architettura di microservizi
Un'architettura di microservizi fornisce un sistema moderno distribuito e altamente scalabile
Modernizzare le applicazioni nel mondo di oggi spesso significa eseguire la migrazione ad applicazioni native del cloud compilate sotto forma di microservizi. Le applicazioni vengono quindi distribuite tramite tecnologie dei container come Docker e Kubernetes. Netflix e Atlassian hanno adottato questo approccio, così come altre innumerevoli organizzazioni. La ragione risiede nel fatto che un'architettura di microservizi migliora la scalabilità, le velocità di sviluppo e l'iterazione dei servizi.
L'architettura di microservizi suddivide un'applicazione in una serie di servizi distribuibili in modo indipendente che comunicano tramite API. In questo modo, ogni singolo servizio può essere distribuito e ridimensionato in maniera indipendente. Questo approccio consente di distribuire in modo rapido e frequente le applicazioni grandi e complesse. A differenza delle applicazioni monolitiche, l'architettura di microservizi consente ai team di implementare nuove funzioni e apportare modifiche più rapidamente, senza dover riscrivere gran parte del codice esistente.
Prova Compass gratis
Migliora la tua esperienza di sviluppatore, cataloga tutti i servizi e aumenta l'integrità del software.
Alcune caratteristiche chiave dell'architettura di microservizi sono:
Servizi con componenti multipli
I microservizi sono costituiti da servizi con componenti debolmente accoppiati che possono essere sviluppati, distribuiti, utilizzati, modificati e ridistribuiti senza compromettere il funzionamento degli altri servizi o l'integrità dell'applicazione. Ciò consente di distribuire in modo rapido e semplice le singole funzioni di un'applicazione.
Elevate capacità di manutenzione e test
I microservizi consentono ai team di sperimentare nuove funzioni ed eseguire il rollback se qualcosa va storto. Ciò semplifica l'aggiornamento del codice e accelera il time-to-market delle nuove funzioni. Inoltre, semplifica il processo di isolamento e correzione degli errori e dei bug nei singoli servizi.
Di proprietà di piccoli team
In genere, i team piccoli e indipendenti creano un servizio all'interno dei microservizi, per questo motivo sono incoraggiati ad adottare le pratiche Agile e DevOps. I team hanno la possibilità di lavorare in modo indipendente e più rapidamente, riducendo i tempi del ciclo di sviluppo.
Organizzazione in base alle funzionalità aziendali
Con i microservizi, è possibile organizzare i servizi in base alle funzionalità aziendali. I team sono interfunzionali e dispongono di tutte le competenze necessarie per sviluppare e soddisfare le singole funzionalità.
Infrastruttura automatizzata
I team che si occupano della creazione e della gestione dei microservizi in genere utilizzano pratiche di automazione dell'infrastruttura come continuous integration (CI), continuous delivery (CD) e continuous deployment (anch'essa CD). Grazie a queste pratiche, i team possono creare e distribuire ciascun servizio in modo indipendente senza influire sugli altri team. Possono inoltre distribuire la nuova versione di un servizio fianco a fianco a quella precedente.
Esempi di un'architettura di microservizi
Prendiamo come esempio un progetto per un software di e-commerce. Di seguito è riportato il diagramma di un sito di e-commerce con un'applicazione web e mobile che interagisce con più microservizi, ciascuno dei quali fornisce specifiche funzionalità per un dominio.
Le applicazioni web moderne eseguite sui browser sono spesso servite da una rete di distribuzione di contenuti (CDN). Una CDN distribuisce le applicazioni web sui server di tutto il mondo, per poter essere scaricate rapidamente dai browser web. Le CDN vengono inoltre utilizzate per fornire asset multimediali come immagini, audio e video. Ad esempio, in questo sistema, le immagini e i video degli articoli in vendita sono forniti dalla CDN.
I microservizi in questo grafico sono:
Servizio account
Il servizio account fornisce informazioni sull'account dei clienti, come l'indirizzo e le informazioni di pagamento.
Servizio di inventario
Fornisce informazioni aggiornate sull'inventario degli articoli disponibili per l'acquisto.
Servizio carrello
I clienti usano questo servizio per selezionare gli articoli dell'inventario che desiderano acquistare.
Servizio pagamenti
I clienti pagano gli articoli che hanno messo nel carrello.
Servizio spedizioni
Programma il confezionamento e la consegna degli articoli acquistati.
Le applicazioni interagiscono con i microservizi tramite API REST pubblicate da ciascuno dei microservizi. Un gateway API consente alle applicazioni di fare affidamento sulle API fornite dai microservizi e rende possibile scambiare i microservizi con altri microservizi con la stessa API.
Ogni microservizio è composto da un servizio e un database. I servizi gestiscono l'API REST, implementano la logica aziendale e archiviano i dati in un database. Nel caso dei microservizi, isoliamo le loro risorse, come i database e le code, in base al contratto 12 Factor App.
Come creare microservizi
Molte organizzazioni iniziano con un'architettura monolitica per poi passare a suddividere la base di codice in più servizi, implementare gli schemi giusti per limitare le conseguenze degli errori e ripristinare i problemi di rete, gestire i dati con coerenza, monitorare il carico del servizio e così via. Ma questo è solo l'aspetto tecnico del processo. Servirà anche riorganizzare i team e molto probabilmente adottare una cultura DevOps.
Adesso arriva la parte difficile, ovvero scomporre il monolite in microservizi. Il refactoring di uno schema di database monolitico può essere un'operazione delicata. È importante identificare chiaramente i set di dati di cui necessita ciascun servizio e le eventuali sovrapposizioni. La continuous delivery aiuta a ridurre i rischi di errori di rilascio e garantisce che il team si concentri sulla compilazione e l'esecuzione dell'applicazione, senza rimanere bloccato nella fase di distribuzione.
Microservizi e architettura monolitica a confronto
L'architettura monolitica è un modello tradizionale di un programma software, compilata come un'unità unificata autonoma e indipendente dalle altre applicazioni. Un'architettura di microservizi è il contrario dell'architettura monolitica, dal momento che è un metodo architettonico che si basa su una serie di servizi distribuibili in modo indipendente. I monoliti facilitano la gestione del codice, il sovraccarico cognitivo e la distribuzione e possono dunque risultare vantaggiosi nelle prime fasi di un progetto. Quando un'applicazione monolitica diventa grande e complessa, la sua scalabilità è problematica, la continuous deployment diventa impegnativa e gli aggiornamenti possono essere complicati.
Mentre un'applicazione monolitica è compilata come una singola unità indivisibile, i microservizi suddividono tale unità in una raccolta di unità indipendenti che contribuiscono all'insieme più ampio. Un'applicazione è compilata come una serie di servizi distribuibili in modo indipendente, decentralizzati e sviluppati in modo autonomo.
Architettura distribuita
I microservizi rientrano nella categoria dei sistemi distribuiti. Per definizione, un sistema distribuito è una raccolta di programmi informatici che utilizzano risorse di elaborazione su più nodi di calcolo separati per raggiungere un obiettivo comune e condiviso. I sistemi distribuiti contribuiscono a migliorare l'affidabilità e le prestazioni dei sistemi e ad agevolare la scalabilità.
I nodi di un sistema distribuito forniscono ridondanza, poiché se un nodo presenta errori, ci sono altri nodi pronti a sostituirlo. Ogni nodo dispone di scalabilità orizzontale e verticale, il che si traduce in un miglioramento delle prestazioni. Se sul sistema è presente un carico elevato, è possibile ripartirlo aggiungendo altri nodi.
Kubernetes e Docker a confronto
Docker è una piattaforma di containerizzazione commerciale e runtime che aiuta gli sviluppatori a compilare, distribuire ed eseguire container. Mentre Docker fornisce un modo efficiente per creare pacchetti di applicazioni e distribuire applicazioni containerizzate, l'esecuzione e la gestione di container su larga scala sono problematiche se si utilizza solo Docker.
Kubernetes è una diffusa piattaforma open source che esegue l'orchestrazione dei sistemi di runtime dei container attraverso un cluster di risorse in rete. Può essere utilizzata con o senza Docker. Mentre Docker è un runtime di container, Kubernetes è una piattaforma per l'esecuzione e la gestione di container di numerosi runtime di container.
Gestione della configurazione
La gestione della configurazione software è un processo che gestisce, organizza, tiene traccia e monitora le modifiche apportate ai metadati di configurazione di un sistema software. È comunemente usata insieme al controllo delle versioni e all'infrastruttura CI/CD.
La gestione della configurazione consente ai team di ingegneri di realizzare sistemi robusti e stabili attraverso l'uso di strumenti che gestiscono e monitorano automaticamente gli aggiornamenti ai dati della configurazione. Aiuta a gestire meglio l'espansione del software in un'architettura di microservizi creando una fonte attendibile, con una posizione centrale per la configurazione.
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sullo sviluppo software e sugli aggiornamenti continui di Compass