Microservices-arkitektur: Fordeler, ulemper & eksempler (Netflix, Amazon, Uber)

Mikrotjenestearkitektur: En detaljert gjennomgang

Mikrotjenestearkitektur er en smidig, skalerbar og modulær tilnærming til utvikling av programvareapplikasjoner. Den går ut på å dele opp store applikasjoner i mindre, uavhengige komponenter som utfører spesifikke oppgaver. Denne strukturen gir et rammeverk for å lage, oppdatere, teste, distribuere og vedlikeholde hver tjeneste separat. På den måten kan utviklere konstruere applikasjoner som en samling av autonome tjenester som samhandler med hverandre.

Moderne skybaserte applikasjoner er ofte bygget på denne måten ved hjelp av containere. En container inneholder all kode, biblioteker, kjørbare filer og andre ressurser som en mikrotjeneste trenger for å fungere. Dette gjør at utviklere kan skape applikasjoner uten å bekymre seg for avhengigheter mellom ulike komponenter.

Kilde: microsoft.com

Mange store selskaper som Netflix, Amazon, Uber og eBay har gått bort fra tradisjonelle monolittiske applikasjoner til fordel for mikrotjenester. Dette har resultert i mer brukervennlige applikasjoner og pålitelige tjenester med forbedret ytelse.

Oversikt

I takt med at bedrifter søker etter metoder for å være konkurransedyktige i et dynamisk og komplekst marked, ser de etter måter å øke effektiviteten på. Programvareutviklere tar i bruk nye metoder for å bygge og vedlikeholde applikasjoner, implementere nye funksjoner og mye mer.

Som et resultat av dette, skifter mange fra monolittiske til mikrotjenestebaserte arkitekturer. Dette gjør det mulig å utvikle applikasjoner og nye funksjoner raskere og mer pålitelig. Utviklere og bedrifter kan også oppdatere applikasjoner regelmessig ved hjelp av mindre, tverrfaglige og uavhengige team.

Mikrotjenestearkitekturen muliggjør kontinuerlig utvikling og levering av programvare. Hvert team kan implementere små endringer og teste applikasjonen og nye funksjoner raskere ved hjelp av en automatisert distribusjonspipeline.

Kilde: aws.amazon.com

Denne arkitekturen løser mange av utfordringene og begrensningene som finnes i monolittiske arkitekturer. Ved å dele opp store og komplekse applikasjoner i mindre enheter, blir det enklere å utvikle store og komplekse applikasjoner som en samling av uavhengige moduler.

Hvordan fungerer mikrotjenestearkitekturen?

Mikrotjenestearkitekturen er en stil der utviklere kan bygge applikasjoner som en samling av løst koblede og uavhengig distribuerbare tjenester. Hver tjeneste, som eies av et spesialisert team, er selvstendig og fokuserer på en spesifikk forretningsfunksjon.

Team kan utvikle, distribuere, endre, teste og vedlikeholde hver enhet uavhengig uten å påvirke andre tjenester. I motsetning til en monolittisk applikasjon, hvor alle tjenester er samlet i én enhet uten klare grenser, deler mikrotjenestearkitekturen hver forretningsfunksjonalitet i en egen, uavhengig enhet.

Hver mikrotjeneste konsentrerer seg om en bestemt oppgave, som for eksempel logging, fakturering, søk eller meldinger. Kombinasjonen av flere mikrotjenester resulterer i en komplett applikasjon med mange funksjoner. Noen mikrotjenester kan utføre en bestemt oppgave alene, mens andre samarbeider for å løse mer komplekse oppgaver.

Denne arkitekturen gir utviklere muligheten til å bryte ned store applikasjoner basert på forretningsmessige eller funksjonelle krav (vertikalt). Dette fører til mindre og uavhengige enheter som kan distribueres separat.

Noen operasjoner kan utføres av en enkelt mikrotjeneste. Mer komplekse oppgaver kan imidlertid fordeles på flere mikrotjenester. I slike tilfeller kommuniserer enhetene med hverandre via lette synkrone eller asynkrone nettverksanrop, som REST, gRPC eller meldingstjenester.

Klienter kommuniserer ikke direkte med mikrotjenestene, men bruker i stedet API-gatewayer som dirigerer forespørsler til den riktige mikrotjenesten.

Kjennetegn ved en mikrotjenestearkitektur

