Wat is een servicemesh? Waarom zijn ze belangrijk?

0
205
Quanrong Huang/Shutterstock.com< /figuur>

Een servicemesh is een infrastructuurlaag die de communicatie tussen applicatiecomponenten vergemakkelijkt. Meshes bieden functionaliteit, waaronder servicedetectie, taakverdeling en observatie.

Service meshes worden over het algemeen gevonden in gedistribueerde systemen die zijn samengesteld uit microservices. De mesh biedt een manier voor verschillende services om gegevens uit te wisselen. Het verwerkt alleen intern verkeer en geeft het door aan een API-gateway of edge-node om aan gebruikers te dienen. Populaire meshes zijn onder meer Linkerd en Istio.

Wat zit er in de Mesh?

Het basisconcept van een servicemesh is vrij rechtdoorzee. De laag kapselt netwerkproxy's in die verkeer naar afzonderlijke services leiden. Een controlelaag beheert netwerkoproepen tussen de services en orkestreert het gebruik van de proxy's.

Het fundamentele doel van de mesh is om het voor services gemakkelijker en betrouwbaarder te maken om te communiceren. Laten we een eenvoudig paar services nemen: een API en een afzonderlijk authenticatiesysteem. De API moet communiceren met de authenticatieservice wanneer deze verzoeken ontvangt.

Met een servicemesh krijgt u betrouwbare communicatie tussen services met behulp van bekende identifiers. Uw API kan netwerkaanroepen naar de hostnaam van de auth-service sturen en er zeker van zijn dat het nog steeds correct wordt opgelost, zelfs als de auth-service naar een andere datacenterlocatie wordt verplaatst. De service mesh zorgt ervoor dat verzoeken transparant naar de juiste service worden gerouteerd.

Advertentie

Het gebruik van een service mesh maakt het gemakkelijker om services te verplaatsen. Hardgecodeerde netwerkcommunicatielogica kan snel beperkend worden. Een mesh geeft je meer flexibiliteit om je workloads in de toekomst te verdelen.

Hoe worden service meshes geïmplementeerd?

De meeste moderne service meshes bestaan ​​uit twee componenten: een besturingsvlak en een gegevensvlak. De kernfunctionaliteit behoort tot het datavlak, dat zich bezighoudt met de gegevens die door het systeem stromen.

Elk verzoek aan de mesh wordt verwerkt door het datavlak. Het zal de juiste te gebruiken service ontdekken, logacties uitvoeren en voorwaardelijk gedrag inschakelen om verkeer te filteren en om te leiden.

Services maken meestal deel uit van uw toepassing, zodat ze routeringslogica kunnen bevatten. Het datavlak inspecteert configuratieregels om het uiteindelijke eindpunt te bepalen op basis van HTTP-headers, verzoekparameters en andere waarden van het verzoek.

Terwijl het datavlak bruist van activiteit, is het controlevlak relatief eenvoudiger. Het houdt toezicht op de proxy's in het gegevensvlak en biedt een API zodat u ermee kunt communiceren.

Dit diagram van het Istio-project illustreert hoe de componenten in elkaar passen. Elke service krijgt zijn eigen proxy. Inkomend verkeer stroomt door de proxy's. Ze kunnen communiceren met het controlevlak om andere diensten te ontdekken. Proxy's worden gewoonlijk 'zijspannen' genoemd. zoals ze worden uitgevoerd naast de service die ze vertegenwoordigen.

Andere Service Mesh-functies

Service meshes bieden meestal extra functionaliteit die verder gaat dan basisservicedetectie. Meestal vindt u taakverdeling, authenticatie op verzoekniveau en ondersteuning voor gegevensversleuteling. Versleuteld verkeer kan door de mesh gaan, maar wordt in gedecodeerde vorm aan uw services overhandigd.

Advertentie

Uw mesh biedt meestal beveiligingen tegen tijdelijke netwerkstoringen. Automatische nieuwe pogingen, failovers en stroomonderbrekers maken de communicatie tussen services veerkrachtiger. De eindgebruiker heeft minder kans op een ernstige foutstatus. Deze belangrijke mogelijkheden zouden moeilijk en kostbaar zijn om met de hand te implementeren.

Evenzo bevatten servicenetwerken prestatie-optimalisaties die helpen de overheadkosten te minimaliseren. De mesh kan verbindingen met services behouden voor later hergebruik, waardoor de latentie bij het volgende verzoek wordt verminderd.

Mesh-lagen bieden ook beveiligingsbescherming. U kunt toegangsbeheerbeleid op mesh-niveau implementeren dat verkeer weigert voordat het uw services bereikt. Als u een globale API-snelheidsbegrenzer wilt, zal deze worden toegepast op al uw services als u deze onderdeel maakt van de mesh-configuratie – heden en toekomst.

Hoe zit het met de nadelen?

De grootste uitdaging rond servicenetwerken is de extra complexiteit die ze met zich meebrengen. Hoewel ze ernaar streven microservicenetwerken te vereenvoudigen, introduceren ze ook een eigen leercurve.

Ontwikkelaars zullen kennis moeten maken met een andere laag bovenop hun bestaande services. Mesh-terminologieën, zoals proxy's en sidecars, vormen een aanvulling op de toch al lange lijst met Kubernetes-bronnen die worden onderhouden door operationele teams.

Advertentie

Hoewel meshes hun eigen prestatieverbeteringen toevoegen, kunnen sommige implementaties een algemene vermindering van de netwerkdoorvoer opmerken. De mesh voegt een nieuwe laag toe die verzoeken moeten passeren, wat invloed heeft op de algehele efficiëntie. Dit valt normaal gesproken het meest op als u uw mesh op voorraad heeft met veel routeringsregels.

Wanneer moet u een servicemesh gebruiken?

Service meshes werken het beste als je volledig toegewijd bent aan containers en microservices. Ze zijn ontworpen om de uitdagingen van grootschalige gedistribueerde systemen in productie op te lossen. Kleinere implementaties kunnen nog steeds profiteren van een mesh, maar kunnen ook gebruik maken van eenvoudigere netwerkbenaderingen, zoals Kubernetes’ ingebouwde netwerkbronnen.

Meshes zijn het handigst wanneer u regelmatig nieuwe services lanceert of deze over servers distribueert. Met een mesh kunnen ontwikkelaars zich concentreren op functionaliteit, in plaats van de verveling van het met elkaar verbinden van verschillende services. Naarmate u een steeds groter wordende servicevloot inzet, besteedt u meer tijd aan het afhandelen van service-naar-service-communicatie. Een mesh automatiseert het grootste deel van deze configuratie, zodat u niet hoeft na te denken over het ontdekken en routeren van services.

De aanpak helpt uw ​​systeem ook beter waarneembaar te worden. Alle verzoeken stromen door de mesh, zodat u logboekregistratie en tracering op infrastructuurniveau kunt implementeren. Dit biedt een eenvoudigere weg naar diagnose en oplossing van routeringsproblemen. Zonder mesh heb je misschien tientallen services die allemaal informatie rechtstreeks aan elkaar doorgeven. Dit maakt het moeilijk om de oorzaak van een probleem te vinden.

De meeste populaire servicenetwerken zijn eenvoudig in te stellen. Istio en Linkerd hebben beide goed gedocumenteerde handleidingen om u te helpen een mesh in uw Kubernetes-cluster te implementeren. Het is de moeite waard om te experimenteren, zelfs als u niet zeker weet of uw systeem nog op mesh-schaal werkt. Te lang vasthouden aan directe servicecommunicatie kan uw vermogen om nieuwe services op een tijdige en betrouwbare manier te lanceren, beperken.