GNU/Linux >> Linux Esercitazione >  >> Cent OS

Cosa sono i microservizi? Introduzione all'architettura dei microservizi

Introduzione

Nell'ultimo decennio, lo sviluppo delle applicazioni si è evoluto rapidamente per stare al passo con i progressi tecnologici e le esigenze dei consumatori.

Mentre lo sviluppo tradizionale si basava su una grossa porzione di codice, la maggior parte delle app oggi sono costruite da diverse mini-applicazioni o microservizi , ciascuno responsabile di una singola funzionalità dell'app.

Insieme formano un sistema denominato architettura del microservizio.

Cosa sono i microservizi?

Microservizi , o meglio l'architettura di microservizi , è un sistema utilizzato per sviluppare un'applicazione, basato su una selezione di singoli servizi che interagiscono per garantire prestazioni senza interruzioni e altamente reattive.

Se stai creando un'applicazione Web utilizzando l'architettura del microservizio, la dividi in singole funzionalità, sviluppando e distribuendo ciascuna come app separata.

Contrariamente allo sviluppo monolitico, dove tutto è fuso e, quindi, dipendente l'uno dall'altro, l'architettura del microservizio è costituita da più moduli di componenti autonomi. È un tipo di architettura che si basa sul sistema di accoppiamento libero .

Nota :L'accoppiamento sciolto sta strutturando un sistema in cui gli elementi non sono consapevoli l'uno dell'altro, ma possono comunicare.

Ad esempio, un sito Web di e-commerce richiede molti servizi diversi, inclusi pagamenti online, resi, profili utente e così via. Per creare il sito Web, gli sviluppatori si dividevano in team, ciascuno responsabile della creazione di uno dei microservizi in uso.

In che modo i microservizi comunicano tra loro?

Una volta che hai compreso la struttura, potresti chiederti come queste entità separate si uniscono per creare un servizio o un'applicazione armoniosa. La risposta si riduce a stabilire una comunicazione diretta, veloce e impeccabile tra tutti i servizi Pertanto, i microservizi comunicano tra loro tramite API .

Interfaccia di programmazione delle applicazioni (API ) è un punto di accesso di ciascuna funzionalità modulare che consente ai moduli di interagire. Un microservizio utilizza questa interfaccia per inviare e rispondere alle richieste di altri moduli.