Hver mikrotjeneste fungerer som en separat tjeneste med sin egen logikk og avhengigheter. Team kan endre, teste, oppdatere, distribuere og skalere mikrotjenesten uten å påvirke de andre tjenestene i samme applikasjon. Noen kjennetegn ved en mikrotjenestearkitektur er:

  • Applikasjonen består av flere separate prosesser som kan distribueres uavhengig av hverandre. Systemet kan kalle flere mikrotjenester for å betjene en enkelt brukeroppgave.
  • Arkitekturen støtter finjustert og horisontal skalering.
  • Mikrotjenestene har ytre grenser og kommuniserer ikke internt. De bruker lette nettverksanrop som RPC og meldinger for kommunikasjon.
  • Hver enhet er spesialisert og enkel, og håndterer en bestemt forretningsfunksjon eller problemstilling. Utviklingsteam har ofte spisskompetanse innenfor sin del.
  • Etter hvert som behovet for nye funksjoner øker, kan utviklere legge til mer kode. Hvis applikasjonen blir for kompleks, kan den deles opp i enda flere, uavhengige tjenester.

Monolittisk vs. Mikrotjenester arkitektur

I en monolittisk arkitektur, hvis etterspørselen etter én funksjon øker, må utviklerne skalere hele applikasjonen. Å legge til nye funksjoner eller endre en eksisterende applikasjon er komplekst, tidkrevende og dyrt. En feil i én komponent kan påvirke hele applikasjonen, spesielt hvis komponentene er avhengige av hverandre.

Noen av de største ulempene med en monolittisk applikasjon inkluderer:

  • Lav pålitelighet: En feil i én komponent kan føre til at hele applikasjonen stopper å fungere.
  • Ikke fleksibel.
  • Vanskelig å skalere.
  • Langsom utvikling, siden en funksjon må være ferdig før man kan begynne på den neste.
  • Ikke egnet for store applikasjoner på grunn av sin manglende fleksibilitet.

I en mikrotjenestearkitektur brukes separate, uavhengige komponenter for å bygge applikasjonen. Hver funksjon eller mikrotjeneste kjører som en uavhengig tjeneste, og man trenger ikke å oppgradere hele arkitekturen for å legge til eller endre en funksjon. Man bygger bare de nødvendige komponentene.

Kilde: ibm.com

Dette gjør det mulig å oppdatere, distribuere eller skalere hver tjeneste uavhengig basert på forretningsbehov. En feil i én komponent får mindre konsekvenser sammenlignet med en monolittisk applikasjon der alt kan svikte.

Fordeler med mikrotjenestearkitektur

De viktigste fordelene med en mikrotjenestearkitektur er:

#1. Enkel og fleksibel skalering av tjenester

Mikrotjenestearkitekturen lar utviklere skalere hver tjeneste uavhengig for å møte de spesifikke kravene til funksjonen. Teamene slipper å skalere hele applikasjonen, og kan i stedet fokusere på enheten med størst etterspørsel.

#2. Bedre motstandskraft

Siden mikrotjenester er uavhengige, vil et problem med én tjeneste kun føre til begrenset svikt, ikke en total feil. De andre tjenestene vil fortsette å fungere, og bare den berørte funksjonen vil bli utilgjengelig. I en monolittisk arkitektur vil et problem i en funksjon sannsynligvis føre til feil i hele applikasjonen.

#3. Gjenbrukbar kode

Utviklere kan bruke noen moduler for å utføre flere prosesser. En mikrotjeneste som utfører en bestemt oppgave kan også fungere som byggestein for en annen tjeneste. Man kan bygge tilleggsfunksjoner uten å skrive ny kode fra bunnen av.

Andre fordeler inkluderer:

  • Utnyttelse av containere, serverløs databehandling, DevOps og andre moderne utviklingsteknologier.
  • Rask utvikling og levering av tjenester.
  • Mulighet til å teste, feilsøke, oppdatere eller fjerne funksjoner uten å påvirke andre tjenester.
  • Kortere utviklingssykluser.
  • Mindre utviklingsteam.

Ulemper med mikrotjenestearkitektur

Mikrotjenestearkitektur gir fordeler som rask, hyppig og pålitelig utvikling av store applikasjoner, men den har også noen ulemper og begrensninger:

  • Store applikasjoner kan ha komplekse utfordringer med koding mellom mikrotjenestene.
  • Sikkerhetsadministrasjon kan være vanskelig, ettersom antall mikrotjenester øker. Dette kan resultere i et distribuert system med større angrepsflate og kompliserte tilgangsregler. Tradisjonelle sikkerhetsverktøy kan ha problemer med å sikre applikasjonen fullstendig, og gjøre den sårbar for angrep som DDoS og cross-site scripting.
  • Feilsøking av store applikasjoner blir vanskeligere ettersom de vokser. Mange moduler som kommuniserer med hverandre kan gi kommunikasjonskostnader på grunn av økt nettverkstrafikk.
  • Mange tjenester, prosesser, containere og databaser øker kompleksiteten.
  • Det kan være vanskelig å sikre transaksjonssikkerhet når applikasjonene blir større og mer komplekse.

