Close

Microservizi e architettura monolitica a confronto

Quando i monoliti diventano troppo grandi, potrebbe essere il momento di passare ai microservizi

Foto di Chandler Harris
Chandler Harris

Marketing Strategist & Writer


Un'applicazione monolitica è compilata come una singola unità unificata, mentre un'architettura di microservizi è una raccolta di servizi più piccoli e distribuibili in modo indipendente. Qual è l'opzione più adatta alle tue esigenze? Dipende da una serie di fattori.

Nel 2009 Netflix ha affrontato dei problemi legati alla crescita. La sua infrastruttura non era in grado di tenere il passo con la domanda dei servizi di streaming video in rapida crescita. L'azienda ha deciso di eseguire la migrazione dell'infrastruttura IT dai data center privati al cloud pubblico e di sostituire l'architettura monolitica con un'architettura di microservizi. L'unico problema era che il termine "microservizi" non esisteva ancora e che questa struttura non era molto conosciuta.

Netflix è diventata una delle prime aziende di alto profilo ad eseguire con successo la migrazione da un'architettura monolitica a una di microservizi basata sul cloud. Ha vinto il premio JAX Special Jury nel 2015 in parte grazie a questa nuova infrastruttura incentrata su DevOps. Oggi, Netflix possiede oltre mille microservizi che gestiscono e supportano parti separate della piattaforma, mentre gli ingegneri si dedicano a distribuzioni di codice frequenti, anche fino a migliaia di volte al giorno.

Netflix è stata una delle aziende pioniere di una pratica che al giorno d'oggi è diventata sempre più diffusa: la transizione da un'architettura monolitica a un'architettura di microservizi.

Logo di Compass.

Prova Compass gratis

Migliora la tua esperienza di sviluppatore, cataloga tutti i servizi e aumenta l'integrità del software.

Che cos'è un'architettura monolitica?


L'architettura monolitica è un modello tradizionale di un programma software, compilata come un'unità unificata autonoma e indipendente dalle altre applicazioni. La parola "monolite" è spesso usata in riferimento a qualcosa di grande e glaciale, il che non si discosta molto dalla realtà dell'architettura monolitica nel campo della progettazione software. Un'architettura monolitica è una rete di elaborazione unica e di grandi dimensioni con una base di codice che raggruppa tutte le preoccupazioni aziendali. Per apportare una modifica a questo tipo di applicazione, occorre aggiornare l'intero stack accedendo alla base di codice e compilando e distribuendo una versione aggiornata dell'interfaccia lato servizio. Questa procedura rende gli aggiornamenti restrittivi e dispendiosi in termini di tempo.

I monoliti facilitano la gestione del codice, il sovraccarico cognitivo e la distribuzione e possono dunque risultare pratici nelle prime fasi di un progetto, poiché queste caratteristiche consentono di rilasciare in una sola volta tutti gli elementi al loro interno.

immagine di un'architettura monolitica
icona di compilazione del codice
materiale correlato

Come creare microservizi

icona di tre anelli
Scopri la soluzione

Migliora l'esperienza di sviluppo con Compass

Vantaggi dell'architettura monolitica


Le organizzazioni possono trarre vantaggio sia da un'architettura monolitica che da un'architettura di microservizi, in base a una serie di fattori diversi. Se si sceglie un'architettura monolitica per le attività di sviluppo, il vantaggio principale è costituito dall'elevata velocità di sviluppo dovuta alla semplicità di avere un'applicazione basata su una base di codice.

I vantaggi dell'architettura monolitica includono:

Facile distribuzione: un file o una directory degli eseguibili rende la distribuzione più agevole.

Sviluppo: le applicazioni compilate con una base di codice sono più semplici da sviluppare.

Prestazioni: in un repository e in una base di codice centralizzati, un'API può spesso eseguire la stessa funzione svolta da più API nell'architettura di microservizi.

Test semplificati: dal momento che un'applicazione monolitica è un'unità singola e centralizzata, i test end-to-end possono essere eseguiti più rapidamente rispetto a quelli delle applicazioni distribui