Ogni microservizio deve avere un endpoint API chiaramente definito (un'estremità di un canale di comunicazione) per garantire che sia sempre accessibile per le richieste. Nella maggior parte dei casi, si tratta di API REST stateless . Senza endpoint ben definiti, il sistema non sa dove cercare le informazioni di cui ha bisogno.

Pertanto, i team DEV userebbero standard e modelli ufficiali per condividere gli endpoint tra loro. È loro responsabilità stabilire l'API REST attraverso la collaborazione e una comunicazione chiara.

La differenza tra architettura tradizionale e architettura di microservizi

Per comprendere meglio i microservizi, confrontiamoli con il sistema utilizzato prima del loro sviluppo:architettura monolitica .

Architettura monolitica ha funzionato bene per i tradizionali sistemi lato server. Si tratta di sistemi basati su un'unica applicazione. Tutte le funzionalità risiedono in un'unica struttura, utilizzano lo stesso file system, comunicano con lo stesso server e vengono eventualmente distribuite sulla stessa macchina.

Questo tipo di architettura consente agli sviluppatori di creare applicazioni più velocemente, poiché devono solo creare le funzionalità essenziali a cui in seguito aggiungerebbero altre funzionalità. Inoltre, le prestazioni sono state più veloci in quanto il processo non coinvolge le API.

Con l'espansione delle applicazioni Web è nata la necessità di agilità e tempi di attività coerenti. L'architettura monolitica aveva troppi ostacoli per tenere il passo con queste richieste.

Contro dell'architettura monolitica

Poiché questi sistemi avevano un processo di accoppiamento stretto, qualsiasi modifica apportata al codice poteva potenzialmente mettere in pericolo le prestazioni dell'intera applicazione. Le funzionalità erano troppo interdipendenti per una nuova era tecnologica che richiedeva continue innovazioni e adattamenti.

Un altro problema con l'architettura monolitica era la sua incapacità di scalare le singole funzionalità. Un aspetto cruciale delle aziende di successo è la loro capacità di stare al passo con le richieste dei consumatori. Naturalmente, queste richieste dipendono da vari fattori e fluttuano nel tempo.

Ad un certo punto, la tua azienda dovrà ridimensionare solo una determinata funzione del suo servizio per rispondere a un numero crescente di richieste. Con le app monolitiche, non potevi ridimensionare i singoli elementi, ma dovevi ridimensionare l'applicazione nel suo insieme.

Vantaggi dei microservizi

L'introduzione dei microservizi ha risolto molti problemi che lo sviluppo monolitico non poteva.

1. Altamente flessibile

Innanzitutto, l'architettura del microservizio è altamente flessibile . Poiché ogni microservizio è indipendente, i programmatori possono creare moduli utilizzando linguaggi o piattaforme diverse. Questi moduli potranno comunicare tra loro grazie alle API.

Inoltre, con i microservizi nessuna organizzazione deve impegnarsi a lungo termine in uno stack tecnologico. Pertanto, gli sviluppatori possono sempre lavorare con la tecnologia più recente.

2. Moduli di funzionalità riutilizzabili

Inoltre, questa funzione consente agli sviluppatori di riutilizzare i moduli di funzionalità e applicarli ad altre applicazioni. L'utilizzo di microservizi già perfezionati consente di risparmiare risorse aziendali e consente agli sviluppatori di concentrarsi su altri progetti.

3. Resiliente ai cambiamenti

Un'altra caratteristica significativa è che il sistema è abbastanza resiliente ai cambiamenti. Liberamente accoppiate, le funzionalità all'interno di un'app non sono così codipendenti. Gli sviluppatori possono aggiungere in modo efficiente nuove funzionalità o modificare quelle esistenti. Modificano il codice di un modulo invece dell'intera applicazione.

4. Scalabile

A differenza delle app monolitiche, i microservizi sono eccellenti per il ridimensionamento . Garantiscono che la tua applicazione sia sempre attiva e funzionante, senza sprecare denaro per moduli inutilizzati. Poiché distribuisci funzionalità su server diversi, il sistema ti consente di ridimensionare solo le risorse necessarie.

5. Cicli di sviluppo più rapidi

In un modello distribuito, l'app è suddivisa in servizi più piccoli. Se la tua organizzazione ha adottato lo sviluppo agile, i tuoi team possono aggiornarlo più facilmente e accelerare i cicli di sviluppo.

Dal punto di vista aziendale, cicli di sviluppo più rapidi sono uno dei maggiori miglioramenti introdotti dai microservizi.

6. Modello trasparente

I nuovi dipendenti, ad esempio, comprenderanno e modificheranno più facilmente il codice. Ciò si basa sul fatto che l'app è distribuita tra numerosi servizi. Gestire un microservizio alla volta è più facile che affrontare un intero sistema integrato.

Svantaggi dei microservizi

1. Complessità

Lo svantaggio numero uno dell'architettura di microservizi è la sua complessità . Rispetto alle applicazioni monolitiche, il sistema di nuova concezione ha molti più componenti. Questi componenti (microservizi) devono funzionare perfettamente da soli e all'interno del sistema.

2. Spese

Questo sistema è anche più costoso . Poiché i servizi vengono distribuiti su più server, l'applicazione finisce per richiedere un numero più significativo di CPU e più ambienti di runtime. Inoltre, a causa della loro necessità di una comunicazione costante, i microservizi effettuano molte chiamate remote. Questi e altri fattori si sommano, richiedendo così un budget più ampio per lo sviluppo.

3. Sicurezza

I microservizi richiedono anche una maggiore sicurezza le misure. Come accennato in precedenza, i servizi comunicano tra loro tramite le API. Ciò significa che si scambiano informazioni sulla rete, che è sempre una potenziale minaccia. Per questo motivo, la manutenzione e gli aggiornamenti devono essere impeccabili.

4. Prestazioni

La complessità dell'architettura influenza anche le sue prestazioni . Poiché i microservizi includono più istanze JVM (Java Virtual Machine) e comunicazioni tra processi, la loro efficienza può essere più lenta rispetto alle app monolitiche.

PRO CONS
Indipendenza dai servizi. Ogni contenitore di servizi ha la propria logica di business e si concentra sulla singola capacità aziendale. L'architettura supporta singole unità distribuibili indipendenti l'una dall'altra. Impostazione complessa. A causa del loro individualismo, la configurazione del sistema richiede più configurazione e risorse, con conseguente sovraccarico operativo.
Distribuzione flessibile/agile. Ogni microservizio può essere ridimensionato in modo indipendente con l'opportunità di utilizzare tecnologie diverse ed essere eseguito su stack e prodotti diversi. Complessità operativa. È più difficile risolvere, eseguire il debug e tracciare le transazioni attraverso l'ecosistema di microservizi. Affrontare i problemi nel sistema richiede alti livelli di automazione.
Tolleranza ai guasti. I microservizi sono unità debolmente accoppiate che possono essere ripristinate automaticamente. Queste unità non sono co-dipendenti, consentendo agli sviluppatori di aumentare la disponibilità di ciascuna unità, quando necessario. Rischio per la sicurezza. Sebbene i servizi isolati siano più tolleranti ai guasti, la stessa funzionalità può sollevare problemi di sicurezza durante le transazioni tra unità.
Supporta CI/CD. Poiché i microservizi vengono distribuiti in modo indipendente, è possibile sviluppare e distribuire più istanze contemporaneamente. Quindi, porta a rilasci software più rapidi e frequenti. Interfacce codipendenti. I servizi comunicano su interfacce interdipendenti. È impossibile modificare un'interfaccia senza regolare l'altra.
Semplifica l'aggiunta di nuove funzionalità. È più facile aggiungere nuove funzionalità modificando i servizi esistenti o aggiungendone di nuovi senza interrompere le prestazioni di altri servizi. Rendimento più lento. Rispetto alle applicazioni monolitiche, i microservizi richiedono più tempo per eseguire attività a causa della loro architettura complessa e della comunicazione tra processi.

Sfide all'adozione di microservizi

1. Progettazione di un modello distribuito

La sfida iniziale per l'adozione dei microservizi è progettare un modello affidabile e sostenibile . I microservizi utilizzano un sistema poco distribuito, quindi è probabile che ti ritroverai con un design complesso. Tutte le dipendenze di sistema devono essere attentamente considerate e prese in considerazione.

2. Test di integrazione

Un'altra sfida è l'integrazione e il test end-to-end. Il test diventa più difficile e tuttavia più importante che mai. I microservizi devono comunicare e supportarsi a vicenda, quindi tutti i servizi devono essere privi di bug. Un bug in un servizio può causare un errore irreversibile in un altro. Questo è il motivo per cui il test continuo con i microservizi è fondamentale.

3. Distribuzione

Se stai ancora distribuendo manualmente, il tuo team dovrà inizialmente investire tempo nell'automazione del processo. A causa della complessità dei modelli distribuiti, la distribuzione manuale diventa troppo complessa.

4. Monitoraggio e registrazione

Le organizzazioni che adottano microservizi devono stabilire un sistema centralizzato di monitoraggio e registrazione . Se non è configurato, l'identificazione e il debug dei problemi diventa impossibile.

5. Debug

A causa di tutti i fattori sopra menzionati e di altre complessità, come il bilanciamento del carico e la latenza, problemi di debug , in un sistema distribuito, è complesso. Non esiste una risposta semplice a quale approccio funzioni meglio e ci vorrà sicuramente del tempo prima di trovare quello che funziona meglio per il tuo progetto.

6. Altre considerazioni

Infine, la tua organizzazione deve adattarsi per adottare un modello di microservizi. Il modo in cui i tuoi team lavorano e collaborano dovrà cambiare. Promuovi un cambiamento nella cultura della tua azienda per preparare i tuoi team ai microservizi.

Esempi di microservizi

Microservizi in Java

Puoi sviluppare microservizi utilizzando linguaggi diversi. Tuttavia, Java è ancora considerata una delle scelte migliori per la creazione di applicazioni con tale architettura.

Esistono più framework di microservizi utilizzati per lo sviluppo con Java, tra cui:

  • Stivali primaverili
  • Spavalderia
  • Maglia
  • Mago Drop
  • JHipster
  • Vert.x
  • Gioca

Inoltre, la configurazione del microservizio viene spesso usata per supportare un ambiente di machine learning (ML) poiché consente più framework di machine learning nel flusso di lavoro. TensorFlow, Apache Mahout e Apache Singa sono tutti esempi di framework ML utilizzati con Java.

Raccogliendo, aggregando e analizzando il flusso di dati, i framework possono prevedere i risultati e fornire il confronto tra i modelli.

Microservizi in Docker

Docker è un altro ottimo software per la creazione di microservizi. Poiché utilizza i container per eseguire ambienti virtuali, la piattaforma consente diversi modi di organizzare i microservizi:

  • Ogni container può essere dedicato a un singolo servizio.
  • Un singolo servizio può essere separato in più contenitori per processi separati all'interno del servizio.

I contenitori sono un modo pratico per isolare i microservizi. Sono leggeri, implementabili e scalabili su vari sistemi operativi e infrastrutture.

Se stai eseguendo un'applicazione Docker multi-container, Docker Compose è uno strumento che può aiutarti a gestire e configurare tutti i tuoi microservizi. Tutto questo viene fatto con un unico yaml ed esegue le attività di lancio, esecuzione, comunicazione e chiusura di container con un unico comando coordinato.

Le applicazioni multi-container con numerosi host Docker sono gestite al meglio con una piattaforma di orchestrazione di container, come Swarm o Kubernetes. Entrambe le piattaforme consentono di amministrare cluster di server ciascuno con più servizi su di essi. Per saperne di più sulle loro differenze, consulta il nostro articolo Kubernetes vs Docker Swarm.

Di seguito viene illustrato come gestire i cluster di contenitori con Swarm e Compose che collaborano in un sistema unificato.


Cent OS
  1. Quali caratteri predefiniti vengono utilizzati?

  2. Quali differenze ci sono tra le varie versioni di Emacs disponibili?

  3. Cosa sono i contatti?

  4. Cosa sono le pagine sporche in Linux

  5. Cosa sono build-essential e build-dep?

Cassandra vs MongoDB - Quali sono le differenze?

Terraform vs Kubernetes:quali sono le differenze

Cos'è Istio? - Architettura, caratteristiche, vantaggi e sfide

Cosa sono gli inode in Linux?

Che cos'è:Framework Javascript:un'introduzione

Cosa sono gli account cPanel?