Che cos'è una rete di servizi? Perché sono importanti?

0
155
Quanrong Huang/Shutterstock.com< /figure>

Una rete di servizi è un livello di infrastruttura che facilita la comunicazione tra i componenti dell'applicazione. Le mesh forniscono funzionalità tra cui rilevamento dei servizi, bilanciamento del carico e osservabilità.

Le mesh di servizi si trovano generalmente nei sistemi distribuiti composti da microservizi. La mesh fornisce un modo per diversi servizi di scambiare dati. Gestisce solo il traffico interno, passando a un gateway API o a un nodo edge da servire agli utenti. Le mesh popolari includono Linkerd e Istio.

Cosa c'è dentro la mesh?

Il concetto di base di una mesh di servizi è abbastanza semplice. Il livello incapsula i proxy di rete che instradano il traffico verso i singoli servizi. Un livello di controllo gestisce le chiamate di rete tra i servizi e orchestra l'uso dei proxy.

Lo scopo fondamentale della mesh è rendere più semplice e affidabile la comunicazione tra i servizi. Prendiamo una semplice coppia di servizi: un'API e un sistema di autenticazione separato. L'API dovrà interfacciarsi con il servizio di autenticazione quando riceve richieste.

Con una rete di servizi, ottieni una comunicazione affidabile tra i servizi utilizzando identificatori noti. La tua API potrebbe inviare chiamate di rete al nome host del servizio di autenticazione ed essere sicuro che si risolverà correttamente, anche se il servizio di autenticazione viene spostato in una posizione del centro dati diversa. La rete di servizi agisce per indirizzare in modo trasparente le richieste al servizio appropriato.

Pubblicità

L'utilizzo di una rete di servizi rende più facile spostare i servizi. La logica di comunicazione di rete hardcoded può diventare rapidamente vincolante. Una mesh ti offre una maggiore flessibilità per distribuire i tuoi carichi di lavoro in futuro.

Come vengono implementate le mesh dei servizi?

La maggior parte delle mesh di servizi moderne è formata da due componenti: un piano di controllo e un piano dati. La funzionalità principale appartiene al piano dati, che si occupa dei dati che fluiscono attraverso il sistema.

Ogni richiesta alla mesh verrà elaborata dal piano dati. Troverà il servizio corretto da utilizzare, eseguirà eventuali azioni di registrazione e abiliterà comportamenti condizionali per filtrare e reindirizzare il traffico.

I servizi di solito fanno parte della tua applicazione, quindi possono includere la logica di routing. Il piano dati ispeziona le regole di configurazione per determinare l'endpoint finale in base alle intestazioni HTTP, ai parametri della richiesta e ad altri valori della richiesta.

Mentre il piano dati è pieno di attività, il piano di controllo è relativamente più semplice. Supervisiona i proxy nel piano dati e fornisce un'API in modo da poter interagire con essi.

Questo diagramma del progetto Istio illustra come i componenti si incastrano. Ogni servizio ottiene il proprio proxy. Il traffico in ingresso scorre attraverso i proxy. Possono comunicare con il piano di controllo per scoprire altri servizi. I proxy sono comunemente chiamati “sidecar” poiché vengono eseguiti insieme al servizio che rappresentano.

Altre funzioni mesh dei servizi

Le mesh di servizi in genere forniscono funzionalità aggiuntive oltre al rilevamento dei servizi di base. In genere troverai bilanciamento del carico, autenticazione a livello di richiesta e supporto per la crittografia dei dati. Il traffico crittografato può passare attraverso il mesh ma viene consegnato ai tuoi servizi in forma decrittografata.

Pubblicità

Il tuo mesh di solito offre salvaguardie contro interruzioni transitorie della rete. I tentativi automatici, i failover e gli interruttori di circuito rendono la comunicazione tra i servizi più resiliente. È meno probabile che l'utente finale veda uno stato di errore grave. Queste importanti capacità sarebbero difficili e costose da implementare manualmente.

Allo stesso modo, le mesh di servizi incorporano ottimizzazioni delle prestazioni che aiutano a ridurre al minimo i costi generali. La mesh potrebbe mantenere le connessioni ai servizi per un successivo riutilizzo, riducendo la latenza alla richiesta successiva.

I livelli di mesh forniscono anche protezioni di sicurezza. Puoi implementare policy di controllo degli accessi a livello di mesh che rifiutano il traffico prima che raggiunga i tuoi servizi. Se desideri un limitatore di velocità API globale, rendendolo parte della configurazione mesh lo applicherà a tutti i tuoi servizi – presente e futuro.

E gli svantaggi?

La sfida più grande intorno alle mesh di servizi è la complessità aggiuntiva che comportano. Pur mirando a semplificare la rete di microservizi, introducono anche una propria curva di apprendimento.

Gli sviluppatori dovranno familiarizzare con un altro livello al di sopra dei servizi esistenti. Le terminologie mesh, come proxy e sidecar, si aggiungono al già lungo elenco di risorse Kubernetes gestito dai team operativi.

Pubblicità

Sebbene le mesh aggiungano i propri miglioramenti delle prestazioni, alcune implementazioni potrebbero notare una riduzione complessiva del throughput di rete. La mesh aggiunge un nuovo livello che le richieste devono attraversare, influendo sull'efficienza complessiva. Questo è normalmente più evidente se rifornisci la tua mesh con molte regole di routing.

Quando dovresti usare una rete di servizi?

Le mesh di servizi funzionano al meglio quando sei completamente impegnato in contenitori e microservizi. Sono progettati per risolvere le sfide dell'esecuzione di sistemi distribuiti su larga scala in produzione. Le distribuzioni più piccole potrebbero comunque beneficiare di una mesh, ma potrebbero anche utilizzare approcci di rete più semplici, come Kubernetes’ risorse di rete integrate.

Le mesh sono molto utili quando lanci frequentemente nuovi servizi o li distribuisci tra i server. Una mesh consente agli sviluppatori di concentrarsi sulla funzionalità, invece della noia di connettere diversi servizi insieme. Man mano che implementi una flotta di servizi in continua crescita, trascorrerai più tempo a gestire la comunicazione da servizio a servizio. Una mesh automatizza la maggior parte di questa configurazione in modo da non dover pensare all'individuazione e all'instradamento dei servizi.

L'approccio aiuta anche il tuo sistema a diventare più osservabile. Tutte le richieste fluiscono attraverso la mesh in modo da poter implementare la registrazione e la traccia a livello di infrastruttura. Ciò fornisce un percorso più semplice per la diagnosi e la risoluzione dei problemi di routing. Senza una mesh, potresti avere dozzine di servizi che trasmettono informazioni direttamente tra loro. Questo rende difficile trovare l'origine di un problema.

Le mesh di servizi più popolari sono facili da configurare. Sia Istio che Linkerd hanno guide introduttive ben documentate per aiutarti a distribuire una mesh nel tuo cluster Kubernetes. Vale la pena sperimentare anche se non sei sicuro che il tuo sistema sia ancora su scala mesh. Rimanere troppo a lungo con la comunicazione diretta del servizio potrebbe limitare la tua capacità di lanciare nuovi servizi in modo tempestivo e affidabile.