Cosa sono i microservizi?
I microservizi rappresentano una moderna interpretazione delle architetture orientate ai servizi in cui un'applicazione è suddivisa in molti piccoli servizi, consentendo ai team di innovare più velocemente e scalare il prodotto su grandi dimensioni.
Molte aziende hanno costruito i loro servizi originali utilizzando un'architettura applicativa monolitica, in cui tutti i componenti risiedono all'interno di un'unica infrastruttura. Quando gli sviluppatori utilizzano un'architettura a microservizi, analizzano tutti i componenti del sistema e li distribuiscono come singoli servizi. I servizi comunicano tra loro tramite chiamate API.
Il risultato è un'architettura di tipo plug-in che consente aggiornamenti rapidi ed economici. Scalare solo un'area del sistema è infatti più facile e meno costoso che scalare l'intero sistema. Gli sviluppatori usano strumenti di orchestrazione dei container e Kubernetes per allocare in modo appropriato la potenza di elaborazione e qualsiasi altra risorsa di cui hanno bisogno. Questi servizi vengono eseguiti in un container su un server cloud.
Per comprendere l'architettura dei microservizi si può confrontarla con un'architettura applicativa monolitica legacy. Con un'architettura monolitica, tutti i singoli componenti fanno parte di una singola unità. Tutto viene sviluppato, sottoposto a deployment e scalato insieme. I team devono scrivere l'intera applicazione in un unico linguaggio con un singolo runtime.
Pertanto, i vari team che lavorano ai diversi componenti dell'app devono coordinarsi in modo da non compromettere il lavoro reciproco. Ad esempio, una parte dell'app può dipendere da un modulo che richiede una versione specifica, ad esempio la 1.8, mentre un altro team ha bisogno dello stesso modulo con la versione 1.7 perché la 1.8 è incompatibile con un'altra dipendenza. In un'app monolitica, bisogna scegliere l'una o l'altra versione. Inoltre, le app monolitiche eseguono il deployment di tutto come applicazione singola, e i test e il deployment del codice devono essere eseguiti insieme.
Con i microservizi, si suddivide e si esegue il deployment di ogni componente individualmente come servizi che comunicano tra loro tramite chiamate API.
I microservizi massimizzano l'affidabilità delle applicazioni e la velocità di deployment. Questo è particolarmente importante in un mercato che si muove ed evolve più velocemente che mai. L'architettura containerizzata dei microservizi sposta le app ovunque, senza alterare o interrompere l'ambiente, aumentando la velocità e riducendo i tempi di inattività.
Diamo un'occhiata ai componenti principali di un'architettura a microservizi:
- Client: le app client di solito devono utilizzare le funzionalità di più microservizi e richiedono aggiornamenti frequenti.
- Database: un'API di servizio aggiorna i database dei microservizi trasportando tutti i servizi remoti che supportano le comunicazioni tra i processi per diversi stack.
- Gateway API: è un modello di progettazione di microservizi che prevede un singolo punto di ingresso vitale dell'app per le richieste di routing e la traduzione del protocollo.
- Provider di identità: un microservizio di identità deve consentire l'accesso da server a server e guidato dall'utente ai dati di identità.
- Formati di messaggistica: i microservizi comunicano con modelli di architettura a microservizi sincroni o asincroni.
- Contenuto statico: i client ricevono contenuti statici tramite servizi di archiviazione basati su cloud e reti di distribuzione dei contenuti.
- Gestione: questo componente consente agli utenti aziendali di configurare i servizi durante il runtime.
- Individuazione del servizio: per richiedere il servizio è necessario un meccanismo che lo individui.
L'articolo di Martin Fowler sui microservizi definisce nove componenti condivisi da gran parte delle architetture di microservizi.
1. Componentizzazione tramite servizi
Per natura, le architetture di microservizi sono suddivise in servizi di componenti. Pertanto, ogni servizio può essere designato, sottoposto a deployment, perfezionato e ridistribuito in modo indipendente senza influire sull'ambiente. Ciò significa che di solito è possibile modificare un servizio invece di eseguire un nuovo deployment di un'intera app.
2. Organizzazione in base alle capacità aziendali
Con l'approccio monolitico, i team tecnici si sono concentrati separatamente su funzionalità relative alla tecnologia come l'interfaccia utente, i database e la logica lato server. Invece, i microservizi organizzano team interfunzionali in base alle capacità e alle priorità aziendali. I team possono quindi progettare prodotti basati su singoli servizi che comunicano utilizzando un message bus.
3. Prodotti, non progetti
In passato, gli sviluppatori di app utilizzavano il modello a progetto che assegnava ai team lo sviluppo del software il quale, al termine, veniva inviato a un'azienda specializzata nella manutenzione. L'architettura a microservizi permette a un singolo team di gestire il prodotto in tutta la sua durata. In tal modo, gli sviluppatori possono interagire con i loro prodotti in modi nuovi, vedere come funzionano in produzione e aumentare il contatto con gli utenti. Inoltre, i tecnici e le aziende possono migliorare la collaborazione e comprendere meglio il lavoro reciproco.
4. Endpoint intelligenti e dump pipe
I microservizi hanno molto in comune con il sistema UNIX tradizionale. Ricevono una richiesta, la elaborano e generano una risposta adatta. Fowler definisce questo approccio "endpoint intelligenti e dump pipe". L'infrastruttura è di solito "stupida" (dumb), perché funge esclusivamente da router per i messaggi, e tutte le intelligenze risiedono negli endpoint che producono e consumano endpoint.
5. Governance decentralizzata
La governance decentralizzata è la struttura predefinita di un'architettura a microservizi, perché le piattaforme a tecnologia singola causano un eccesso di standardizzazione. Uno dei principali vantaggi dei microservizi rispetto ai monoliti è l'utilizzo di diversi linguaggi di programmazione e tecnologie in base alla soluzione più adatta. Ad esempio, i microservizi Spring Boot possono creare un'app per un componente, mentre Spring Cloud ne comprende un'altra.
6. Gestione decentralizzata dei dati
La maggior parte dei microservizi consente a ciascun componente di gestire il proprio database tramite la gestione decentralizzata dei dati. È sempre possibile usare l'archivio dati migliore per un progetto specifico rimuovendo l'aggiornamento del database condiviso, un'attività molto dispendiosa in termini di tempo.
7. Automazione dell'infrastruttura
Gli esperti di CI/CD usano l'automazione dell'infrastruttura nei microservizi. Questa soluzione riduce i carichi di lavoro degli sviluppatori e migliora significativamente il tempo di deployment.
8. Approccio "design for failure"
Come le migliori aziende, i microservizi puntano alla resilienza. Poiché la comunicazione deve avvenire tra servizi unici e diversificati, è probabile che avvengano errori. Questo è il principale svantaggio dei microservizi rispetto ai monoliti, poiché richiedono ulteriore complessità.
Sono quindi necessarie sofisticate configurazioni di monitoraggio e log per evitare che gli errori abbiano un impatto negativo sui consumatori. Sebbene ciò comporti più lavoro tecnico, ne risulta un'alta resistenza agli errori.
9. Design evolutivo
In un settore tecnologico che cambia così rapidamente, il design evolutivo non è più un lusso, ma una necessità. Ogni anno arrivano sul mercato nuovi dispositivi elettronici e le tue app devono essere pronte ad accoglierli. Il design scomposto dei microservizi ti consente di rinnovare le tue app senza un nuovo deployment.
Fowler ha approfondito ciascuno di tali componenti nel corso di questa presentazione organizzata da GOTO.
I progetti basati sui microservizi sono agili e flessibili, e riducono al minimo i tempi di inattività dovuti a manutenzione, riparazioni e aggiornamenti.
Ecco alcuni casi d'uso principali dei microservizi:
1. Elaborazione dei dati
Le app eseguite su un'architettura a microservizi possono gestire più richieste simultanee in meno tempo, rendendole più efficienti.
2. Migrazione dei siti web
I microservizi evitano i tempi di inattività dell'interfaccia utente, della struttura e/o del sito di dominio.
3. Supporti su larga scala
Le piattaforme possono gestire un numero elevatissimo di richieste per diversi sottodomini, senza errori né ritardi.
4. Fatture e transazioni
I microservizi possono rafforzare le transazioni riducendo gli errori delle app, consentendo alle aziende di scalare senza nuovi deployment.
5. Sistemi obsoleti
Lo sviluppo di un nuovo sistema containerizzato è più efficiente ed efficace dell'aggiornamento di monoliti vecchi e ingombranti.
Adottare un'architettura a microservizi o scomporre un monolite legacy in microservizi può aumentare la velocità, la flessibilità e la scalabilità, spesso a scapito della semplicità. È facile creare i monoliti, eseguirne il deployment e il debug, ma scalarli è difficile. Un'architettura a microservizi è più complessa, ma presenta diversi vantaggi per i professionisti del settore:
Deployment indipendente
Ogni microservizio deve essere un full-stack per funzionare correttamente. I team DevOps possono correggere gli errori facilmente su un singolo microservizio senza influire sull'ambiente complessivo.
Scalabilità
In un monolite, tutti gli elementi dell'applicazione devono essere ridimensionati insieme, il che implica che alcune parti possono essere scalate senza una reale necessità. Con componenti indipendenti, invece, ogni microservizio può essere scalato individualmente in base al proprio carico. I team che creano app con un'architettura a microservizi possono modificare ogni servizio senza influire sul resto dell'app. Inoltre, i programmatori possono lavorare in parallelo per individuare gli hot services, aggiornare le funzionalità e scalare i servizi selezionati.
Libertà nello stack tecnologico
Uno stack tecnologico unico per l'intera applicazione è uno dei maggiori limiti di un'architettura monolitica. Con i microservizi, gli sviluppatori possono creare un'app utilizzando il linguaggio di programmazione, il framework, i database e gli strumenti di front-end e back-end più adatti. In questo modo, non devono scendere a compromessi con uno stack standardizzato troppo generico.
Isolamento degli errori
Un singolo errore spesso mette a repentaglio l'intera app monolitica. I microservizi, invece, isolano i guasti ai loro componenti per evitare ripercussioni sull'intera applicazione. Anche se un microservizio non riesce, il resto dell'applicazione può rimanere online. È una buona idea visualizzare lo stato di ciascun microservizio su una dashboard, in modo che gli addetti alla manutenzione possano rilevare i problemi e risolverli rapidamente. Per farlo può bastare spostare un cursore per portare online un server aggiuntivo con la virtualizzazione on-demand.
Produttività
I microservizi riducono i silo e promuovono il lavoro di squadra tra le varie funzioni: la soluzione ideale per la forza lavoro distribuita e remota del giorno d'oggi. I microservizi possono essere testati in modo indipendente mentre gli sviluppatori gestiscono altri aspetti, semplificando il controllo qualità. Infine, le architetture di microservizi consentono di creare servizi scalabili, resilienti e con un deployment semplice.
Grazie alla distribuzione continua, le aziende possono testare le funzionalità rendendo disponibili diverse versioni dei servizi a vari sottoinsiemi di utenti. Anche molte aziende con software monolitici pre-esistenti stanno prendendo in considerazione la possibilità di modernizzare il proprio stack con i microservizi.
I vantaggi dei microservizi sono la resilienza e la scalabilità, ma può essere difficile far sì che piccoli servizi indipendenti lavorino insieme.
Diamo una rapida occhiata agli aspetti più importanti.
- Complessità: all'aumentare del numero di microservizi, questi possono diventare più difficili da gestire e orchestrare. L'automazione dell'infrastruttura e la CI/CD sono fondamentali.
- Coerenza dei dati: i microservizi lavorano insieme all'interno di un sistema esteso mantenendo i propri dati. Ciò significa che ci saranno dati comuni su più servizi. Le modifiche devono essere replicate in tutti i servizi destinati ai consumatori ogni volta che vengono applicate a tali dati comuni.
- Rischio di errori di comunicazione: a differenza delle chiamate alle funzioni in-process, le chiamate ad altri servizi possono non riuscire sulla rete. Si tratta di un compromesso necessario che permette di usufruire della stessa resilienza e della scalabilità di un'architettura a microservizi. Per aumentare la resilienza, è possibile utilizzare un modello a scomparti e un modello a interruttore.
Oggi le architetture a microservizi sono le più usate a livello commerciale: molte aziende, infatti, usano già i microservizi o prevedono di farlo presto. Questa soluzione consente di risparmiare denaro, di ridurre i problemi tecnici e di ridurre al minimo i tempi di inattività.
Per le aziende di tutte le dimensioni, non c'è mai stato un momento migliore per la transizione da una struttura monolitica ai microservizi, che permettono di risparmiare denaro a lungo termine, aumentare l'efficienza e soddisfare le esigenze dei clienti. I microservizi sono l'architettura del futuro: è ora di scoprire come possono aiutarti.
I microservizi hanno una serie di vantaggi commerciali rispetto ai monoliti. Innanzitutto, promuovono una relazione simbiotica tra sviluppatori e i dirigenti aziendali, generando risultati migliori. I microservizi promuovono:
- La velocità di innovazione: il loro design evolutivo semplifica la modifica e l'aggiornamento dei componenti dell'applicazione.
- Una maggiore stabilità/resilienza: i microservizi eliminano quasi del tutto i tempi di inattività perché, a differenza delle architetture monolitiche, i servizi sono separati e gli sviluppatori possono aggiornare un componente alla volta.
- La scalabilità: gli sviluppatori possono lavorare ai singoli componenti senza influire sull'intero ambiente, rimanendo al passo con le esigenze aziendali.
- Minori costi e maggiori entrate: i microservizi richiedono una minore infrastruttura complessiva, riducono al minimo i tempi di inattività e migliorano la stabilità, garantendo una migliore esperienza per il cliente. Inoltre, riducono i tempi di deployment del prototipo.
Poiché sempre più aziende e individui si affidano alle applicazioni SaaS, e considerato che lo sviluppo delle applicazioni si fa più complesso, è sempre più necessario avere soluzioni disponibili e scalabili. Si osserva una rapida crescita anche dei servizi di supporto come i database scalabili, la distribuzione continua, gli strumenti di osservabilità e lo streaming di dati ed eventi.
Per questo motivo, i professionisti del settore devono aggiornarsi continuamente per superare queste sfide. Nel frattempo, l'architettura a microservizi e l'infrastruttura di rete sono ancora in fase di maturazione. È facile immaginare che in futuro le applicazioni basate sui microservizi diventeranno più facili da aggiornare e sviluppare, e forniranno ancora più valore alle aziende.
Con GitLab, è possibile eseguire il commit del codice e trovare gli strumenti necessari in un'unica applicazione, senza dover più utilizzare 10 strumenti insieme per ogni progetto.
Usare una piattaforma DevOps per gestire i microservizi evita la separazione delle informazioni. Aumentare la visibilità tra i team e semplificare i passaggi di consegne accelera il ciclo di vita DevOps, garantendo al contempo il deployment dei progetti e la loro stabilità.
GitLab semplifica l'orchestrazione dei microservizi con:
- CI/CD integrata: come sottolinea Fowler, l'automazione dell'infrastruttura che utilizza la distribuzione e il deployment continui è necessaria per i microservizi. L'integrazione di CI/CD di GitLab è ideale per chi desidera avvalersi al massimo dei microservizi.
- Registro dei container integrato e ottima integrazione con Kubernetes: l'architettura a microservizi può essere utilizzata con le macchine virtuali (VM) legacy, i container e Kubernetes semplificando notevolmente la creazione di microservizi. GitLab è progettato per funzionare al meglio con Kubernetes.
- Monitoraggio integrato: il monitoraggio è fondamentale per la riuscita delle operazioni. Le funzionalità di monitoraggio di GitLab tramite Prometheus ne fanno la scelta ideale per i microservizi.
- Pipeline multi-progetto: GitLab supporta l'esecuzione di pipeline con dipendenze tra progetti, semplificando la gestione delle interazioni tra i diversi repository.
- Supporto Monorepo e capacità di eseguire una pipeline solo quando il codice in una directory specifica cambia: questa caratteristica riduce le perdite di tempo nell'esecuzione delle pipeline nell'intero repository.
- Cluster Kubernetes a livello di gruppo: è possibile integrare più progetti con un singolo cluster Kubernetes.
GitLab è un'unica piattaforma DevOps che attira i migliori sviluppatori interessati a collaborare e migliorarsi costantemente. Sostenere GitLab offre diversi vantaggi, tra cui:
- Nessun passaggio tra le app: gli sviluppatori non hanno bisogno di cambiare spesso il contesto, e possono rimanere più concentrati sul lavoro. Inoltre, potendo collegare facilmente i ticket al lavoro, aumenta la produttività e si eliminano le difficoltà principali.
- Riduzione del carico di lavoro: GitLab semplifica l'automazione delle attività per permetterti di dedicarti ad attività più impegnative e basate sui risultati. Sappiamo quanto sono noiose le attività manuali e ripetitive: ora puoi automatizzarle per migliorare la soddisfazione dei dipendenti e la produttività sul lavoro.
- Collaborazione e trasparenza sono i principali vantaggi della piattaforma GitLab. La trasparenza tra sviluppatore e cliente facilita la collaborazione e permette di eseguire correzioni in modo rapido e semplice, riducendo la comunicazione.
- Community: tutti gli sviluppatori sono invitati a contribuire al nucleo open-source di GitLab per migliorare l'app. La nostra è una community accogliente, amichevole e molto reattiva, sempre pronta a dare il benvenuto ai nuovi membri e ad aiutarli.
- Apprendimento di innovative pratiche di sviluppo software: in un mondo sempre più frenetico, la programmazione e lo sviluppo di applicazioni sono tra i settori a più rapida crescita. GitLab aggiorna la sua community su tutti gli ultimi sviluppi e la aiuta ad apprendere le best practice del settore.
Inizia la tua trasformazione cloud native
Sviluppa, testa, sottoponi a deployment e monitora il codice da un'applicazione singola.
Scopri come Ask Media Group ha eseguito la migrazione dai server on-premise al cloud AWS con strumenti e integrazioni GitLab. Unisciti a noi e impara dalla loro esperienza.
Risorse correlate
Video
Padroneggia il caos - Una guida Netflix ai microservizi
Video
Il passaggio di Guilt dal monolite ai microservizi
Tutto pronto per iniziare?
Scopri cosa può fare il tuo team grazie alla piattaforma DevSecOps basata sull'IA più completa sul mercato.