Hvad er microservices?
- 7 minutter
Clouden styrer udviklingen af programmer og it-systemer i dag. Moderne cloudprogrammer skal være hurtige, fleksible, skalerbare og pålidelige.
Brug af objektbeholdere kan hjælpe dig med at installere programmer, der opfylder alle disse krav. Men at sætte en ansøgning i en container uden at følge et strategisk design mønster er som at komme ind i et køretøj og håber at finde vej til en ny by uden at bruge et kort eller GPS. Du ender måske på din destination, men ruten vil sandsynligvis ikke være direkte eller den mest effektive.
En mikrotjenestearkitektur er nyttig i dette scenarie. Microservices giver dig en tilgang til softwareudvikling og -udrulning, der er perfekt tilpasset kravene til fleksibilitet, skalerbarhed og pålidelighed i moderne cloudprogrammer.
Hvad er en microservices-arkitektur?
I en microservices-arkitektur opdeles et stort program i et sæt mindre tjenester. Hver tjeneste kører i sin egen proces og kommunikerer med andre processer ved hjælp af protokoller som HTTP/HTTPS, WebSocket eller AMQP (Advanced Message Queuing Protocol). Hver microservice implementerer en specifik, end-to-end-domæne- eller forretningsfunktionalitet inden for en bestemt kontekstgrænse. Hver mikrotjeneste skal udvikles selvstændigt og skal kunne udrulles uafhængigt. Endelig skal hver mikrotjeneste eje sin relaterede domænedatamodel og domænelogik. Microservices kan være baseret på forskellige datalagringsteknologier (SQL, NoSQL) og forskellige programmeringssprog.
Her er nogle af de vigtigste egenskaber ved mikrotjenester:
- De er små, uafhængige og løst forbundne.
- Hver microservice har en separat kodebase, som et lille udviklingsteam kan administrere.
- De udrulles uafhængigt af hinanden. Et team kan opdatere en eksisterende mikrotjeneste uden at genopbygge og geninstallere hele programmet.
- De bevare deres data eller den eksterne tilstand i deres respektive databaser. I modsætning til i en monolitisk arkitektur deler mikrotjenester ikke databaser.
- De kommunikerer med hinanden ved hjælp af veldefinerede API'er. Oplysninger om intern implementering for hver tjeneste er skjult for andre tjenester.
- De understøtter programmering af polyglot. De mikrotjenester, der udgør et webprogram, behøver f.eks. ikke at dele den samme teknologistak, biblioteker eller strukturer.
Hvorfor udvikle ved hjælp af en microservices-arkitektur?
Microservices indkapsler typisk enklere funktionalitet til kundekrav, som du kan skalere ud eller skalere ind. Du kan teste, udrulle og administrere dem uafhængigt af hinanden. En vigtig fordel ved en microservices-tilgang er, at teams drives mere af kundescenarier end af brug af specifik teknologi. Hvert lille udviklingsteam udvikler en microservice baseret på et kundescenarie. Teamet vælger de teknologier, det bruger.
Microservices giver langsigtet fleksibilitet. Microservices understøtter vedligeholdelse i komplekse, store og yderst skalerbare systemer ved at lade dig oprette programmer, der er baseret på mange tjenester, der kan udrulles uafhængigt af hinanden, og som hver især har detaljerede og autonome livscyklusser.
Som en anden fordel kan mikrotjenester skaleres uafhængigt af hinanden. I stedet for at have et enkelt monolitisk program, som du skal skal skalere ud som en enhed, kan du i stedet skalere specifikke mikrotjenester ud. Du kan kun skalere det funktionelle område, der har brug for mere processorkraft eller netværksbåndbredde for at understøtte efterspørgslen i stedet for at skalere andre områder af programmet ud, som ikke behøver at blive skaleret. Det betyder omkostningsbesparelser, fordi du har brug for mindre hardware.
Microservices-tilgangen muliggør agile ændringer og hurtig gentagelse af hver microservice, fordi du kan ændre specifikke, små områder af komplekse, store og skalerbare programmer.
Design af detaljeret mikroservicebaserede programmer muliggør kontinuerlig integration og kontinuerlig leveringspraksis. Det fremskynder også leveringen af nye funktioner i programmet. Du kan køre og teste mikrotjenester isoleret og udvikle dem selvstændigt, samtidig med at du bevarer klare kontrakter mellem tjenester. Så længe du ikke ændrer grænsefladerne eller kontrakterne, kan du ændre den interne implementering af enhver mikrotjeneste eller tilføje ny funktionalitet uden at ødelægge andre mikrotjenester.
Hvilken rolle spiller objektbeholdere?
Containerization er en tilgang til softwareudvikling, hvor et program eller en tjeneste, dets afhængigheder og dens konfiguration (abstrakte som installationsmanifestfiler) pakkes sammen som et objektbeholderbillede. Du kan teste det objektbeholderiserede program som en enhed og udrulle det som en objektbeholderafbildningsforekomst på værtsoperativsystemet.
Softwareobjektbeholdere fungerer som en standardenhed til udrulning af software, der kan indeholde forskellig kode og afhængigheder. Dette svarer til, hvordan fragtcontainere transporterer varer af enhver art med skib, tog eller lastbil. Udviklere og it-teknikere kan bruge objektbeholdersoftware til at installere kode og afhængigheder på tværs af miljøer med kun få eller ingen ændringer.
Hvis det lyder som om, at objektbeholderisering af et program kan være en god måde at implementere microservices-arkitekturmønsteret på, er det. Fordelene ved at bruge objektbeholdere passer næsten nøjagtigt sammen med fordelene ved at bruge en microservices-arkitektur.
Seddel
Objektbeholderisering af et program er ikke den eneste måde at udrulle mikrotjenester på. Du kan udrulle mikrotjenester som individuelle tjenester i Azure App Service, på virtuelle maskiner eller på flere forskellige måder. Objektbeholdere er det udrulningsværktøj, som vi bruger til vores microservices i resten af dette modul.
En anden fordel ved objektbeholderisering er skalerbarhed. Du kan hurtigt skalere ud ved at oprette nye objektbeholdere, der skal bruges til kortsigtede opgaver. Set fra et program synspunkt svarer instantiering af et billede (oprettelse af en objektbeholder) til instantiering af en proces som en tjeneste eller en webapp.
Objektbeholdere giver kort sagt fordelene ved isolation, mobilitet, fleksibilitet, skalerbarhed og kontrol på tværs af hele arbejdsprocessen for programlivscyklus.
De mikrotjenester, du bygger i dette modul, kører i en Docker-objektbeholder, der udgives ved hjælp af .NET CLI.
Publicering af .NET SDK-objektbeholder
I .NET 7 fik .NET SDK mulighed for at oprette objektbeholderbilleder via kommandoen dotnet publish. Værktøjerne foretager en masse konklusioner baseret på egenskaberne for dit projekt og dets output. .NET opretter derefter det samme billede, som en Dockerfile opretter. Det kan tage så få som to kommandoer at oprette et nyt program og publicere det som et billede:
dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
De foregående .NET CLI-kommandoer opretter en ny web-API og publicerer appen som en objektbeholder:
- Målretning mod Linux som OS (--os linux).
- Angivelse af en x64-arkitektur (--arch x64).
- Brug af udgivelseskonfigurationen (-c version).
Du kan styre mange aspekter af den genererede objektbeholder via MSBuild-egenskaber. Hvis du generelt kan bruge en kommando i en Dockerfile til at angive en konfiguration, kan du gøre det samme via MSBuild.
Hvorfor bygge microservices i .NET?
Fra og med .NET Core og fortsættelse af de aktuelle gentagelser er .NET bygget til først at være oprindelig i cloudmiljøet. Det kører på tværs af platforme, så dit Docker-billede kan være baseret på en variant af Linux, og din .NET-kode kører stadig. Microsoft har allerede oprettet .NET-billeder til Docker. .NET er også ekstremt hurtig. ASP.NET Kestrel-webserveren klarer sig rutinemæssigt bedre end andre webservere.
Docker
Docker- er en open source-platform, som du kan bruge til at automatisere udrulningen af programmer som bærbare, selvforsynende objektbeholdere, der kan køre i cloudmiljøet eller i det lokale miljø. Docker er også den virksomhed, der fremmer og udvikler denne teknologi. Docker som organisation arbejder i samarbejde med leverandører af cloud, Linux og Windows, herunder Microsoft.
Docker-objektbeholdere kan køre hvor som helst: i det lokale miljø i kundens datacenter, i en ekstern tjenesteudbyder eller i cloudmiljøet. Docker-billedobjektbeholdere kan køre oprindeligt på Linux og Windows.
Hvad er et billede?
Når en udvikler bruger Docker, opretter vedkommende en app eller tjeneste. Derefter pakker de appen eller tjenesten og dens afhængigheder i et objektbeholderbillede. Et billede er en statisk repræsentation af appen eller tjenesten og dens konfiguration og afhængigheder.
Når billedet køres, bliver det objektbeholderen. Objektbeholderen er forekomsten i hukommelsen af et billede.
Et objektbeholderbillede er uforanderligt. Når du har oprettet et billede, kan billedet ikke ændres. Da du ikke kan ændre et billede, skal du oprette et nyt billede, hvis du har brug for at foretage ændringer af appen eller tjenesten og dens afhængigheder. Denne funktion garanterer, at det billede, du bruger i produktionen, er det samme billede, som bruges til udvikling og test.
Hvad er en Dockerfile?
En Dockerfile er en tekstfil, der indeholder instruktioner til, hvordan du opretter et Docker-billede. Dockerfiles skrives i et minimalt scriptsprog, der er designet til at bygge og konfigurere billeder. Dockerfiles dokumenterer også de handlinger, der kræves for at oprette et billede, startende med et basisbillede.
Hvis du vil oprette et Docker-billede, der indeholder dit program, skal du typisk begynde med at identificere et basisbillede. Derefter føjer du flere filer og konfiguration til basisafbildningen. Processen med at identificere et passende basisbillede starter normalt med en søgning på Docker Hub. Du søger efter et færdiglavet billede, der allerede indeholder en programstruktur og alle hjælpeprogrammer og værktøjer i en Linux-distribution som Ubuntu eller Alpine. Hvis du f.eks. har et ASP.NET program, som du vil pakke i en objektbeholder, udgiver Microsoft et billede kaldet mcr.microsoft.com/dotnet/aspnet, der allerede indeholder ASP.NET-kørsel.
Du kan tilpasse et billede ved at starte en objektbeholder med et basisbillede og derefter foretage ændringer af det. Ændringer omfatter normalt aktiviteter som kopiering af filer til objektbeholderen fra det lokale filsystem og kørsel af forskellige værktøjer og hjælpeprogrammer til kompilering af kode.
En Dockerfile er et sæt instruktioner, der opretter et Docker-billede, der indeholder den nøjagtige software, du skal bruge til at køre dit program, herunder selve programmet.