Når man arbeider med mikrotjenester, er applikasjonene sammensatt av en rekke små, uavhengige tjenester som må samarbeide for å fungere som en helhet. Disse mikrotjenestene kommuniserer ofte direkte med hverandre, noe som kan føre til ineffektivitet og feil. Det er her et servicenettverk (service mesh) kommer inn som en nyttig løsning.
Hva er et servicenettverk?
Et servicenettverk kan beskrives som en metode for å styre datautvekslingen mellom de ulike mikrotjenestene i en applikasjon. Dette innebærer bruk av programvare som legger til rette for kommunikasjon mellom mikrotjenestene, inkludert:
- Identifikasjon av applikasjoner
- Lastbalansering
- Autentisering
- Kryptering
Et nettverk av sammenkoblede mikrotjenester opprettes ved hjelp av parallelle forbindelser som går via deres proxyer. Dette nettverket er integrert i et datasenternettverksadministrasjonssystem på et høyere nivå. Dette gjør det enklere å optimalisere kommunikasjonen uten å oppleve nedetid under utviklingen av applikasjonen. I praksis er det slik at hver applikasjonstjeneste er avhengig av andre tjenester for å kunne dekke brukernes behov.
For eksempel, i en nettbutikk, vil brukeren sjekke om en vare er tilgjengelig før et kjøp kan gjennomføres. Dette krever kommunikasjon mellom tjenesten som viser produktinformasjon og databasen, samt med brukerens handlekurv. I tillegg kan butikken tilby en funksjon for produktanbefalinger. Denne funksjonen må kommunisere med en database med produktkategorier, men også med lagerdatabasen, som igjen kommuniserer med produktsiden. Dette illustrerer hvordan et system består av flere tjenester som samarbeider.
Moderne applikasjoner er ofte bygget opp som et nettverk av tjenester, hvor hver tjeneste utfører en bestemt forretningsfunksjon.
Hvordan fungerer et servicenettverk, og hva er fordelene?
Det er viktig å understreke at et servicenettverk ikke introduserer nye funksjoner i arbeidsmiljøet til en applikasjon. Nettverket etableres i form av en gruppe nettverksproxyer, som er et kjent konsept i IT-sektoren.
Mange av oss bruker proxyer når vi besøker nettsider fra en arbeidsmaskin. Proxyer som ligger på infrastrukturlaget for mikrotjenester, bidrar til å rute forespørsler mellom dem. Det er her begrepet «sidevogn» kommer inn, og beskriver proxyene som befinner seg i et servicenettverk. Disse proxyene kjører ved siden av tjenestene, og ikke inni dem. Sidevogn-proxyene til de ulike tjenestene etablerer et nettverk.
Uten et servicenettverk må utviklere programmere hver mikrotjeneste i henhold til de spesifikke kommunikasjonsstrategiene mellom de ulike tjenestene. Siden kommunikasjonslogikken er skjult i hver tjeneste, kan det være utfordrende for utviklerne å nå selskapets overordnede mål. I tillegg oppstår det problemer ved feilsøking av kommunikasjonsproblemer. Et servicenettverk tilbyr derimot løsninger på mange av disse utfordringene som er forbundet med å styre kommunikasjon mellom tjenester.
Med et servicenettverk kan kommunikasjonen automatiseres, siden nødvendig data og innsikt er lett tilgjengelig i den eksterne infrastrukturen til nettverket. Dette gjør det enklere å identifisere og løse eventuelle problemer og feil. Dette frigjør også IT-avdelinger til å fokusere på andre, mer verdiskapende oppgaver.
Takket være kommunikasjonsabstraksjon kan feilaktige tjenester også omgås automatisk, uten at dette går ut over datautvekslingen for fungerende deler av applikasjonen. De lett tilgjengelige dataene fra servicenettverket kan også analyseres for å forbedre ytelsen og funksjonaliteten til applikasjonen.
Nå som vi har sett på hvordan et servicenettverk fungerer, la oss se på noen av de beste verktøyene for administrasjon av servicenettverk:
Meshery
Meshery er et verktøy for administrasjon av servicenettverk som lar deg kjøre forskjellige servicenettverksløsninger. Det kan distribueres på Kubernetes og Docker. Meshery tilbyr et brukergrensesnitt og CLI for å sette standarden for alle de store servicenettverksløsningene, inkludert Linkerd og Istio. Meshery kan distribueres direkte på klyngen eller lokalt.
Amazon App Mesh
AWS App Mesh er en nettverkstjeneste for Amazons Kubernetes-plattform (EKS). Den gir administrasjon på applikasjonsnivå ved hjelp av Envoy sidecar-proxy for inn- og utgående trafikk, og benytter kretsbrytere for å tilby overvåkningsdata gjennom AWS X-Ray. AWS App Mesh kan også brukes med andre tjenester som Amazon EC2 og AWS Fargate.
Linkerd
Linkerd er en åpen kildekode-nettverksbehandler som bruker en spesialbygd proxy basert på Rust for å håndtere mikrotjenester. Grafana er forhåndsinstallert for å gi overvåkningsdata. Linkerd skiller seg fra andre åpen kildekode-administratorer ved at den tilbyr et grafisk brukergrensesnitt og støtter ikke bare Prometheus, men også ingress-kontrollere som Traefik, Kong og Gloo. Linkerd støtter også automatiske distribusjonsoppgraderinger på tvers av klynger.
Istio
Istio er et åpen kildekode-servicenettverk som bruker Envoy-proxy for å administrere mikrotjenester. Istio tilbyr en rekke funksjoner som lastbalansering, policyoppretting, trafikkruting, tidsavbrudd, kretsbryting, trafikkskifting og gjenforsøk. Istio tilbyr også distribuert sporingsfunksjonalitet på tvers av containere eller maskiner uten å kreve installasjon av ekstra programvare.
Kuma
Kuma er et servicenettverk utviklet av Kong, som brukes til å utvide bruken av eksisterende tjenester gjennom Envoy-proxy. Kuma støtter forskjellige mikrotjenester og gir forbedret sikkerhet og overvåking for nettverkene. Det leveres med en rekke forhåndsdefinerte retningslinjer for ruting, mTLS, trafikkstyring og ulike sikkerhetsfunksjoner. Med Kuma kan du enkelt kontrollere forskjellige isolerte nettverk gjennom ett enkelt kontroll- og dataplan.
Nginx Mesh
Nginx er et servicenettverk for Kubernetes som krypterer trafikk mellom containere ved hjelp av dataplanet som drives av Nginx Plus. Nginx bruker hastighetsbegrensning og strømbrytere for å styre trafikk mellom tjenester, og leveres med et Grafana-dashbord for å overvåke servicenettverkets beregninger.
Consul
Consul fra HashiCorp er et servicenettverk som tilbyr et innebygd proxy-lag og støtter også Envoy sidecar-proxy. Det tilbyr banebasert ruting, trafikkskifting og lastbalansering. Consul er integrert med HashiCorp Vault, og støtter mTLS. Det kan integreres med Prometheus og Grafana for å overvåke overvåkningsdata.
Gloo Mesh
Gloo Mesh er et servicenettverk bygget på toppen av Istio-nettverket, og bruker Envoy-proxy som lar deg implementere en Zero Trust-sikkerhetsmodell. Gloo støtter multi-tenancy Kubernetes, virtuelle maskiner og andre mikrotjenester. Det er både CI/CD- og GitOps-vennlig, noe som forenkler distribusjonen.
Avsluttende ord
Service mesh løser utfordringer knyttet til kommunikasjon mellom ulike mikrotjenester og gir en rekke sikkerhetsfordeler. Med et stort antall ulike servicenettverksløsninger tilgjengelig, er det viktig å velge en tjeneste som passer best til dine spesifikke behov og som er enkel å administrere.