Azure-värdrekommendationer för ASP.NET Core-webbappar
Dricks
Det här innehållet är ett utdrag från eBook, Architect Modern Web Applications med ASP.NET Core och Azure, som finns på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.
"Branschledare överallt kringgår IT-avdelningar för att få program från molnet (även kallat SaaS) och betalar för dem som de skulle ha en tidningsprenumeration. Och när tjänsten inte längre krävs kan de avbryta prenumerationen utan att någon utrustning lämnas oanvänd i hörnet."
- Daryl Plummer, Gartner analytiker
Oavsett programmets behov och arkitektur kan Microsoft Azure stödja det. Dina värdbehov kan vara så enkla som en statisk webbplats eller ett avancerat program som består av dussintals tjänster. För ASP.NET Monolitiska kärnwebbprogram och stödtjänster finns det flera välkända konfigurationer som rekommenderas. Rekommendationerna i den här artikeln grupperas baserat på vilken typ av resurs som ska hanteras, oavsett om det gäller fullständiga program, enskilda processer eller data.
Webbprogram
Webbprogram kan hanteras med:
App Service Web Apps
Containrar (flera alternativ)
Virtuella datorer (VM)
Av dessa är App Service Web Apps den rekommenderade metoden för de flesta scenarier, inklusive enkla containerbaserade appar. För mikrotjänstarkitekturer bör du överväga en containerbaserad metod. Om du behöver mer kontroll över de datorer som kör ditt program bör du överväga Azure Virtual Machines.
App Service Web Apps
App Service Web Apps erbjuder en fullständigt hanterad plattform som är optimerad för att vara värd för webbprogram. Det är ett PaaS-erbjudande (plattform som en tjänst) som gör att du kan fokusera på din affärslogik, medan Azure tar hand om den infrastruktur som behövs för att köra och skala appen. Några viktiga funktioner i App Service Web Apps:
DevOps-optimering (kontinuerlig integrering och leverans, flera miljöer, A/B-testning, skriptstöd).
Global skala och hög tillgänglighet.
Anslut ions till SaaS-plattformar och dina lokala data.
Säkerhet och efterlevnad.
Visual Studio-integrering.
Azure App Service är det bästa alternativet för de flesta webbapparna. Distribution och hantering finns integrerat i plattformen, platser kan skalas snabbt för att hantera hög trafikbelastning och inbyggd belastningsutjämning och Traffic Manager ger hög tillgänglighet. Du kan enkelt flytta befintliga webbplatser till Azure App Service med ett onlinemigreringsverktyg. Du kan använda en app med öppen källkod från webbprogramgalleriet eller skapa en ny webbplats med det ramverk och de verktyg du väljer. Med funktionen WebJobs kan du enkelt lägga till bearbetning av bakgrundsjobb i din App Service-webbapp. Om du har ett befintligt ASP.NET program som finns lokalt med hjälp av en lokal databas finns det en tydlig sökväg att migrera. Du kan använda App Service Web App med en Azure SQL Database (eller säker åtkomst till din lokala databasserver, om så önskas).
I de flesta fall är det enkelt att flytta från en lokalt värdbaserad ASP.NET app till en App Service-webbapp. Liten eller ingen ändring bör krävas av själva appen, och den kan snabbt börja dra nytta av de många funktioner som Azure App Service Web Apps erbjuder.
Förutom appar som inte är optimerade för molnet är Azure App Service Web Apps en utmärkt lösning för många enkla monolitiska (icke-distribuerade) program, till exempel många ASP.NET Core-appar. I den här metoden är arkitekturen grundläggande och enkel att förstå och hantera:
Ett litet antal resurser i en enskild resursgrupp räcker vanligtvis för att hantera en sådan app. Appar som vanligtvis distribueras som en enda enhet, snarare än de appar som består av många separata processer, är bra kandidater för den här grundläggande arkitekturmetoden. Även om den här metoden är arkitektoniskt enkel kan den värdbaserade appen skala upp både (fler resurser per nod) och ut (fler värdbaserade noder) för att möta den ökade efterfrågan. Med autoskalning kan appen konfigureras för att automatiskt justera antalet noder som är värdar för appen baserat på efterfrågan och genomsnittlig belastning mellan noder.
App Service Web Apps for Containers
Förutom stöd för att hantera webbappar direkt kan App Service Web Apps for Containers användas för att köra containerbaserade program i Windows och Linux. Med den här tjänsten kan du enkelt distribuera och köra containerbaserade program som kan skalas med ditt företag. Apparna har alla funktioner i App Service Web Apps som anges ovan. Dessutom stöder Web Apps for Containers strömlinjeformad CI/CD med Docker Hub, Azure Container Registry och GitHub. Du kan använda Azure DevOps för att definiera bygg- och distributionspipelines som publicerar ändringar i ett register. Dessa ändringar kan sedan testas i en mellanlagringsmiljö och distribueras automatiskt till produktion med hjälp av distributionsplatser, vilket möjliggör uppgraderingar utan avbrottstid. Det går lika enkelt att återställa till tidigare versioner.
Det finns några scenarier där Web Apps for Containers passar bäst. Om du har befintliga appar som du kan använda i container, oavsett om de finns i Windows- eller Linux-containrar, kan du enkelt vara värd för dessa med hjälp av den här verktygsuppsättningen. Publicera bara containern och konfigurera sedan Web Apps for Containers så att den senaste versionen av avbildningen hämtas från ditt register. Det här är en "lift and shift"-metod för att migrera från klassiska appvärdmodeller till en molnoptimerad modell.
Den här metoden fungerar också bra om utvecklingsteamet kan gå över till en containerbaserad utvecklingsprocess. Den "inre loopen" för att utveckla appar med containrar omfattar att skapa appen med containrar. Ändringar som görs i koden och containerkonfigurationen skickas till källkontrollen, och en automatiserad version ansvarar för att publicera nya containeravbildningar i ett register som Docker Hub eller Azure Container Registry. Dessa avbildningar används sedan som grund för ytterligare utveckling, samt för distributioner till produktion, enligt följande diagram:
Att utveckla med containrar ger många fördelar, särskilt när containrar används i produktion. Samma containerkonfiguration används för att vara värd för appen i varje miljö där den körs, från den lokala utvecklingsdatorn till att skapa och testa system till produktion. Den här metoden minskar avsevärt sannolikheten för defekter till följd av skillnader i datorkonfiguration eller programvaruversioner. Utvecklare kan också använda de verktyg de är mest produktiva med, inklusive operativsystemet, eftersom containrar kan köras på alla operativsystem. I vissa fall kan distribuerade program som involverar många containrar vara mycket resursintensiva för att köras på en enda utvecklingsdator. I det här scenariot kan det vara klokt att uppgradera till att använda Kubernetes och Azure Dev Spaces, som beskrivs i nästa avsnitt.
Eftersom delar av större program delas upp i sina egna mindre, oberoende mikrotjänster kan ytterligare designmönster användas för att förbättra appens beteende. I stället för att arbeta direkt med enskilda tjänster kan en API-gateway förenkla åtkomsten och frikoppla klienten från serverdelen. Med separata serverdelar för olika klientdelar kan tjänsterna också utvecklas tillsammans med sina konsumenter. Vanliga tjänster kan nås via en separat sidovagnscontainer, som kan innehålla vanliga klientanslutningsbibliotek med hjälp av ambassadörsmönstret.
Läs mer om designmönster att tänka på när du skapar mikrotjänstbaserade system.
Azure Kubernetes Service
Azure Kubernetes Service (AKS) hanterar din värdmiljö för Kubernetes, vilket gör det enkelt att snabbt distribuera och hantera containerbaserade program utan kunskaper om orkestrering av containrar. Det eliminerar också belastningen av pågående åtgärder och underhåll genom att etablera, uppgradera och skala resurser på begäran, utan att ta dina program offline.
AKS minskar komplexiteten och arbetet med att hantera ett Kubernetes-kluster genom att avlasta en stor del av det ansvaret till Azure. Som Kubernetes-värdtjänst hanterar Azure viktiga uppgifter som övervakning av hälsotillstånd och underhåll åt dig. Dessutom betalar du bara för agentnoderna i dina kluster, inte för huvudservrarna. Som en hanterad Kubernetes-tjänst ger AKS:
- Automatiserade uppgraderingar och korrigeringar av Kubernetes-versionen.
- Enkel klusterskalning.
- Självåterställning av värdbaserat kontrollplan (huvudservrar).
- Kostnadsbesparingar – betala endast för agentpoolnoder som körs.
När Azure sköter hanteringen av noderna i AKS-klustret behöver du inte längre utföra så många uppgifter manuellt, t.ex. klusteruppgraderingar. Eftersom Azure hanterar dessa viktiga underhållsaktiviteter åt dig ger AKS inte direkt åtkomst (till exempel med SSH) till klustret.
Team som utnyttjar AKS kan också dra nytta av Azure Dev Spaces. Azure Dev Spaces hjälper teamen att fokusera på utveckling och snabb iteration av mikrotjänstprogrammet genom att låta team arbeta direkt med hela mikrotjänstarkitekturen eller programmet som körs i AKS. Azure Dev Spaces är också ett sätt att oberoende uppdatera delar av din mikrotjänstarkitektur isolerat utan att påverka resten av AKS-klustret eller andra utvecklare.
Azure Dev Spaces:
- Minimera lokal dators installationstid och resurskrav
- Tillåt team att iterera snabbare
- Minska antalet integreringsmiljöer som krävs av ett team
- Ta bort behovet av att håna vissa tjänster i ett distribuerat system när du utvecklar/testar
Azure Virtual Machines
Om du har ett befintligt program som kräver omfattande ändringar för att köras i App Service kan du välja Virtuella datorer för att förenkla migreringen till molnet. Korrekt konfiguration, skydd och underhåll av virtuella datorer kräver dock mycket mer tid och IT-expertis jämfört med Azure App Service. Om du överväger Azure Virtual Machines bör du ta hänsyn till den pågående underhållsinsats som krävs för att korrigera, uppdatera och hantera din VM-miljö. Azure Virtual Machines är infrastruktur som en tjänst (IaaS), medan App Service är PaaS. Du bör också överväga om distribution av din app som en Windows-container till webapp för containrar kan vara ett genomförbart alternativ för ditt scenario.
Logiska processer
Enskilda logiska processer som kan frikopplas från resten av programmet kan distribueras oberoende av varandra till Azure Functions på ett "serverlöst" sätt. Med Azure Functions kan du bara skriva den kod du behöver för ett visst problem, utan att behöva bekymra dig om programmet eller infrastrukturen för att köra den. Du kan välja mellan en mängd olika programmeringsspråk, inklusive C#, F#, Node.js, Python och PHP, så att du kan välja det mest produktiva språket för uppgiften. Precis som de flesta molnbaserade lösningar betalar du bara för den tid du använder och du kan lita på att Azure Functions skalar upp efter behov.
Data
Azure erbjuder en mängd olika alternativ för datalagring, så att ditt program kan använda lämplig dataprovider för de aktuella data.
För transaktionella, relationsdata är Azure SQL Databases det bästa alternativet. För skrivskyddade data med höga prestanda är en Redis-cache som backas upp av en Azure SQL Database en bra lösning.
Ostrukturerade JSON-data kan lagras på flera olika sätt, från SQL Database-kolumner till blobar eller tabeller i Azure Storage till Azure Cosmos DB. Av dessa erbjuder Azure Cosmos DB de bästa frågefunktionerna och är det rekommenderade alternativet för ett stort antal JSON-baserade dokument som måste ha stöd för frågor.
Tillfälliga kommando- eller händelsebaserade data som används för att samordna programbeteendet kan använda Azure Service Bus eller Azure Storage Queues. Azure Service Bus erbjuder mer flexibilitet och är den rekommenderade tjänsten för icke-triviala meddelanden inom och mellan program.
Rekommendationer för arkitektur
Programmets krav bör styra dess arkitektur. Det finns många olika Azure-tjänster tillgängliga. Att välja rätt är ett viktigt beslut. Microsoft erbjuder ett galleri med referensarkitekturer som hjälper dig att identifiera typiska arkitekturer som är optimerade för vanliga scenarier. Du kan hitta en referensarkitektur som mappar nära programmets krav, eller som åtminstone erbjuder en startpunkt.
Bild 11–1 visar en exempelreferensarkitektur. Det här diagrammet beskriver en rekommenderad arkitekturmetod för en webbplats för sitecore-innehållshanteringssystemet som är optimerad för marknadsföring.
Bild 11-1. Webbplatsreferensarkitektur för sitecore-marknadsföringswebbplats.
Referenser – Azure-värdrekommendationer
Azure Solution Architectures
https://azure.microsoft.com/solutions/architecture/Arkitektur för Azure Basic-webbprogram
https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/basic-web-appDesignmönster för mikrotjänster
https://learn.microsoft.com/azure/architecture/microservices/design/patternsGuide för Azure-utvecklare
https://azure.microsoft.com/campaigns/developer-guide/Översikt över Web Apps
https://learn.microsoft.com/azure/app-service/app-service-web-overviewWeb App for Containers
https://azure.microsoft.com/services/app-service/containers/Introduktion till Azure Kubernetes Service (AKS)
https://learn.microsoft.com/azure/aks/intro-kubernetes