Hur Microservices Architecture fungerar

By rik

Mikrotjänstarkitektur representerar ett smidigt, anpassningsbart och modulärt sätt att skapa mjukvaruapplikationer. Kärnan i denna metod är uppdelningen av omfattande applikationer i mindre, självständiga enheter som fokuserar på specifika uppgifter.

Generellt sett erbjuder denna arkitektur ett system för att konstruera, uppdatera, pröva, driftsätta och underhålla varje enskild tjänst separat. Detta ger utvecklare möjligheten att utforma applikationer som en samling av åtskilda, självstyrande tjänster.

Många av dagens molnbaserade applikationer är framstående exempel på mikrotjänster, ofta skapade med hjälp av behållare. Dessa behållare innehåller all nödvändig kod, bibliotek, körbara filer och andra resurser som en mikrotjänst behöver för att fungera. Detta innebär att utvecklare kan skapa applikationer utan att behöva bekymra sig om beroenden.

Källa: microsoft.com

Flera välkända företag som Netflix, Amazon, Uber och eBay har gått över från traditionella, monolitiska applikationer till mikrotjänster. Denna omställning har lett till mer användarvänliga applikationer och pålitliga, förbättrade tjänster.

Överblick

I en tid där företag ständigt söker efter sätt att behålla sin konkurrenskraft i en komplex och osäker omvärld, ökar efterfrågan på effektiva lösningar. Särskilt inom mjukvaruutveckling ser vi ett skifte mot nya metoder för att bygga och upprätthålla applikationer, utöka funktionaliteten och mycket mer.

I takt med detta sker en övergång från monolitiska strukturer till mikrotjänstarkitektur. Detta ger möjlighet att konstruera applikationer och nya funktioner snabbare och mer pålitligt. Dessutom kan företag och utvecklare genomföra regelbundna uppdateringar av applikationer med hjälp av mindre, tvärfunktionella och löst sammankopplade team.

Mikrotjänstarkitektur stöder fortlöpande utveckling och distribution av mjukvara. Varje team har möjlighet att genomföra mindre ändringar och testa applikationer och nya funktioner snabbare med hjälp av automatiserade distributionsprocesser.

Källa: aws.amazon.com

I grunden adresserar arkitekturen de flesta av de svårigheter och begränsningar som är kopplade till monolitiska strukturer. Genom att dela upp stora, komplicerade applikationer i mindre komponenter blir det lättare att utveckla komplexa applikationer som en samling av flera oberoende delsystem.

Hur fungerar mikrotjänstarkitektur?

Mikrotjänstarkitektur är ett tillvägagångssätt som ger utvecklare möjlighet att skapa en applikation som en samling av oberoende tjänster, som kan driftsättas separat. Varje tjänst, som förvaltas av ett litet specialiserat team, är självständig och fokuserar på att lösa en särskild affärsmässig utmaning.

Team har möjlighet att utveckla, driftsätta, modifiera, testa och underhålla varje enskild del oberoende, utan att det påverkar andra tjänster. I motsats till en monolitisk applikation där alla tjänster är sammanfogade i en enda enhet utan gränser, delar mikrotjänstarkitekturen upp alla affärsfunktioner i oberoende enheter.

Varje mikrotjänst koncentrerar sig på en specifik funktion, som loggning, fakturering, sökning, eller meddelandehantering. Kombinationen av dessa mikrotjänster resulterar i en hel applikation med olika funktioner. Även om vissa mikrotjänster kan hantera affärsfunktioner individuellt, kan två eller fler tjänster ibland samarbeta för att utföra en större och mer komplex uppgift.

Inom denna arkitektur kan utvecklare bryta ner en stor och komplicerad applikation baserat på verksamhetens eller de funktionella kraven (vertikalt). Detta resulterar i mindre, oberoende enheter som kan driftsättas.

Enkla uppgifter kan lösas med en enskild mikrotjänst, medan mer komplexa eller krävande uppgifter fördelas över flera mikrotjänster. I dessa fall kommunicerar delsystemen med varandra genom lätta synkrona eller asynkrona nätverksanrop, till exempel REST, gRPC eller genom meddelanden.

Kunder interagerar inte direkt med mikrotjänsterna. Istället använder de API-gateways som vidarebefordrar begäran till rätt mikrotjänst.

Egenskaper för en mikrotjänstarkitektur

Varje mikrotjänst eller applikationsprocess fungerar som en självständig, oberoende tjänst med sin egen logik och sina beroenden. Team kan modifiera, testa, uppdatera, driftsätta och skala mikrotjänsten utan att det påverkar andra tjänster inom samma applikation.

Några viktiga egenskaper för en mikrotjänstarkitektur:

  • Applikationen består av flera oberoende processer som kan driftsättas separat. Systemet kan anropa flera mikrotjänster för att besvara en enskild användarförfrågan.
  • Arkitekturen möjliggör granulär och horisontell skalning.
  • Mikrotjänsterna har tydliga gränser och kommunicerar inte direkt med varandra. Istället kommunicerar de via lätta nätverkssamtal som RPC och meddelanden.
  • Den består av specialiserade och enkla enheter, som var och en fokuserar på en specifik affärsfunktion eller problem. Ofta har varje utvecklingsteam expertis inom en särskild komponent.
  • När behovet av fler funktioner ökar kan utvecklare lägga till mer kod, vilket kan öka applikationens komplexitet. I sådana fall kan team dela upp applikationen ytterligare i fler oberoende och lättare hanterbara tjänster.