Debug agevole: dal momento che il codice si trova in un'unica posizione, è più semplice seguire una richiesta e trovare un ticket.

Svantaggi dell'architettura monolitica


Come nel caso di Netflix, le applicazioni monolitiche possono essere piuttosto efficaci finché non diventano troppo grandi e la scalabilità si trasforma in una sfida. Apportare una piccola modifica in una singola funzione richiede la compilazione e il test dell'intera piattaforma, procedura che va contro l'approccio Agile preferito dagli sviluppatori di oggi.

Gli svantaggi dell'architettura monolitica includono:

Velocità di sviluppo ridotta: un'applicazione monolitica e di grandi dimensioni rende lo sviluppo più complesso e lento.

Scalabilità: non è possibile eseguire la scalabilità dei singoli componenti.

Affidabilità: gli eventuali errori in un modulo potrebbero influire sulla disponibilità di tutta l'applicazione.

Barriera all'adozione della tecnologia: le modifiche del framework o del linguaggio influiscono sull'intera applicazione, diventando spesso dispendiose in termini di costi e tempo.

Mancanza di flessibilità: un monolite è vincolato dalle tecnologie già in uso nel monolite stesso.

Distribuzione: una minima modifica a un'applicazione monolitica richiede una nuova distribuzione dell'intero monolite.

Cosa sono i microservizi?


Un'architettura di microservizi, nota anche semplicemente come microservizi, è un metodo architettonico che si basa su una serie di servizi distribuibili in modo indipendente. Questi servizi hanno una propria logica aziendale e un proprio database con un obiettivo specifico. Le attività di aggiornamento, test, distribuzione e ridimensionamento avvengono all'interno di ciascun servizio. I microservizi scompongono le principali preoccupazioni aziendali e specifiche del contesto in basi di codice indipendenti e separate e, anche se non riducono la complessità, la rendono visibile e più gestibile separando i task in processi più piccoli in grado di funzionare in modo indipendente gli uni dagli altri e contribuire all'insieme generale.

I microservizi sono alla base delle pratiche di continuous delivery che consentono ai team di adattarsi rapidamente ai requisiti degli utenti ed è per questo che la loro adozione va spesso di pari passo con l'approccio DevOps.

immagine dell'architettura di microservizi

Il percorso di Atlassian verso i microservizi


Atlassian ha intrapreso la strada verso i microservizi nel 2018, dopo aver affrontato le sfide legate alla crescita e alla scalabilità con Jira e Confluence. Ci siamo resi conto che le nostre architetture monolitiche a tenant singolo in esecuzione on-premise non sarebbero state in grado di adattarsi alle esigenze di crescita future.

Abbiamo deciso di riprogettare Jira e Confluence e trasferirli da un sistema monolitico, con stato e a tenant singolo ad applicazioni cloud senza stato e multi-tenant ospitate da Amazon Web Services (AWS), che nel tempo avremmo scomposto in microservizi. Il progetto è stato denominato Vertigo (ossia vertigine) dopo che un ingegnere senior ha affermato che, sebbene gli piacesse molto, questa idea gli faceva venire le vertigini. È stato il più grande progetto di infrastruttura che abbiamo svolto finora. La transizione ad AWS ha richiesto due anni, con la migrazione di oltre 100.000 clienti in poco più di 10 mesi senza interruzioni del servizio. Ci siamo inoltre impegnati a scomporre i servizi in microservizi.

Vantaggi dei microservizi


I microservizi non sono assolutamente la soluzione ottimale a tutti i problemi, tuttavia sono in grado di risolvere un discreto numero di problemi dei software e delle aziende in crescita. Dal momento che un'architettura di microservizi è costituita da unità eseguite in modo indipendente, ogni servizio può essere sviluppato, aggiornato, distribuito e ridimensionato senza influire sugli altri servizi. Gli aggiornamenti software vengono eseguiti con maggiore frequenza, in modo più affidabile e con prestazioni e tempo di attività migliorati. Siamo passati dal rilascio di aggiornamenti una volta alla settimana a due o tre volte al giorno.

