Hva er mikrotjenester?
- 7 minutter
Skyen driver dagens administrasjon av programutvikling og IT-systemer. Moderne skyprogrammer må være raske, smidige, massivt skalerbare og pålitelige.
Bruk av beholdere kan hjelpe deg med å distribuere programmer som oppfyller alle disse kravene. Men å sette et program i en beholder uten å følge et strategisk designmønster er som å komme inn i et kjøretøy og håpe på å finne veien til en ny by uten å bruke et kart eller GPS. Du kan ende opp på destinasjonen, men ruten vil sannsynligvis ikke være direkte eller den mest effektive.
En mikrotjenestearkitektur er nyttig i dette scenarioet. Mikrotjenester gir deg en tilnærming til programvareutvikling og distribusjon som passer perfekt til smidigheten, skalerbarheten og pålitelighetskravene til moderne skyprogrammer.
Hva er en mikrotjenestearkitektur?
I en mikrotjenestearkitektur deles et stort program opp i et sett med mindre tjenester. Hver tjeneste kjører i sin egen prosess og kommuniserer med andre prosesser ved hjelp av protokoller som HTTP/HTTPS, WebSocket eller Advanced Message Queuing Protocol (AMQP). Hver mikrotjeneste implementerer et bestemt, ende-til-ende-domene eller forretningsfunksjonalitet innenfor en bestemt kontekstgrense. Hver mikrotjeneste må utvikles autonomt og må være uavhengig distribuerbar. Til slutt bør hver mikrotjeneste eie sin relaterte domenedatamodell og domenelogikk. Mikrotjenester kan være basert på ulike datalagringsteknologier (SQL, NoSQL) og ulike programmeringsspråk.
Her er noen viktige egenskaper ved mikrotjenester:
- De er små, uavhengige og løst koblet sammen.
- Hver mikrotjeneste har en egen kodebase som et lite utviklingsteam kan administrere.
- De distribueres uavhengig av hverandre. Et team kan oppdatere en eksisterende mikrotjeneste uten å gjenoppbygge og distribuere hele programmet på nytt.
- De opprettholder dataene eller den eksterne tilstanden i sine respektive databaser. I motsetning til i en monolittisk arkitektur deler ikke mikrotjenester databaser.
- De kommuniserer med hverandre ved hjelp av veldefinerte API-er. Interne implementeringsdetaljer for hver tjeneste er skjult for andre tjenester.
- De støtter polyglot programmering. Mikrotjenesten som utgjør et nettprogram, trenger for eksempel ikke å dele samme teknologistakk, biblioteker eller rammeverk.
Hvorfor utvikle seg ved hjelp av en mikrotjenestearkitektur?
Mikrotjenester innkapsler vanligvis enklere kundekravfunksjonalitet, som du kan skalere ut eller skalere inn. Du kan teste, distribuere og administrere dem uavhengig av hverandre. En viktig fordel med en mikrotjenestetilnærming er at teamene drives mer av kundescenarioer enn ved hjelp av spesifikk teknologi. Hvert lille utviklingsteam utvikler en mikrotjeneste basert på et kundescenario. Teamet velger teknologiene de bruker.
Mikrotjenester gir langsiktig smidighet. Mikrotjenester støtter vedlikehold i komplekse, store og svært skalerbare systemer ved å la deg opprette programmer basert på mange uavhengig distribuerbare tjenester som hver har detaljerte og autonome livssykluser.
Som en annen fordel kan mikrotjenester skaleres ut uavhengig. I stedet for å ha et enkelt monolittisk program som du må skalere ut som en enhet, kan du i stedet skalere ut bestemte mikrotjenester. Du kan bare skalere det funksjonelle området som trenger mer prosessorkraft eller nettverksbåndbredde for å støtte etterspørselen i stedet for å skalere ut andre områder av programmet som ikke trenger å skaleres. Det betyr kostnadsbesparelser fordi du trenger mindre maskinvare.
Mikrotjenestetilnærmingen gir smidige endringer og rask gjentakelse av hver mikrotjeneste fordi du kan endre bestemte, små områder med komplekse, store og skalerbare applikasjoner.
Arkitekter av finkornede mikrotjenestebaserte programmer muliggjør kontinuerlig integrering og kontinuerlig leveringspraksis. Det akselererer også levering av nye funksjoner i programmet. Du kan kjøre og teste mikrotjenester isolert og utvikle dem autonomt, samtidig som du opprettholder klare kontrakter mellom tjenester. Så lenge du ikke endrer grensesnittene eller kontraktene, kan du endre den interne implementeringen av en mikrotjeneste eller legge til ny funksjonalitet uten å bryte andre mikrotjenester.
Hvilken rolle spiller beholdere?
Containerization er en tilnærming til programvareutvikling der et program eller en tjeneste, dets avhengigheter og konfigurasjonen (abstrahert som distribusjonsmanifestfiler) pakkes sammen som et beholderbilde. Du kan teste det beholdere programmet som en enhet, og distribuere det som en beholderbildeforekomst på vertsoperativsystemet.
Programvarebeholdere fungerer som en standard enhet for programvaredistribusjon som kan inneholde ulike koder og avhengigheter. Dette ligner på hvordan forsendelsesbeholdere transporterer varer av alle slag etter skip, tog eller lastebil. Utviklere og IT-eksperter kan bruke beholderprogramvare til å distribuere kode og avhengigheter på tvers av miljøer med liten eller ingen endring.
Hvis det høres ut som å beholder et program kan være en fin måte å implementere mikrotjenestearkitekturmønsteret på, er det det. Fordelene ved å bruke beholdere er nesten nøyaktig med fordelene ved å bruke en mikrotjenestearkitektur.
Notat
Containerizing av et program er ikke den eneste måten å distribuere mikrotjenester på. Du kan distribuere mikrotjenester som individuelle tjenester i Azure App Service, på virtuelle maskiner eller på en rekke måter. Beholdere er distribusjonsverktøyet som vi skal bruke for mikrotjeneste for resten av denne modulen.
En annen fordel med beholdere er skalerbarhet. Du kan raskt skalere ut ved å opprette nye beholdere som skal brukes for kortsiktige oppgaver. Fra et programsynspunkt ligner det å starte et bilde (opprette en beholder) på samme måte som å starte en prosess som en tjeneste eller nettapp.
Kort sagt, beholdere tilbyr fordelene med isolasjon, portabilitet, smidighet, skalerbarhet og kontroll på tvers av hele arbeidsflyten for programlivssyklus.
Mikrotjenesten du bygger i denne modulen, kjøres i en Docker-beholder, publisert ved hjelp av .NET CLI.
.NET SDK-beholderpublisering
I .NET 7 fikk .NET SDK muligheten til å opprette beholderbilder via kommandoen dotnet publish. Verktøyene gjør en haug med slutning basert på egenskapene til prosjektet og dets utdata. .NET oppretter deretter det samme bildet som en Dockerfile ville opprettet. Det kan ta så få som to kommandoer å opprette et nytt program og publisere det som et bilde:
dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
De foregående .NET CLI-kommandoene oppretter en ny nett-API og publiserer appen som en beholder:
- Målretting Linux som OS (--os linux).
- Angi en x64-arkitektur (---arch x64).
- Bruke utgivelseskonfigurasjonen (-c Release).
Du kan kontrollere mange aspekter av den genererte beholderen gjennom MSBuild-egenskaper. Hvis du generelt kan bruke en kommando i en Dockerfile for å angi konfigurasjon, kan du gjøre det samme via MSBuild.
Hvorfor bygge mikrotjenester i .NET?
Fra og med .NET Core og fortsetter til gjeldende gjentakelser, er .NET bygget for å være skybasert først. Den kjører på tvers av plattformer, slik at Docker-bildet kan være basert på en smak av Linux, og .NET-koden kjører fortsatt. Microsoft har allerede opprettet .NET-bilder for Docker. Også .NET er ekstremt rask. Den ASP.NET Kestrel-nettserveren overgår rutinemessig andre nettservere.
Havnearbeider
Docker er en åpen kildekode-plattform som du kan bruke til å automatisere distribusjonen av programmer som bærbare, selvforsynte beholdere som kan kjøre i skyen eller lokalt. Docker er også selskapet som fremmer og utvikler denne teknologien. Docker som organisasjon arbeider i samarbeid med leverandører av skyen, Linux og Windows, inkludert Microsoft.
Docker-beholdere kan kjøre hvor som helst: lokalt i kundens datasenter, i en ekstern tjenesteleverandør eller i skyen. Docker-bildebeholdere kan kjøre opprinnelig på Linux og Windows.
Hva er et bilde?
Når en utvikler bruker Docker, oppretter de en app eller tjeneste. Deretter pakker de appen eller tjenesten og avhengighetene i et beholderbilde. Et bilde er en statisk representasjon av appen eller tjenesten og dens konfigurasjon og avhengigheter.
Bildet, når det kjører, blir beholderen. Beholderen er forekomsten av et bilde i minnet.
Et beholderbilde er uforanderlig. Når du har bygget et bilde, kan ikke bildet endres. Fordi du ikke kan endre et bilde, oppretter du et nytt bilde hvis du trenger å gjøre endringer i appen eller tjenesten og dens avhengigheter. Denne funksjonen garanterer at bildet du bruker i produksjon, er det samme bildet som brukes i utvikling og testing.
Hva er en Dockerfile?
En Dockerfile er en tekstfil som inneholder instruksjoner for hvordan du bygger et Docker-bilde. Dockerfiles er skrevet på et minimalt skriptspråk som er utformet for å bygge og konfigurere bilder. Dockerfiles dokumenterer også operasjonene som kreves for å bygge et bilde, og starter med et basisbilde.
Hvis du vil opprette et Docker-bilde som inneholder programmet ditt, begynner du vanligvis med å identifisere et basisbilde. Deretter legger du til flere filer og konfigurasjon i basisbildet. Prosessen med å identifisere et passende basisbilde starter vanligvis med et søk på Docker Hub. Du søker etter et ferdig laget bilde som allerede inneholder et programrammeverk og alle verktøyene og verktøyene til en Linux-distribusjon, for eksempel Ubuntu eller Alpine. Hvis du for eksempel har et ASP.NET program som du vil pakke inn i en beholder, publiserer Microsoft et bilde kalt mcr.microsoft.com/dotnet/aspnet som allerede inneholder ASP.NET kjøretid.
Du kan tilpasse et bilde ved å starte en beholder med et basisbilde, og deretter gjøre endringer i det. Endringer innebærer vanligvis aktiviteter som kopiering av filer til beholderen fra det lokale filsystemet og kjøring av ulike verktøy og verktøy for å kompilere kode.
En Dockerfile er et sett med instruksjoner som oppretter et Docker-bilde som har den nøyaktige programvaren du trenger for å kjøre programmet, inkludert selve programmet.
Tilbakemeldinger
Var denne siden nyttig?
Nei
Trenger du hjelp med dette emnet?
Vil du prøve å bruke Spør Learn for å klargjøre eller veilede deg gjennom dette emnet?