Monolitisk vs. mikrotjänstarkitektur

I en monolitisk arkitektur, om efterfrågan på en funktion ökar, måste hela arkitekturen skalas. Att lägga till nya funktioner eller ändra en befintlig applikation är komplicerat, tidskrävande och kostsamt.

Ett fel i en enskild komponent kan även påverka tillgängligheten för hela applikationen, särskilt när komponenterna är beroende av varandra.

Några av de största nackdelarna med monolitiska applikationer:

  • Låg tillförlitlighet, eftersom ett fel i en enskild komponent kan göra hela applikationen otillgänglig.
  • Inte flexibel.
  • Svårt att skala.
  • Långsam utveckling, eftersom en funktion måste färdigställas innan arbetet med nästa kan påbörjas.
  • Olämplig för stora och komplexa applikationer på grund av sin stelhet och långsamma utvecklingstakt.

I en mikrotjänstarkitektur används olika och oberoende komponenter för att bygga applikationen. Varje funktion eller mikrotjänst körs som en separat tjänst, och om funktioner ska läggas till eller ändras, behöver inte hela arkitekturen uppgraderas. Istället konstrueras endast de komponenter som behövs.

Källa: ibm.com

Detta ger möjligheten att uppdatera, driftsätta, skala eller köra varje tjänst separat utifrån de aktuella affärsbehoven. Dessutom är effekten av ett fel i en komponent mindre jämfört med en monolitisk applikation, där allt kan slås ut.

Fördelar med mikrotjänstarkitektur

De mest betydande fördelarna med en mikrotjänstarkitektur:

#1. Enkel och flexibel skalning av tjänster

Med mikrotjänstarkitektur kan utvecklare skala varje tjänst individuellt, för att möta specifika krav för den aktuella funktionen.

Detta innebär att team inte behöver skala hela applikationen. Istället fokuserar de på enheten som har högre efterfrågan och skalar den tillsammans med tillhörande infrastruktur.

#2. Bättre motståndskraft

Eftersom mikrotjänsterna är oberoende, kommer ett problem med en tjänst endast att påverka den enskilda delen av applikationen, och inte resultera i ett totalt haveri. Övriga fungerande mikrotjänster fortsätter att fungera, och endast den berörda funktionen blir otillgänglig.

I en monolitisk struktur är det troligt att ett problem i en funktion orsakar fel i hela applikationen.

#3. Återanvändbar kod

Utvecklare kan använda vissa moduler för att utföra flera processer. Till exempel kan en mikrotjänst som utför en specifik uppgift även fungera som en byggsten för en annan tjänst.

Därmed kan utvecklare konstruera ytterligare funktioner utan att skriva ny kod från grunden. Istället kan de återanvända delar av koden för en annan tjänst.

Ytterligare fördelar:

  • Mikrotjänstarkitekturen drar nytta av containerteknik, serverlös databehandling, DevOps och annan modern mjukvaruutvecklingsteknik.
  • Det ger utvecklare möjlighet att skapa och driftsätta flera tjänster samtidigt.
  • Möjlighet att testa, felsöka, uppdatera eller ta bort vissa funktioner utan att det påverkar andra.
  • Kortare utvecklingscykler och snabbare driftsättning.
  • Mindre utvecklingsteam.

Nackdelar med mikrotjänstarkitektur

Mikrotjänstarkitektur ger fördelar som möjligheten till snabb, frekvent och tillförlitlig utveckling av stora och komplexa applikationer. Men det finns också vissa nackdelar och begränsningar.

  • För stora applikationer kan det finnas komplicerade kodningsutmaningar mellan mikrotjänsterna.
  • Att hantera säkerheten är en utmaning när antalet mikrotjänster ökar och applikationen växer. Rent praktiskt leder arkitekturen till ett brett distribuerat system med en större attackyta, komplicerade åtkomstregler och mer nätverkstrafik att övervaka. Det finns till exempel många exponerade portar, API:er och andra komponenter, så traditionella säkerhetsverktyg och brandväggar kan inte ge ett tillräckligt skydd. Detta gör mikrotjänsterna sårbara för DDoS, man-in-the-middle, cross-site scripting och andra attacker.
  • Felsökning av stora och komplexa applikationer blir svårare när de växer. Ett stort antal moduler som kommunicerar med varandra kan resultera i kommunikationskostnader på grund av ökad nätverkstrafik och RPC-anrop.
  • Ett stort antal tjänster, processer, behållare, databaser och andra rörliga delar ökar komplexiteten och utmaningarna i ett distribuerat system.
  • När applikationer växer sig större och mer komplexa är det svårt att garantera transaktionssäkerhet.

