Close

Microservices: understanding what it is and its benefits

Non molto tempo fa, il metodo di compilazione di applicazioni software più gettonato era l'architettura monolitica, un'unità singola e autonoma. Questo approccio ha funzionato bene per molti sviluppatori finché le applicazioni non sono diventate più complesse. Quando viene modificata una piccola sezione di codice all'interno di un sistema monolitico, è necessario ricompilare l'intero sistema, eseguire test su quest'ultimo e distribuire una versione completamente nuova dell'applicazione.

Poi sono arrivati i microservizi, un approccio che suddivide i sistemi software in unità più piccole sviluppate e distribuite in modo autonomo. L'architettura di microservizi è stata guidata dal movimento DevOps che mira al rilascio frequente di aggiornamenti, come nuove funzioni, correzioni di bug e miglioramenti della sicurezza. Questo approccio ha, in molti casi, tracciato per le aziende un percorso da seguire per riscrivere le applicazioni esistenti utilizzando linguaggi di programmazione moderni e aggiornamenti dello stack tecnologico.

I microservizi sono una raccolta di piccole unità che rilasciano e distribuiscono costantemente applicazioni complesse e di grandi dimensioni.

Cosa sono i microservizi?


Un'architettura di microservizi, nota anche semplicemente come "microservizi", è un approccio alla compilazione di applicazioni come serie di servizi distribuibili in modo indipendente, decentralizzati e sviluppati in modo autonomo. Questi servizi sono debolmente accoppiati, distribuibili in modo indipendente e facilmente gestibili. 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. I microservizi sono parte integrante di DevOps, dal momento che sono alla base delle pratiche di continuous delivery che consentono ai team di adattarsi rapidamente ai requisiti degli utenti.

Illustrazione dei microservizi

Un microservizio è un servizio web responsabile di una parte della logica di dominio. Più microservizi si uniscono per creare un'applicazione, in cui ciascuno di questi fornisce una parte di funzionalità per un dominio. I microservizi interagiscono tra di loro tramite API, come REST o gRPC, ma non conoscono i meccanismi interni degli altri servizi. Questa interazione armoniosa tra i microservizi è un'architettura di microservizi.

Tramite un'architettura di microservizi, gli sviluppatori possono organizzarsi in team più piccoli specializzati in diversi servizi, con diversi stack e distribuzioni disaccoppiate. Ad esempio, Jira si basa su più microservizi, ciascuno dei quali fornisce funzionalità specifiche come la ricerca dei ticket, la visualizzazione dei dettagli dei ticket, i commenti, le transizioni dei ticket e molto altro.

Caratteristiche dei microservizi


Non esiste una definizione formale dell'architettura di microservizi, ma vi sono alcuni schemi o caratteristiche comuni che è importante conoscere.

In un'architettura di microservizi, ciascun componente può essere sviluppato, distribuito, utilizzato, modificato e ridistribuito senza compromettere il funzionamento degli altri servizi o l'integrità dell'applicazione.

Vantaggi dei microservizi


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

Illustrazione di una bilancia

Scalabilità flessibile

Poiché sono progettati per essere distribuiti, anche in cluster se necessario, i microservizi consentono la scalabilità orizzontale dinamica tra i limiti dei servizi. 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.

Illustrazione su Agile

Agilità

Dal momento che generalmente creano un servizio all'interno dei microservizi, i team piccoli e indipendenti sono incoraggiati ad adottare le pratiche Agile. I team hanno la possibilità di lavorare in modo indipendente e più rapidamente, riducendo i tempi del ciclo di sviluppo.

Illustrazione di cassetta degli attrezzi

Flessibilità tecnologica

Le architetture di microservizi non seguono necessariamente un approccio fisso con una sola toolchain, ma danno ai team la libertà di scegliere gli strumenti che preferiscono.

Illustrazione di mattoncini impilati

Rilasci frequenti

Uno dei vantaggi principali dei microservizi sono i cicli di rilascio frequenti e più rapidi. Come elementi chiave della continuous integration e continuous delivery (CI/CD), 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.

Sfide dei microservizi


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

Estensione dello sviluppo

Il passaggio da un monolite ai microservizi comporta una maggiore complessità. Vi sono più servizi in più posizioni, creati da più team. Ciò può rendere difficile determinare le relazioni tra i diversi componenti, individuare chi possiede un determinato componente o capire come evitare di influire negativamente sui componenti dipendenti. Se l'estensione non viene gestita, si traduce in velocità di sviluppo ridotta e in scarse prestazioni operative. Con la crescita del sistema, si rende necessario un team delle operazioni esperto che si occuperà della gestione delle nuove distribuzioni costanti e delle modifiche frequenti all'architettura.

Poca chiarezza sulla proprietà

L'architettura di microservizi aggiunge confusione sull'attribuzione della proprietà dei diversi elementi. Il team DevOps potrebbe eseguire un insieme di API, raccolte di componenti, strumenti di monitoraggio e immagini Docker per gli utenti per distribuire un'applicazione. È importante disporre di informazioni approfondite sui componenti, inclusi i responsabili, le risorse e le relazioni in evoluzione tra gli altri componenti. Servono comunicazione e coordinamento precisi tra i diversi team per far sì che tutte le persone coinvolte trovino con facilità le informazioni necessarie per comprendere un prodotto.

