Pubblicato: 4 Dicembre 2021  -  Ultimo aggiornamento: 24 Novembre 2021

Service mesh: l’infrastruttura che facilita le comunicazioni

Service mesh: l’infrastruttura che facilita le comunicazioni

La service mesh è una soluzione ideata per facilitare le comunicazioni tra servizi mantenendo sicurezza e controllo.
Una risorsa emergente con cui affrontare la trasformazione digitale e gestire i microservizi implementati nel Cloud.

Vediamo quindi come funziona e quali vantaggi porta al sistema e all’utente.

Cos’è una service mesh?

La service mesh è un livello di infrastruttura che, in un’architettura software, gestisce e facilita le comunicazioni che intercorrono tra servizi e applicazioni, grazie all’uso di API.

Nello specifico monitora come le differenti componenti di un’applicazione condividono i dati, documentando la qualità dell’interazione e ottimizzandola.
L’obiettivo è evitare momenti di inattività e mettere in sicurezza l’intera applicazione.
Ogni giorno si sviluppano infatti nuove applicazioni ed è essenziale tracciarne le comunicazioni per prevenire i rischi e garantire affidabilità.

Una service mesh serve quindi negli ambienti distribuiti di microservizi, dove i servizi, inseriti in container, compongono una rete svolgendo funzioni specifiche.
Questi servizi sono modificabili senza intervenire sull’intera applicazione e si possono scalare senza prevedere un upgrade dell’intero sistema.

La difficoltà è nella comunicazione tra le componenti – dato che i microservizi possono essere anche centinaia – ed è proprio per questo che entra in gioco la service mesh, coordinando in sicurezza l’intera applicazione.

Quali sono i principali vantaggi

Perché scegliere di ricorrere a una service mesh conviene?

Come abbiamo visto i vantaggi che porta sono concreti e numerosi, ma proviamo ad analizzare tutti i benefici più nel dettaglio:

  • si riducono considerevolmente i tempi di inattività dell’applicazione, reindirizzando le richieste e allontanandole dai servizi che non funzionano
  • i servizi sono costantemente monitorati e se ne può controllare la disponibilità grazie a circuit breaker e health check
  • se si riscontrano problemi o anomalie nei microservizi, oppure se l’endpoint viola i parametri di prestazione, si possono interrompere le connessioni
  • nell’ambiente di runtime le comunicazioni sono ottimizzate
  • si esegue un monitoraggio operativo che permette di conoscere in qualsiasi momento lo stato di salute del sistema, basandosi anche sugli output ricevuti
  • si possono attivare dei servizi di autorizzazione, autenticazione e crittografia che convalidino le richieste in arrivo e garantiscano la sicurezza dell’intero canale comunicativo
  • l’utente ha accesso a un’interfaccia che gestisce e configura funzionalità come i parametri di prestazioni o i criteri di sicurezza e routing
  • è più facile individuare eventuali criticità
  • il carico di lavoro è distribuito uniformemente e si possono dirigere routing e connessione delle richieste di servizio alle istanze corrette
  • gli sviluppatori e il personale tecnico interno non deve perdere tempo a connettere i servizi, ma può concentrarsi su altre attività che incrementino il valore aziendale.

Come funziona una service mesh

Ciò che contraddistingue una service mesh è che, nonostante non aggiunga nuove funzionalità nell’ambiente di runtime,riesce a estrapolare dai servizi le logiche che regolano la comunicazione service to service astraendole in un livello dell’infrastruttura.

Per questo la service mesh è integrata in un’applicazione come una serie di proxy di rete, ossia un intermediario tra le richieste da parte dei client e il server che riceve gli input.

Nello specifico, quindi, come funziona una service mesh?
In questo tipo di infrastruttura sono presenti dei speciali proxy, chiamati sidecar, che permettono di indirizzare le richieste tra i microservizi.
Sono così chiamati perché al posto di muoversi all’interno di un servizio, si muovono al loro fianco e insieme formano la rete di mesh.
I servizi non comunicano direttamente l’un l’altro effettuando richieste, ma tutto passa attraverso il livello: i servizi sono accoppiati liberamente e la rete si assume il controllo delle comunicazioni.

La service mesh, inoltre, facilita la gestione del traffico e permette la comunicazione tra i servizi senza dover ricorrere a logiche di codifica che rallenterebbero il lavoro degli sviluppatori e renderebbero più difficoltoso diagnosticare eventuali problemi.

In una service mesh sono presenti dei speciali proxy chiamati sidecar che si muovono a fianco dei servizi creando la rete.

L’architettura e i componenti

Una service mesh, per funzionare, è solitamente costituita da due parti: il piano dati, o data plane, e il piano di controllo, o control plane.

Analizziamo nel dettaglio le caratteristiche:

  • data plane: è composto da proxy intelligenti distribuiti come sidecar che mediano, gestiscono e controllano tutte le comunicazioni di rete tra i microservizi, segnalando la telemetria su tutto il traffico mesh e monitorando il traffico in entrata e in uscita da ogni componente.
    Questi proxy sono inseriti a livello infrastrutturale nel pod dove si trovano le applicazioni in esecuzione e vengono considerati come oggetti distinti. Condividono infatti lo stesso IP e lo stesso namespace, ma rimangono entità isolate a livello di processo con un file system separato.
    In questo modo il proxy può sviluppare il proprio ciclo di vita autonomamente, nonostante si crei e distribuisca l’applicazione.
  • control plane: è un’interfaccia a disposizione dell’utente, ma può essere anche un’API, con cui gestire e configurare i proxy per indirizzare il traffico.
    Ha il compito di fornire i criteri necessari per raccogliere le informazioni e applicare determinate funzionalità.

Service mesh e microservizi, le differenze

In conclusione, in cosa una service mesh differisce dai microservizi?

Innanzitutto è utile spiegare che un’architettura a microservizi consente a programmatori e sviluppatori di intervenire sui singoli servizi, apportando delle modifiche senza dover redistribuire l’applicazione nella sua interezza.
I microservizi comunicano tra di loro ma sono completamente indipendenti, per questo se un singolo servizio non funziona non compromette il funzionamento del resto dell’app.
Ciò che contraddistingue questa infrastruttura dagli altri tipi di architetture, è che il team di sviluppo, nel creare i singoli microservizi, può scegliere quali strumenti e linguaggi di codifica è più opportuno usare.

La service mesh, invece, è ciò che permette il funzionamento ottimale di questa architettura a microservizi.
L’infrastruttura può infatti funzionare e comunicare da sola, ma se le comunicazioni diventano numerose e complesse allora la service mesh diventa una risorsa necessaria.
Una service mesh, inoltre, permette di includere un alto numero di piccoli servizi funzionali nelle applicazioni Cloud native integrate in architetture a microservizi.