Con la crescita di Atlassian, i microservizi ci consentono di adattare team e posizioni geografiche in modo più affidabile suddividendo le linee di proprietà dei servizi. Prima di partire con il progetto Vertigo, Atlassian contava cinque diversi centri di sviluppo in tutto il mondo. Questi team distribuiti erano vincolati da un monolite centralizzato e dovevamo supportarli in modo autonomo. I microservizi ci offrono questa possibilità.

Tra i vantaggi di Vertigo vi sono maggiore velocità di distribuzione, ripristino di emergenza, costi ridotti e prestazioni più elevate. Tutto ciò ci consente di raggiungere più rapidamente l'obiettivo offrendo al contempo ulteriore valore incrementale ai clienti.

Inoltre, più in generale, i microservizi semplificano ai team l'aggiornamento del codice e accelerano i cicli di rilascio grazie alla continuous integration e continuous delivery (CI/CD). I team possono sperimentare con il codice ed eseguire il rollback in caso di problemi.

In breve, i vantaggi dei microservizi sono:

Agilità: promuovi metodi di lavoro Agile con team di piccole dimensioni che rilasciano distribuzioni frequenti.

Scalabilità flessibile: se un microservizio raggiunge la capacità di carico, è possibile distribuire rapidamente nuove istanze di tale servizio nel cluster che lo accompagna per ridurre la pressione. La nostra infrastruttura è adesso multi-tenant e senza stato, i clienti sono distribuiti su più istanze e siamo in grado di supportare istanze di dimensioni molto più elevate.

Continuous deployment: i nostri cicli di rilascio sono adesso più frequenti e veloci. Prima, gli aggiornamenti venivano rilasciati una volta alla settimana, mentre adesso da due a tre volte al giorno.

Elevate capacità di manutenzione e test: i team possono sperimentare nuove funzioni e fare ed eseguire il rollback se qualcosa va storto. Ciò semplifica l'aggiornamento del codice e accelera il time-to-market delle nuove funzioni. Inoltre, è semplice isolare e correggere gli errori e i bug nei servizi individuali.

Distribuzione indipendente: dal momento che i microservizi sono unità individuali, rendono possibile la distribuzione rapida, semplice e indipendente delle singole funzioni.

Flessibilità della tecnologia: le architetture di microservizi danno ai team la libertà di scegliere gli strumenti che preferiscono.

Affidabilità elevata: puoi distribuire le modifiche di un servizio specifico senza il pericolo di arrestare l'intera applicazione.

Team più soddisfatti: i team Atlassian che lavorano con i microservizi sono molto più contenti poiché hanno maggiore autonomia e possono occuparsi della compilazione e della distribuzione senza dover attendere settimane per l'approvazione di una pull request.

Svantaggi dei microservizi


Quando siamo passati da un numero ridotto di basi di codice monolitiche a un numero più elevato di sistemi e servizi distribuiti alla base dei nostri prodotti, sono sorte delle complessità impreviste. Inizialmente abbiamo avuto delle difficoltà nell'aggiungere nuove funzionalità alla stessa velocity e con la stessa sicurezza che avevamo in passato. I microservizi possono aggiungere ulteriore complessità che porta a un'estensione dello sviluppo o a una crescita rapida e non gestita. Può essere difficile determinare le relazioni tra i diversi componenti, chi possiede un determinato componente software o come evitare interferenze con i componenti dipendenti.

Con Vertigo, abbiamo compilato una funzionalità comune su cui si sarebbero basati i prodotti esistenti e quelli creati o acquisiti in futuro. Nel caso delle aziende di prodotti singoli, i microservizi potrebbero non essere necessari.

Gli svantaggi dell'architettura di microservizi includono:

Estensione dello sviluppo: i microservizi aggiungono ulteriore complessità rispetto all'architettura monolitica, dal momento che vi sono più servizi in più posizioni creati da più team. Se l'estensione dello sviluppo non è gestita correttamente, si traduce in velocità di sviluppo ridotta e in scarse prestazioni operative.

