Vad är microservices?
Microservices är en arkitektur där systemet delas upp i små, självständigt driftsatta tjänster som var och en har ett eget ansvar och kommunicerar över nätverket. Du vinner oberoende releaser och skalning per del, men betalar med drift- och felsökningskomplexitet. Små team och tidiga produkter bör sällan börja här.
Microservices är ett av de mest omtalade orden i modern systemutveckling, och ett av de mest missförstådda. Det framställs ibland som det självklara sättet att bygga på i dag. Sanningen är mer nyanserad. Här är vad microservices faktiskt är, och när de är värda sin kostnad.
Definitionen
Microservices är en arkitektur där ett system delas upp i många små, självständiga tjänster. Varje tjänst har ett eget, avgränsat ansvar – en sköter betalningar, en annan användarkonton, en tredje notiser – och de driftsätts var för sig och kommunicerar med varandra över nätverket.
Nyckelordet är självständigt. Varje tjänst kan utvecklas, releasas och skalas oberoende av de andra. De är som ett lag av specialister som var och en gör sin sak och pratar ihop sig, i stället för en enda stor generalist som gör allt.
Det låter tilltalande, och för rätt sammanhang är det det. Men för att förstå när det passar behöver man se det mot alternativet.
Kontrasten mot monoliten
En monolit är motsatsen: ett system som byggs, testas och driftsätts som en enda enhet, där all kod lever i samma bygge. Där monoliten är ett sammanhållet helt, är microservices ett nätverk av delar.
Skillnaden är inte att den ena är modern och den andra föråldrad. Det är två sätt att organisera samma sak, med olika avvägningar: monoliten är enkel att bygga, köra och felsöka på ett ställe, medan microservices köper oberoende till priset av att helheten sprids ut över många rörliga delar.
Vad du vinner
Fördelarna med microservices är verkliga, och de kretsar kring oberoende.
- Oberoende releaser. En enskild tjänst kan uppdateras och släppas utan att hela systemet rörs. Ett litet fel i notistjänsten kräver inte att allt annat testas om och driftsätts på nytt.
- Skalning per del. Behöver bara en funktion mycket kraft kan just den tjänsten skalas för sig, medan resten lämnas i fred. Det kan vara mer resurseffektivt än att skala hela systemet.
- Parallellt arbete. Olika team kan äga varsin tjänst och arbeta samtidigt utan att ständigt trampa i varandras kod.
För en stor organisation med många team som ska röra sig oberoende är detta en betydande vinst – ofta det verkliga skälet att välja microservices över huvud taget.
Vad du betalar
Oberoendet är inte gratis, och priset betalas i komplexitet.
| Kostnad | Innebörd |
|---|---|
| Drift | Varje tjänst behöver egen driftsättning, övervakning och loggning |
| Nätverket | Anrop mellan tjänster blir en ny felkälla – långsammare och opålitligare än interna |
| Felsökning | Svårare att följa ett flöde som passerar många tjänster |
Tio tjänster är tio saker som kan gå sönder var för sig, alla med egen bevakning. Det som i en monolit bara var ett funktionsanrop blir nu nätverkstrafik som kan misslyckas eller dröja. Och när något går fel blir det svårare att se var, eftersom flödet slingrar sig genom flera delar. Det här är hanterbart – stora bolag gör det dagligen – men det är arbete och kunnande som måste finnas.
När du inte bör börja här
Den viktigaste insikten är att microservices löser ett organisatoriskt problem oftare än ett tekniskt. Har du inte det problemet, betalar du för en lösning du inte behöver.
Tumregeln är tydlig: små team och tidiga produkter ska sällan börja med microservices. Ett ungt system som ännu söker sin form, eller ett som drivs av några få personer, mår bäst av att hållas enkelt. Börja med en välstrukturerad (gärna modulär) monolit, och bryt ut tjänster först när ett verkligt behov – många team, delar med vitt skilda krav – tvingar fram det. Att dela upp för tidigt är ett av de vanligaste och dyraste arkitekturmisstagen.
Vill ni ha ett neutralt omdöme om vad just ert system behöver, resonerar vi på Weapp gärna kring arkitekturen tillsammans innan ni bygger.
Vanliga frågor
Vad är skillnaden mot en monolit?
En monolit byggs och driftsätts som en enda enhet, där all kod lever tillsammans. Microservices delar i stället upp systemet i många små tjänster som körs och släpps var för sig och pratar över nätverket. Monoliten är enklare att bygga och driva, microservices ger oberoende delar mot betydligt mer komplexitet.
Vad vinner man på microservices?
Framför allt oberoende. Varje tjänst kan releasas för sig utan att hela systemet rörs, och delar kan skalas individuellt – den tunga funktionen får mer kraft utan att resten påverkas. Olika team kan äga varsin tjänst och arbeta parallellt. För stora organisationer med många team är det en reell fördel.
Vad betalar man för den fördelen?
Komplexitet i drift och felsökning. Varje tjänst behöver egen driftsättning, övervakning och loggning, och nätverket mellan dem blir en ny felkälla. Att förstå varför något gått fel blir svårare när flödet passerar många tjänster. Det är verkligt arbete som ofta överskuggar de tekniska vinsterna för mindre system.
När ska man inte använda microservices?
När teamet är litet eller produkten är ung. Att dela upp ett system som ännu inte hittat sin form, eller som drivs av några få personer, lägger på drift- och koordineringskostnad utan motsvarande nytta. Tumregeln är att börja enklare och bryta ut tjänster först när ett faktiskt behov tvingar fram det.
Behöver alla moderna system microservices?
Nej, det är en vanlig missuppfattning. Microservices löser oftare ett organisatoriskt problem – många team som ska arbeta oberoende – än ett rent tekniskt. De flesta system betjänas bättre av en välstrukturerad monolit, och kan brytas upp senare om och när behovet verkligen uppstår.