Hva er Microservices?

Mange av vennene mine som jobber som utviklere har ofte slengt rundt seg med begrepet «microservices». Det var litt av et buzzword for noen år siden – og selv om det brukes sjeldnere i dag, er det fortsatt et viktig konsept å forstå.

Hva er microservices?

Microservices er en måte å utvikle programvare på hvor man deler opp en stor applikasjon i mange små, selvstendige tjenester. Hver av disse har ansvar for én tydelig funksjon, og de kan utvikles, oppdateres og skaleres uavhengig av hverandre.

Nøkkelpunkter som kjennetegner microservices:

  • Modulær arkitektur: Applikasjonen deles i mindre deler som snakker sammen via API-er.
  • Uavhengighet: Én tjeneste kan oppdateres uten å velte resten av systemet.
  • Teknologifrihet: Man kan bruke ulike språk og rammeverk for ulike tjenester.
  • Desentralisering: Hver tjeneste håndterer sitt eget ansvar, enten det er logikk eller datalagring.
  • Skalerbarhet: Bare den delen som faktisk trenger mer kraft, skaleres opp.

Et eksempel i praksis

Tenk deg en netthandelsplattform. Den består gjerne av en produktkatalog, en handlekurv, et betalingssystem og en innloggingsløsning. I en monolittisk arkitektur ligger alt dette samlet i én stor applikasjon. I en microservice-arkitektur derimot, er hver funksjon sin egen lille tjeneste som kan fungere selvstendig.

Fordeler med microservices:

  • Fleksibilitet og raskere endringer: Hver tjeneste kan oppdateres og forbedres uten at hele systemet må endres, noe som gjør det enklere å teste nye funksjoner eller tilpasse seg brukernes behov.
  • Bedre skalerbarhet: Man kan øke kapasiteten der det faktisk trengs – for eksempel bare på betalingssystemet – uten å måtte skalere hele applikasjonen.
  • Mindre risiko ved feil: Hvis én tjeneste krasjer, påvirker det sjelden hele systemet. Feil blir enklere å isolere, og oppetiden blir høyere.
  • Team kan jobbe parallelt: Ulike team kan utvikle og drifte sine egne tjenester uavhengig, uten å tråkke hverandre på tærne – noe som gir raskere fremdrift og bedre eierskap.

Ulemper med microservices:

  • Høyere kompleksitet: Flere små tjenester betyr flere bevegelige deler. Arkitekturen blir mer avansert å planlegge, drifte og feilsøke enn et enkelt, samlet system.
  • Kommunikasjonsutfordringer mellom tjenester: Når alt snakker sammen via API-er, kan forsinkelser, nettverksfeil eller feilformaterte meldinger skape problemer som er vanskeligere å spore.
  • Vanskeligere distribusjon og koordinering: Oppdateringer må rulles ut på riktig måte og til riktig tid. Jo flere tjenester man har, desto mer krevende blir det å holde alt synkronisert og stabilt.

Er microservices fortsatt relevant?

For noen år siden var microservices et av de mest brukte moteordene i IT-bransjen. I dag hører vi det sjeldnere – men det betyr ikke at prinsippet er borte. Snarere tvert imot:

  • Fra hype til standard: Microservices har gått fra å være «det nye store» til å bli en naturlig del av mange utviklingsprosjekter. Man snakker mindre om selve ordet, og mer om hvordan man faktisk bygger.
  • Andre buzzwords har tatt plassen: Begreper som Kubernetes, serverless og event-driven architecture har overtatt oppmerksomheten – ofte i kombinasjon med microservices.
  • Lært på den harde måten: Mange oppdaget at microservices kan gi unødvendig kompleksitet. I stedet for å splitte opp alt, ser vi nå en mer pragmatisk tilnærming, der man kombinerer microservices med enklere arkitekturer som modular monolith.

Kort sagt: Microservices er ikke dødt – det er bare blitt mer hverdagslig. Det brukes fortsatt der fleksibilitet, skalerbarhet og uavhengighet virkelig gir verdi.

Når gir det mening?

Microservices passer best i store, komplekse applikasjoner hvor kravene endrer seg ofte, eller der man har behov for å utvikle og drifte deler av systemet uavhengig. For små prosjekter kan en monolittisk arkitektur fortsatt være det enkleste og mest effektive valget.

Kort sagt: microservices gjør store systemer mer fleksible og skalerbare, men krever mer koordinering og infrastruktur. For små prosjekter er det ofte mer styr enn gevinst.