Costi di infrastruttura esponenziali: ogni nuovo microservizio può avere i propri costi per suite di test, playbook di distribuzione, infrastruttura di hosting, strumenti di monitoraggio e molto altro.

Sovraccarico organizzativo aggiunto: i team devono aggiungere un ulteriore livello di comunicazione e collaborazione per coordinare gli aggiornamenti e le interfacce.

Sfide legate al debug: ogni microservizio ha il proprio set di log, il che complica ulteriormente il debug. In più, un singolo processo aziendale può essere eseguito su più macchine, rendendo il debug ancora più difficoltoso.

Mancanza di standardizzazione: senza una piattaforma comune, può esserci una proliferazione di linguaggi, standard di registrazione e monitoraggio.

Poca chiarezza sulla proprietà: il numero di servizi che vengono introdotti è direttamente proporzionale ai team che li eseguono. Nel tempo, diventa difficile sapere quali sono i servizi disponibili che un team può utilizzare e chi contattare per richiedere assistenza.

immagine del confronto tra monolite e microservizi

I suggerimenti di Atlassian per la migrazione da un'architettura monolitica a una di microservizi


Molti progetti iniziano come monoliti per poi evolversi in un'architettura di microservizi. Man mano che vengono aggiunte nuove funzioni a un monolite, potrebbe cominciare a diventare complicato avere più sviluppatori che lavorano su una singola base di codice. I conflitti di codice diventano più frequenti e il rischio che gli aggiornamenti a una funzione possano introdurre bug in una funzione non collegata aumenta. Quando prendono piede questi schemi indesiderati, potrebbe essere il momento di prendere in considerazione la migrazione ai microservizi.

Di seguito sono riportate alcune delle best practice che abbiamo appreso dal nostro processo di migrazione:

Mappa una strategia di migrazione

Abbiamo dedicato moltissimo tempo a stabilire la sequenza in cui volevamo eseguire la migrazione dei clienti. Sapevamo che molti dei nostri clienti avrebbero avuto profili e dinamiche di utilizzo diversi in seguito alla migrazione, per cui abbiamo pianificato di conseguenza e con largo anticipo.

Strumenti

Gli strumenti giusti sono essenziali quando si esegue una migrazione ai microservizi. Non abbiamo subito eseguito la migrazione dei clienti, ma abbiamo prima creato e investito in strumenti per la migrazione, consapevoli di aver intrapreso una maratona e non uno sprint. Lo strumento più importante che abbiamo creato è stato Microscope, il nostro catalogo dei servizi interno per tenere traccia di tutti i microservizi. Ogni sviluppatore di Atlassian può utilizzare Microscope per vedere tutte le informazioni di qualsiasi microservizio dell'azienda.

Abbiamo inoltre creato un altro strumento in Microscope, chiamato ServiceQuest, che rileva automaticamente i controlli sul codice prima della fase di produzione, tra cui i controlli di qualità, progettazione del servizio, privacy, sicurezza e affidabilità.

Inoltre, abbiamo creato uno strumento basato sui nostri stack tecnologici. Disponiamo di un servizio interno che ci consente di avviare un nuovo servizio su un determinato stack e che precede attività come la registrazione, il monitoraggio e la memorizzazione nella cache. Infine, abbiamo automatizzato quante più attività possibili, tra cui lo stesso processo di migrazione. Abbiamo creato una dashboard su cui visualizzare in modo efficace tutte le migrazioni in tempo reale.

Gestisci le aspettative

La trasformazione aziendale richiede uno sponsor esecutivo senior responsabile dei risultati e disposto a far rispettare i compromessi necessari, ha affermato Sri Viswanath, CTO di Atlassian. Questa persona deve far sì che l'organizzazione investa in nuovi strumenti, sistemi e processi per rendere definitivi i miglioramenti.

