Mikrotjenester - Driftsstøtte (IM-ITK vg2) - NDLA

Hopp til innhold
Fagartikkel

Mikrotjenester

Mikrotjenester (microservices) er en tjenestearkitektur der deltjenestene som inngår i større systemer, kjører i separate konteinere og samarbeider via nettverk og API-er. Strukturen gir stor grad av fleksibilitet og styring, men den kan være uoversiktlig og ta tid å bli vant til å bruke.

Monolittisk struktur

Tidligere var det vanlig at en fysisk servermaskin kjørte alle enkelttjenestene som trengtes for å drifte et bestemt system. Dette kaller vi i dag en monolittisk struktur (mono betyr "alene", "eneste" eller "ene").

Tenk deg ei nettside, brukeren av nettsida opplever det som et sammenhengende system. I virkeligheten er det satt sammen av ei rekke mindre tjenester, for eksempel webserverprogram, database, PHP-skripting, bildetjeneste, forumtjeneste, nettbutikktjeneste med flere. Alle tjenestene er nødvendige for at nettsida skal fungere, og i et monolittisk oppsett kjører alle på den samme fysiske (eller virtuelle) maskinen.

Monolittiske oppsett er oversiktlige, men upraktiske ved behov for skalering. Kritiske feil hos en tjeneste kan forstyrre andre tjenester, og maskinvarefeil kan ta ned hele systemet. Dette gir lav feiltoleranse.

Mikrotjenestestruktur

Med innføring av serverkonteinere har en ny tjenestestruktur blitt vanlig, nemlig mikrotjenester. Mikrotjenester fungerer ved at enkelttjenestene i et system plasseres i hver sine konteinere. Hver konteiner kan bruke forskjellige rammeverk og programmeringsspråk, noe som øker fleksibiliteten for utviklere. Konteinerne konfigureres til å arbeide sammen over nettverk med forskjellige API-er. Fordi konteinerne kun kommuniserer gjennom oppsatte kanaler, økes sikkerheten (også når mikrotjenester settes opp som en enkelt fysisk server).

De største fordelene med mikrotjenester oppstår når vi bruker systemet på kryss av flere servere. Hver konteiner inneholder nødvendige ressurser for å drifte sin tjeneste. De kan dermed enkelt flyttes mellom fysiske servere og flere kopier (instances) kan settes opp til å kjøre samtidig. Dette gjør at tjenestene som har størst belastning til enhver tid kan få mer ressurser fra flere servere. Dette åpner for en effektiv skalering.

En konteinerkontroller (container orchestration system), som for eksempel Kubernetes, brukes ofte for å styre mikrotjenestesystemet. Kontrolleren holder oversikt over tilgjengelige serverressurser og bestemmer hvilke konteinere som skal kjøre hvor, og hvor mange kopier av hver konteiner som skal kjøres.

Mikrotjenester er ideelle for bruk i skytjenester da skyleverandørene kan ha tilnærmet ubegrenset serverkapasitet og tar betalt etter mengden ressurser som brukes til enhver tid.

Det er noen ulemper med mikrotjenester også. Siden oppsettene har et ekstra abstraksjonsnivå med virtualisering, er de mer kompliserte og potensielt mer uoversiktlige enn sine monolittiske søsken. Dette gjør også at kravet til kompetanse for å sette opp slike systemer er høyere.

I YouTube-videoen med Sai Vennam fra IBM kan du lære litt mer om mikrotjenester og konteinerkontrollere (container orchestration systems).

Relatert innhold

Skrevet av Tron Bårdgård.
Sist faglig oppdatert 10.05.2021