SystemetRådgivningUdviklingArbejdePriser
Tilbage til artikler
2024-02 · 3 min.

Microservices-fælden

Microservices blev standardanbefalingen, uanset om de var passende. For de fleste teams, der købte pitchet, kom regningen 18 måneder senere.

På denne side
  • Samtalen, der altid starter på samme måde
  • Løftet vs. regningen
  • Den modulære monolit-mellemvej
  • Hvornår man skal splitte for alvor
  • Migrationsfælden
Opdateret 2024-02
TL;DR
  • "Vi har brug for microservices, fordi vi skalerer" er næsten altid den forkerte sætning.
  • Distribuerede systemer multiplicerer dine fejltilstande, før de multiplicerer din throughput.
  • En modulær monolit giver dig 80 % af gevinsten til 10 % af driftsomkostningen.
  • Splittes, når teamstørrelse, SLA'er eller fejlisolation tvinger din hånd. Ikke før.

Samtalen, der altid starter på samme måde

De fleste microservices-samtaler starter på samme måde. En grundlægger, en CTO eller en head of platform sidder over for mig og siger en version af: "Vi vokser, så vi har brug for microservices."

De har næsten aldrig brug for microservices. De har brug for et refactor, et par klare modulgrænser, en database der ikke misbruges, og en ærlig samtale om, hvem der er on-call. Det, de blev solgt, var en arkitektur. Det, de rent faktisk har, er et ansættelsesproblem, et coupling-problem eller et udrulningsproblem klædt ud som en arkitektur.

Løftet vs. regningen

Pitchet er let at falde for, fordi dele af det er sande:

  • Uafhængige services, der kan udvikles, udrulles og skaleres separat.
  • Teams, der kan vælge det rigtige værktøj til deres service.
  • Fejl isoleret til en lille del af systemet.

Regningen, ingen prissætter til dig på forhånd:

  • Netværket er ikke din kode. Hvert kald, der plejede at være et funktionskald, er nu en request, der kan time ud, prøve igen og fyre dobbelt.
  • Data skal leve et sted. Enten splitter du din database (og mister joins, transaktioner og referentiel integritet), eller du beholder én (og mister halvdelen af pointen med microservices).
  • Schema-drift er for evigt. To services på to udgivelses-cyklusser vil komme ud af synk. Du vil skrive en contract test-suite, og du vil hade den.
  • Observability er nu et produkt. Tracing, log-korrelation og request-ID'er bliver ikke-til-forhandling-infrastruktur, ikke en nice-to-have.
  • Eventual consistency er et UX-problem. Brugere bemærker, når deres kurv er tom i tre sekunder, efter de lagde noget i den.
Distribuerede systemer multiplicerer ikke din throughput først. De multiplicerer dine fejltilstande først.

Den modulære monolit-mellemvej

Næsten alt det, folk vil have fra microservices — rene grænser, parallelt arbejde, evnen til at ræsonnere over en chunk af systemet i isolation — kan du få fra en velstruktureret monolit. Med én database, én udrulning og ét sæt dashboards.

Mønsteret er ligetil:

  • Bounded contexts som moduler. Hvert modul ejer sine tabeller, eksponerer et typet interface og rækker aldrig ind i et andet moduls storage.
  • Én transaktion på tværs af moduler, når forretningen har brug for det, i stedet for distribuerede sagaer, du re-debugger resten af dit liv.
  • Baggrundsarbejde via en tabel-baseret kø, indtil du har en reel grund til at introducere en broker.
  • Strikse modul-til-modul-API-tests, så grænserne er reelle, ikke vibes-baserede.

Når du reelt skal udtrække en service, udtrækker du et modul. Grænsen er der allerede, testene er der allerede, og teamet ved, hvad de skærer ud.

Hvornår man skal splitte for alvor

De ærlige signaler, der retfærdiggør omkostningen ved at gå distribueret, er:

  • Du har mere end ét team, der reelt ejer en slice fra start til slut, inklusive on-call.
  • To dele af systemet har forskellige SLA'er. En 99,99 % checkout kan ikke dele udrulningsvindue med en 99 % recommendation engine.
  • Du har brug for fejlisolation. Når analyse-pipelinen brænder, skal storefronten blive ved med at sælge.
  • Du har reelt divergerende skaleringsprofiler. Én workload er CPU-bound og snakkesalig, den anden er hukommelses-tung og stille.

"Vi vil måske gerne en dag" er ikke på denne liste. Det er "den nye seniorudvikler er vant til det" heller ikke.

Migrationsfælden

Hvis du allerede har arvet et microservices-rod, så big-bang det ikke tilbage til en monolit. Brug det modsatte af, hvordan du kom dertil: en strangler fig i revers. Vælg de to services, der snakker mest sammen. Flyt dem ind i én proces. Slet inter-service-kaldene. Gentag.

Rækkefølgen betyder noget. Start med de services, der deler data, ikke dem der deler en UI. Latency-gevinsterne er øjeblikkelige, de operationelle gevinster vokser, og du stopper med at betale for netværket som en database.

What to actually do
  • Hvis I er under ~50 udviklere, er jeres standard en modulær monolit.
  • Gør modulgrænser eksplicitte og håndhævede, før I gør dem fysiske.
  • Begrund hver ny service med et reelt, observeret produktionsproblem.
  • Behandl eventual consistency som en UX-beslutning, ikke en implementeringsdetalje.
  • Hvis I allerede er distribuerede og ikke behøver være det, så merge tilbage. Det er en funktion, ikke et nederlag.

Vil du have denne slags vurdering på dit projekt?

Jeg læser hver e-mail inden for én arbejdsdag. Tag et projekt, et tilbud eller et system, du sidder fast i.

Se Enterprise Starter
Flere artikler
  • 2026-05

    De 5 ufaktererede måneder skjult i hvert Contentful enterprise-build

    Hvert Contentful enterprise-build jeg har auditeret bærer de samme fem skjulte måneder: link-referencer, redirects, i18n, schema-drevne forms og type-sikkerhed. Ingen af dem er på SOW'en. Alle er på tidslinjen.

  • 2024-03

    Hvorfor simpel arkitektur altid vinder

    Komplekse systemer fejler på komplekse måder. De mest succesfulde projekter, jeg har set, er dem der modstod trangen til at over-engineere.

  • 2024-01

    Den reelle omkostning ved skræddersyet udvikling

    Skræddersyet software er ikke kun den indledende pris. Det er vedligeholdelse, opdateringer og opportunity cost ved ikke at bruge eksisterende løsninger.

Uafhængig teknologirådgivning og udvikling. København, Danmark.

Njalsgade 21F, 2. sal, København

CVR 45 44 13 93

nicklas@ceero.eu

WhatsApp +45 31 33 25 99

Arbejde

  • Enterprise Starter
  • Rådgivning
  • Udvikling
  • Arbejde
  • Kontakt

Ressourcer

  • Artikler
  • Guides
  • Gratis værktøjer
  • Om os

Andre steder

  • Sparro
  • Invigilo
  • e-sign
  • Privatlivspolitik

© 2026 Ceero ApS · CVR DK45441393. Alle rettigheder forbeholdes.

Bygget i København med Next.js, Contentful og nul konsulent-bullshit.