Costi di infrastruttura esponenziali

Ogni nuovo microservizio aggiunto alla distribuzione nell'ambiente di produzione ha i propri costi relativi a suite di test, playbook di distribuzione, infrastruttura di hosting, strumenti di monitoraggio e molto altro.

Sovraccarico organizzativo aggiunto

È necessario un ulteriore livello di collaborazione e comunicazione per il coordinamento degli aggiornamenti e delle interfacce tra i team dell'architettura di microservizi.

Debug

Può essere complicato eseguire il debug di un'applicazione contenente più microservizi, ciascuno con il suo insieme di log. Un singolo processo aziendale può essere eseguito su più computer e in diversi momenti, rendendo il debug ancora più complicato.

Risposta agli imprevisti

È importante disporre di informazioni sulla risposta agli imprevisti relativi ai microservizi, ad esempio informazioni su chi sta utilizzando il microservizio, dove questo è stato distribuito e come e chi contattare in caso di problemi.

Microservizi e DevOps: due gocce d'acqua


Dato l'aumento della complessità e delle dipendenze dei microservizi, le pratiche DevOps di automazione della distribuzione, del monitoraggio e del ciclo di vita sono considerate parti integranti delle architetture di microservizi. Per questo motivo i microservizi sono spesso considerati il primo passo verso l'adozione di una cultura DevOps, che offre:

  • Automazione
  • Scalabilità migliorata
  • Gestibilità
  • Agilità
  • Accelerazione dello sviluppo e della distribuzione

Strumenti e tecnologie chiave dell'architettura di microservizi


Un container non è altro che il pacchetto di un'applicazione e tutte le sue dipendenze, che ne consente la distribuzione agevole e coerente. Dal momento che i container non presentano il sovraccarico dato dal sistema operativo, sono più piccoli e più leggeri rispetto alle macchine virtuali tradizionali. Possono avviarsi e arrestarsi più rapidamente e rappresentano un abbinamento perfetto con i servizi di dimensioni ridotte che compongono le architetture di microservizi.

Con la proliferazione di servizi e container, l'orchestrazione e la gestione di gruppi più grandi di container riveste un'importanza fondamentale. Docker è un'apprezzata piattaforma di containerizzazione e runtime che aiuta gli sviluppatori a compilare, distribuire ed eseguire i container. Tuttavia, l'esecuzione e la gestione dei container su larga scala rappresenta una sfida se si utilizza soltanto Docker. Kubernetes e altre soluzioni come Docker Swarm, Mesos, HashiCorp Nomad e molte altre aiutano a gestire la containerizzazione su larga scala.

La containerizzazione e la distribuzione dei container rappresentano un nuovo schema di infrastruttura distribuita. Docker e Kubernetes creano pacchetti di servizi in un container completo che può essere rapidamente distribuito ed eliminato. Questi strumenti di infrastruttura sono complementari all'architettura di microservizi. I microservizi possono essere containerizzati, distribuiti agevolmente e gestiti tramite un sistema di gestione dei container.

Cosa sono i microservizi?


Un'architettura di microservizi, nota anche semplicemente come "microservizi", è un approccio alla compilazione di applicazioni come serie di servizi distribuibili in modo indipendente, decentralizzati e sviluppati in modo autonomo. Questi servizi sono debolmente accoppiati, distribuibili in modo indipendente e facilmente gestibili. 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. I microservizi sono parte integrante di DevOps, dal momento che sono alla base delle pratiche di continuous delivery che consentono ai team di adattarsi rapidamente ai requisiti degli utenti.

Illustrazione dei microservizi

Un microservizio è un servizio web responsabile di una parte della logica di dominio. Più microservizi si uniscono per creare un'applicazione, in cui ciascuno di questi fornisce una parte di funzionalità per un dominio. I microservizi interagiscono tra di loro tramite API, come REST o gRPC, ma non conoscono i meccanismi interni degli altri servizi. Questa interazione armoniosa tra i microservizi è un'architettura di microservizi.

Tramite un'architettura di microservizi, gli sviluppatori possono organizzarsi in team più piccoli specializzati in diversi servizi, con diversi stack e distribuzioni disaccoppiate. Ad esempio, Jira si basa su più microservizi, ciascuno dei quali fornisce funzionalità specifiche come la ricerca dei ticket, la visualizzazione dei dettagli dei ticket, i commenti, le transizioni dei ticket e molto altro.

Futuro dei microservizi


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Esplora i microservizi con Compass

Se hai scelto di utilizzare un'architettura di microservizi, Compass di Atlassian gestisce la complessità delle architetture distribuite man mano che si ampliano. Si tratta di una piattaforma di sviluppo estensibile che riunisce i dati separati dei risultati tecnici e della collaborazione tra i team in un'unica posizione centrale e ricercabile. Oltre ad aiutarti a controllare la proliferazione di microservizi con il Catalogo componenti, Compass può essere utile per stabilire best practice, misurare l'integrità del software con le scorecard e fornirti dati e informazioni approfondite sulla toolchain DevOps utilizzando estensioni create sulla piattaforma Atlassian Forge.

Illustrazione dei microservizi Compass