Nel caso della migrazione di un'infrastruttura di grandi dimensioni che coinvolge tante persone, l'azienda vuole sapere quale sarà il ritorno sull'investimento, ha spiegato Mike Tria, Head of Platform di Atlassian. È molto importante mantenere la comunicazione con il team esecutivo, gli stakeholder, i clienti, i partner e il resto dei team R&S. Assicurati che sappiano cosa stai facendo, inclusi i vantaggi previsti. In più, non dimenticare di celebrare i successi.

Accetta il cambiamento culturale

"La cultura è estremamente importante in questo tipo di progetti di grandi dimensioni", ha affermato Viswanath. "Si vuole essere certi che quando si verifica un problema, questo venga filtrato ogni singola volta". Quando si esegue una migrazione, non si tratta di un cambiamento soltanto a livello tecnico, ma anche di persone e organizzazione. Nel 2015, in Atlassian veniva adottato un approccio per cui il codice compilato veniva passato al team delle operazioni che si occupavano della sua distribuzione. Entro la fine del 2017, abbiamo adottato la cultura DevOps del "You Build It, You Run It", in base a cui ogni sviluppatore deve occuparsi dell'esecuzione dei suoi servizi.

"Ho dedicato molto più tempo ad assicurarmi che il team SRE fosse in grado di portare a termine questo progetto che non a qualsiasi altro lavoro svolto nel corso del progetto stesso, poiché il cambiamento culturale rappresentava la più grande differenza a lungo termine per Atlassian come risultato del progetto Vertigo", ha affermato Tria.

Trova un equilibrio tra velocità e fiducia

Vertigo poteva essere portato a termine molto più rapidamente. Dopo i primi quattro mesi, avevamo completato l'80% delle migrazioni. Avremmo potuto migrare anche l'ultima porzione di utenti, anche se non potevamo garantire il livello di affidabilità e prestazioni che volevamo, ma invece ci siamo allineati con uno dei valori fondamentali di Atlassian: non #@!% il cliente.

Abbiamo istituito un sistema di controlli e contrappesi con i nostri ingegneri per mantenere l'alta affidabilità e abbiamo soddisfatto gli elevati standard che ci eravamo prefissati di raggiungere. Poiché, se la prima compilazione è corretta, si riesce a risparmiare tempo e grattacapi nel lungo periodo.

Quando siamo arrivati agli ultimi 500 clienti, quelli più difficili da migrare, abbiamo usato l'integrazione tra Jira e Trello per assegnare ciascun cliente a un ingegnere Atlassian.

In sintesi...


A gennaio 2016 avevamo in totale circa 15 microservizi. Adesso ne abbiamo più di 1300. Abbiamo trasferito 100.000 clienti nel cloud, costruito nel frattempo una nuova piattaforma, trasformato la nostra cultura e creato nuovi strumenti. I nostri team sono più soddisfatti e autonomi e la cultura DevOps è più solida che mai.

I microservizi potrebbero non essere la soluzione più adatta a tutti. Un monolite legacy può funzionare alla perfezione e potrebbe non valere la pena di scomporlo. Ma, via via che le organizzazioni crescono e le richieste sulle applicazioni aumentano, l'architettura di microservizi potrebbe essere la giusta soluzione.

Dal momento che i microservizi con architetture distribuite sono di tendenza per molte organizzazioni, Atlassian ha sviluppato Compass per aiutare le aziende a gestire la complessità delle architetture distribuite man mano che si ampliano. Si tratta di una piattaforma di sviluppo estensibile che riunisce i dati separati di tutti i risultati tecnici e della collaborazione tra i team in un'unica posizione centrale e ricercabile.

Chandler Harris
Chandler Harris

Chandler Harris è un marketing strategist e autore per Atlassian. Ha scritto per più di 40 diverse pubblicazioni su argomenti che spaziano dalla tecnologia, alla scienza, al business, alla finanza e all'istruzione.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community di Compass

illustrazione del superamento di ostacoli

Tutorial: Creare un componente

Illustrazione di una mappa

Inizia a utilizzare Compass gratuitamente

Iscriviti alla nostra newsletter DevOps

Thank you for signing up