Kilde: developers.redhat.com

Mikrotjenestearkitekturen lar mindre team utvikle uavhengige tjenester. Team må bruke ulike verktøy for å støtte rammeverket, automatisere oppgaver og øke hastigheten på utrulling av apper. Valg av verktøy avhenger av de spesifikke behovene og målene man ønsker å oppnå.

Vanlige verktøy inkluderer:

  • Operativsystemer som Linux og Windows
  • Programmeringsspråk – Spring Boot, Elixir, Java, Golang, Python, Node JS
  • API-administrasjon og testverktøy – API Fortress, Postman, Tyk
  • Meldingsverktøy – RabbitMQ, Amazon Simple Queue Service (SQS), Apache Kafka, Google Cloud Pub/Sub
  • Verktøysett – Seneca, fabric8, Google Cloud Functions
  • Arkitektoniske rammer – Kong, Goa, Helidon, Quarkus, Molecular
  • Orkestreringsverktøy – Dirigent, Kurbenetes, Azure Kurbenetes-tjenesten (AKS), Apache Mesos, Amazon Elastic Container Service.
  • Overvåkingsverktøy – Logstash, Graylog Elastic Stack, Middleware
  • Serverløse verktøy – Kubeless, Claudia, Apache Openwhisk

Mikrotjenester – Brukstilfeller

Mikrotjenester passer for mange bransjer og applikasjoner der ytelse og effektivitet er viktig. Her er noen vanlige brukstilfeller:

#1. Datastrømming

Ved behov for å strømme og behandle store mengder data, kan mikrotjenester bidra til å øke effektiviteten og ytelsen.

#2. Skalerbare nettapplikasjoner

Selv om noen nettapplikasjoner er monolittiske, kan bruk av mikrotjenestearkitektur forbedre skalerbarheten.

#3. Internet of Things (IoT)-applikasjoner

IoT-utviklere kan bruke mikrotjenester for å bygge applikasjoner. Dette lar dem lage små, lette og håndterbare applikasjoner som kan distribueres uavhengig.

ETL (Extract, Transform, Load) er en teknologi som trekker ut data, transformerer dem og laster dem inn i en annen datalagring. Mikrotjenester kan bidra til å øke skalerbarheten og ytelsen i slike prosesser.

Eksempler på selskaper som bruker mikrotjenestearkitektur

Noen store teknologiselskaper som har omfavnet mikrotjenester er:

Amazon

Amazon er en stor forkjemper for mikrotjenestearkitektur. Etter hvert som selskapet og kundebasen vokste, ble den monolittiske applikasjonen ustabil. De gikk over til mikrotjenester for å sikre enklere vedlikehold og tilføying av funksjoner.

Amazon tilbyr også en infrastruktur, Amazon Web Services (AWS), der bedrifter kan bygge og administrere mikrotjenester.

Uber

Uber startet med en monolittisk applikasjon. Etter hvert som selskapet vokste, ble det nødvendig å endre applikasjonen. Uber gikk over til en mikrotjenestebasert arkitektur for funksjoner som reise- og passasjeradministrasjon.

Kilde: uber.com

Netflix

Med mikrotjenester har Netflix klart å håndtere utfordringene med skalerbarhet som oppstod med økt kundebase. Netflix bruker over 500 skybaserte mikrotjenester for å behandle omtrent 2 milliarder forespørsler daglig. I tillegg til å forbedre påliteligheten og tilgjengeligheten, har mikrotjenestearkitekturen redusert kostnadene ved strømming.

Siste ord

Mikrotjenestearkitekturen gir flere fordeler sammenlignet med monolittiske systemer, inkludert raskere distribusjon, høy fleksibilitet og skalerbarhet, samt robusthet. Det har også noen ulemper og passer kanskje ikke for alle bruksområder. For eksempel kan det være lite kostnadseffektivt for mindre applikasjoner.

Ettersom applikasjonene vokser i størrelse og funksjoner, blir det vanskeligere og dyrere å bygge og teste enhetene, spesielt hvis de er distribuert på tvers av forskjellige skyer og nettverksmiljøer. Det er viktig å evaluere fordeler og ulemper før man velger å bruke teknologien.

Du kan se nærmere på de beste løsningene for API-administrasjon for små og mellomstore bedrifter.