Gå til indhold
atlas

Microservices

Også kendt som: microservice-arkitektur

En måde at bygge et system på som mange små, selvstændige tjenester, der hver løser én opgave og taler sammen via et API.

Kladde - dette opslag er endnu ikke gennemgået.

Formelt

En designstil, hvor et system deles op i små tjenester med hver deres kode, data og egen takt for nye versioner, som kører som separate processer og kun arbejder sammen via kald over netværket.

Forklaret enkelt

Som en food court i stedet for ét stort køkken - hver bod laver én ting, kan lukke for reparation uden de andre, og kunderne bestiller fra flere på én gang.

I praksis

En kommunes borgerportal er delt op i separate tjenester til bookinger, betalinger og beskeder; betalingsteamet kan sende en rettelse ud om tirsdagen uden at røre ved eller genstarte resten.

Hvorfor det betyder noget

Små tjenester lader teams udvikle og skalere dele hver for sig, men hver tjeneste og hvert kald imellem dem er endnu en dør, der skal låses, så angrebsfladen vokser.

Teknisk uddybning

Begrebet blev samlet i James Lewis og Martin Fowlers artikel fra marts 2014, der beskrev kendetegn frem for en specifikation: opdeling i komponenter via tjenester frem for biblioteker i samme proces, organisering efter forretningsevner, produkter frem for projekter, smarte endepunkter og dumme rør, decentral styring og datahåndtering, automatiseret infrastruktur, design for fejl og evolutionært design. Grænserne mellem tjenester trækkes normalt efter bounded contexts fra domænedrevet design, og Conways lov (1968) forudsiger, at de vil afspejle teamstrukturen - derfor er stilen lige så meget et organisatorisk valg som et teknisk.

At hver tjeneste ejer sine egne data er den definerende og sværeste begrænsning. Uden en fælles database findes der ingen ACID-transaktioner på tværs af tjenester, så konsistens opnås med sagaer (en kæde af lokale transaktioner med kompenserende handlinger), transactional outbox-mønstret til at udgive hændelser atomisk sammen med tilstandsændringer, idempotente modtagere og eventuel konsistens. Kommunikationen er enten synkron (REST over HTTP, gRPC) eller asynkron (Kafka, AMQP-brokere); synkrone kæder ganger forsinkelse og fejlsandsynlighed op, fordi tilgængeligheden af en kaldsti groft sagt er produktet af tilgængeligheden for hvert led. Robusthedsmønstre - timeouts, genforsøg med eksponentiel backoff og jitter, circuit breakers, bulkheads - og distribueret sporing med W3C Trace Context, typisk via OpenTelemetry, er derfor obligatoriske og ikke valgfrie. Et system, der skal udrulles i takt, eller som deler et skema på tværs af tjenester, er en "distribueret monolit": det betaler netværkets pris uden at få uafhængigheden.

Sikkerheden skifter form i stedet for blot at vokse. Perimeterkontroller i en API-gateway håndterer nord-syd-trafikken, men øst-vest-kald mellem tjenester kræver deres egen autentificering og autorisation. NIST SP 800-204 (2019) beskriver sikkerhedsstrategier for microservices, og ledsagerne SP 800-204A og 800-204B dækker udrulning af service mesh og attributbaseret adgangskontrol i et mesh. Et service mesh som Istio eller Linkerd giver hver workload en kryptografisk identitet (ofte i SPIFFE-format), håndhæver gensidig TLS og anvender politik per rute via sidecar- eller node-proxyer. Slutbrugerens identitet videregives med signerede tokens (JWT-adgangstokens, OAuth 2.0 token exchange efter RFC 8693), så hver tjeneste selv kan håndhæve autorisation på objektniveau; gøres det ikke, opstår Broken Object Level Authorization, API1:2023 i OWASP API Security Top 10.

Microservices er en arkitekturstil og uafhængig af containere eller Kubernetes, selvom de ofte udrulles sådan. Stilen står i kontrast til en modulær monolit, der håndhæver modulgrænser inden for én udrulningsenhed og undgår netværkets fejltyper; for små teams er det ofte det bedre kompromis, og flere omtalte migreringer er gået tilbage fra microservices til færre, større tjenester.

Hvad du bør lære først

Alt det, dette bygger på - grundlaget først.

  1. Netværk
  2. →IP-adresse
  3. →Protokol
  4. →Klient
  5. →Port
  6. →Server
  7. →API
  8. →Microservices

Relationer

Forudsætter
APINetværk
Forårsager
Angrebsflade
Bruges sammen med
ContainerKubernetes

Kilder og videre læsning

Opslagsværker

Hvor dataene kommer fra

Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.

Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON

Test dig selv

Indlæser…

Atlas er i beta.