Källa: developers.redhat.com

Mikrotjänstarkitektur gör det möjligt för mindre team att utveckla oberoende, löst sammankopplade tjänster. För att vara konkurrenskraftiga måste teamen använda olika verktyg för att stödja ramverket, automatisera repetitiva uppgifter och påskynda implementeringen av applikationer och nya funktioner.

Verktygen för mikrotjänster varierar i kapacitet och andra egenskaper. Valet beror på de specifika behoven och vad utvecklarna vill uppnå.

Några vanliga verktyg:

  • Operativsystem som Linux och Windows
  • Programmeringsspråk – Spring Boot, Elixir, Java, Golang, Python, Node JS
  • API-hantering och testverktyg – API Fortress, Postman, Tyk
  • Meddelandeverktyg – RabbitMQ, Amazon Simple Queue Service (SQS), Apache Kafka, Google Cloud Pub/Sub
  • Verktygssatser – Seneca, fabric8, Google Cloud Functions
  • Arkitektoniska ramverk – Kong, Goa, Helidon, Quarkus, Molecular
  • Orkestreringsverktyg – Dirigent, Kurbenetes, Azure Kurbenetes-tjänst (AKS), Apache Mesos, Amazon Elastic Container Service.
  • Övervakningsverktyg – Logstash, Graylog Elastic Stack, Middleware
  • Serverlösa verktyg – Kubeless, Claudia, Apache Openwhisk
  • Användningsfall för mikrotjänstarkitektur

    Mikrotjänster är lämpliga för olika branscher och applikationer där de kan förbättra prestanda och effektivitet. Nedan följer några av de vanligaste användningsfallen:

    #1. Dataströmning

    När det finns behov av att strömma och bearbeta stora mängder data från en eller flera källor, kan mikrotjänster bidra till att förbättra effektiviteten och prestandan.

    #2. Skalbara webbapplikationer

    Även om vissa webbapplikationer ofta är monolitiska, kan användningen av mikrotjänstarkitektur öka skalbarheten och prestandan.

    #3. Internet of Things (IoT) applikationer

    Utvecklare av IoT-applikationer kan använda mikrotjänstarkitektur för att bygga sina applikationer. Detta ger dem möjlighet att skapa små, lättviktiga och oberoende applikationer som kan driftsättas och hanteras.

    ETL (Extract, Transform, Load) är en process som extraherar data från en eller flera källor, omvandlar den till ett önskat format och laddar den i en annan databas eller datalager. Mikrotjänster kan hjälpa till att förbättra skalbarheten och prestandan för sådana ETL-processer.

    Exempel på företag som använder mikrotjänstarkitektur

    Några av de stora teknikföretagen som har anammat mikrotjänster:

    Amazon

    Amazon är en av de största förespråkarna för mikrotjänstarkitektur. När företaget och kundbasen växte, blev den monolitiska applikationen ostabil och otillförlitlig.

    För att lösa detta problem övergick de till mikrotjänster. Detta säkerställer enklare underhåll, tillägg av nya funktioner och underhåll av individuella och oberoende tjänster, vilket förhindrar fullständiga avbrott.

    Förutom att använda mikrotjänster på Amazons shoppingwebbplats, erbjuder de också en infrastruktur, Amazon Web Services (AWS), där företag kan bygga, hosta och hantera mikrotjänster.

    Uber

    Ursprungligen förlitade sig Uber på en monolitisk applikation som var lämplig för en stad där de erbjöd tjänster. Men när företaget expanderade till nya marknader och regioner, kunde applikationen inte längre stödja alla användare på ett effektivt sätt.

    För att säkerställa tillförlitliga tjänster, övergick Uber till en mikrotjänstbaserad arkitektur för vissa funktioner, som resehantering och betalningshantering.

    Källa: uber.com

    Netflix

    Med mikrotjänster har Netflix lyckats övervinna skalbarhetsutmaningarna som uppstod när kundbasen växte.

    De använder över 500 molnbaserade mikrotjänster för att hantera cirka 2 miljarder förfrågningar dagligen. Förutom att förbättra tillförlitligheten och tillgängligheten har mikrotjänstarkitekturen minskat kostnaderna för streaming.

    Slutord

    Mikrotjänstarkitektur ger flera fördelar jämfört med monolitiska system. Dessa inkluderar snabbare distribution av applikationer och funktioner, hög flexibilitet och skalbarhet, motståndskraft och mycket mer.

    Det finns dock även nackdelar, och mikrotjänstarkitektur är inte nödvändigtvis lämpligt för alla applikationer. Det kan till exempel inte vara kostnadseffektivt för mindre applikationer.

    När applikationerna växer i storlek och antal funktioner, blir det svårare och dyrare att bygga, driftsätta och testa delsystemen, särskilt om de är distribuerade över olika moln och nätverksmiljöer.

    Därför är det viktigt att utvärdera och förstå både fördelarna och nackdelarna med mikrotjänstarkitektur innan tekniken tas i bruk.

    Läs mer om de bästa API-hanteringslösningarna för både småföretag och större organisationer.