Aanbevelingen voor Azure-hosting voor ASP.NET Core-web-apps
Tip
Deze inhoud is een fragment uit het eBook, Architect Modern Web Applications met ASP.NET Core en Azure, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.
"Line-Of-Business-leiders overal omzeilen IT-afdelingen om toepassingen uit de cloud te krijgen (ook wel SaaS genoemd) en betalen voor hen zoals ze een tijdschriftabonnement zouden hebben. En wanneer de service niet meer nodig is, kunnen ze het abonnement opzeggen zonder ongebruikte apparatuur in de hoek."
- Daryl Plummer, Analyst van Gartner
Wat de behoeften en architectuur van uw toepassing ook zijn, Microsoft Azure kan dit ondersteunen. Uw hostingbehoeften kunnen net zo eenvoudig zijn als een statische website of een geavanceerde toepassing die bestaat uit tientallen services. Voor ASP.NET Core monolithische webtoepassingen en ondersteunende services zijn er verschillende bekende configuraties die worden aanbevolen. De aanbevelingen in dit artikel worden gegroepeerd op basis van het type resource dat moet worden gehost, of het nu gaat om volledige toepassingen, afzonderlijke processen of gegevens.
Webtoepassingen
Webtoepassingen kunnen worden gehost met:
App Service Web Apps
Containers (verschillende opties)
Virtuele machines (VM's)
Van deze is App Service Web Apps de aanbevolen aanpak voor de meeste scenario's, waaronder eenvoudige apps op basis van containers. Overweeg voor microservicearchitecturen een benadering op basis van containers. Als u meer controle nodig hebt over de machines waarop uw toepassing wordt uitgevoerd, kunt u azure Virtual Machines overwegen.
App Service Web Apps
App Service Web Apps biedt een volledig beheerd platform dat is geoptimaliseerd voor het hosten van webtoepassingen. Het is een PaaS-aanbieding (Platform as a Service) waarmee u zich kunt richten op uw bedrijfslogica, terwijl Azure zorgt voor de infrastructuur die nodig is om de app uit te voeren en te schalen. Enkele belangrijke functies van App Service Web Apps:
DevOps-optimalisatie (continue integratie en levering, meerdere omgevingen, A/B-tests, ondersteuning voor scripts).
Wereldwijde schaal en hoge beschikbaarheid.
Verbinding maken van SaaS-platforms en uw on-premises gegevens.
Beveiliging en naleving.
Visual Studio-integratie.
Azure App Service is de beste keuze voor de meeste web-apps. Implementatie en beheer zijn geïntegreerd in het platform, de schaal van sites kan snel worden aangepast bij intensief verkeer, en de ingebouwde taakverdeling en verkeersbeheer zorgen voor hoge beschikbaarheid. U kunt bestaande sites eenvoudig verplaatsen naar Azure-app Service met een hulpprogramma voor onlinemigratie. U kunt een opensource-app gebruiken vanuit de webtoepassingsgalerie of een nieuwe site maken met behulp van het framework en de hulpprogramma's van uw keuze. Met de functie WebJobs kunt u eenvoudig achtergrondverwerking van taken toevoegen aan uw App Service-web-app. Als u een bestaande ASP.NET-toepassing on-premises hebt gehost met behulp van een lokale database, is er een duidelijk pad om te migreren. U kunt App Service Web App gebruiken met een Azure SQL Database (of beveiligde toegang tot uw on-premises databaseserver, indien gewenst).
In de meeste gevallen is het verplaatsen van een lokaal gehoste ASP.NET-app naar een App Service-web-app een eenvoudig proces. U hoeft de app niet of nauwelijks te wijzigen en u kunt snel profiteren van de vele functies die Azure-app Service Web Apps bieden.
Naast apps die niet zijn geoptimaliseerd voor de cloud, zijn Azure-app Service Web Apps een uitstekende oplossing voor veel eenvoudige monolithische (niet-gedistribueerde) toepassingen, zoals veel ASP.NET Core-apps. In deze benadering is de architectuur eenvoudig en eenvoudig te begrijpen en te beheren:
Een klein aantal resources in één resourcegroep is doorgaans voldoende om een dergelijke app te beheren. Apps die doorgaans worden geïmplementeerd als één eenheid, in plaats van apps die bestaan uit veel afzonderlijke processen, zijn goede kandidaten voor deze basisarchitectuurbenadering. Hoewel de architectuur eenvoudig is, kan de gehoste app nog steeds omhoog schalen (meer resources per knooppunt) en uit (meer gehoste knooppunten) om aan elke toename van de vraag te voldoen. Met automatische schaalaanpassing kan de app worden geconfigureerd om het aantal knooppunten dat als host fungeert voor de app automatisch aan te passen op basis van vraag en gemiddelde belasting tussen knooppunten.
App Service Web Apps for Containers
Naast ondersteuning voor het rechtstreeks hosten van web-apps, kan App Service Web Apps for Containers worden gebruikt om toepassingen in containers uit te voeren in Windows en Linux. Met deze service kunt u eenvoudig containertoepassingen implementeren en uitvoeren die met uw bedrijf kunnen worden geschaald. De apps hebben alle functies van App Service Web Apps die hierboven worden vermeld. Daarnaast ondersteunt Web Apps for Containers gestroomlijnde CI/CD met Docker Hub, Azure Container Registry en GitHub. U kunt Azure DevOps gebruiken om build- en implementatiepijplijnen te definiëren waarmee wijzigingen in een register worden gepubliceerd. Deze wijzigingen kunnen vervolgens worden getest in een faseringsomgeving en automatisch worden geïmplementeerd in productie met behulp van implementatiesites, waardoor upgrades zonder downtime mogelijk zijn. Terugdraaien naar eerdere versies kan net zo eenvoudig worden uitgevoerd.
Er zijn enkele scenario's waarin Web Apps for Containers het meest zinvol is. Als u bestaande apps hebt die u kunt containeriseren, ongeacht of dit in Windows- of Linux-containers gebeurt, kunt u deze eenvoudig hosten met behulp van deze toolset. Publiceer uw container en configureer vervolgens Web Apps for Containers om de nieuwste versie van die installatiekopie op te halen uit het gewenste register. Dit is een 'lift-and-shift'-benadering voor het migreren van klassieke app-hostingmodellen naar een model dat is geoptimaliseerd voor de cloud.
Deze aanpak werkt ook goed als uw ontwikkelteam kan overstappen op een ontwikkelingsproces op basis van een container. De 'interne lus' voor het ontwikkelen van apps met containers omvat het bouwen van de app met containers. Wijzigingen in de code en containerconfiguratie worden naar broncodebeheer gepusht en een geautomatiseerde build is verantwoordelijk voor het publiceren van nieuwe containerinstallatiekopieën naar een register, zoals Docker Hub of Azure Container Registry. Deze installatiekopieën worden vervolgens gebruikt als basis voor aanvullende ontwikkeling, evenals voor implementaties naar productie, zoals wordt weergegeven in het volgende diagram:
Ontwikkelen met containers biedt veel voordelen, vooral wanneer containers in productie worden gebruikt. Dezelfde containerconfiguratie wordt gebruikt voor het hosten van de app in elke omgeving waarin deze wordt uitgevoerd, van de lokale ontwikkelcomputer tot het bouwen en testen van systemen tot productie. Deze aanpak vermindert de kans op defecten als gevolg van verschillen in computerconfiguratie of softwareversies aanzienlijk. Ontwikkelaars kunnen ook alle hulpprogramma's gebruiken waarmee ze het meest productief zijn, inclusief het besturingssysteem, omdat containers kunnen worden uitgevoerd op elk besturingssysteem. In sommige gevallen kunnen gedistribueerde toepassingen met veel containers zeer resource-intensief zijn om te worden uitgevoerd op één ontwikkelcomputer. In dit scenario kan het zinvol zijn om een upgrade uit te voeren naar het gebruik van Kubernetes en Azure Dev Spaces, die in de volgende sectie worden behandeld.
Naarmate delen van grotere toepassingen worden opgesplitst in hun eigen kleinere, onafhankelijke microservices, kunnen aanvullende ontwerppatronen worden gebruikt om het gedrag van apps te verbeteren. In plaats van rechtstreeks met afzonderlijke services te werken, kan een API-gateway de toegang vereenvoudigen en de client loskoppelen van de back-end. Door afzonderlijke serviceback-ends voor verschillende front-ends te hebben, kunnen services zich ook ontwikkelen in overleg met hun consumenten. Algemene services kunnen worden geopend via een afzonderlijke sidecarcontainer , waaronder algemene clientconnectiviteitsbibliotheken met behulp van het ambassadeur-patroon .
Azure Kubernetes Service
Azure Kubernetes Service (AKS) beheert uw gehoste Kubernetes-omgeving en zorgt dat de implementatie en het beheer van toepassingen in containers snel en eenvoudig zijn en geen kennis over het beheer van containers vereisen. Het elimineert ook de last van doorlopende bewerkingen en onderhoud door resources op aanvraag in te richten, te upgraden en te schalen, zonder uw toepassingen offline te halen.
AKS verkleind de complexiteit en de operationele overhead die gepaard gaan met het beheer van een Kubernetes-cluster door veel van deze taken naar Azure over te hevelen. Azure handelt als een gehoste Kubernetes-service cruciale taken voor u af zoals statuscontrole en onderhoud. U betaalt ook alleen voor de agentknooppunten binnen uw clusters, niet voor de masters. Als een beheerde Kubernetes-service heeft AKS het volgende te bieden:
- Automatische upgrades en patches voor Kubernetes-versies.
- Eenvoudig schalen van clusters.
- Zelfhersteld gehost besturingsvlak (masters).
- Kostenbesparingen: betaal alleen voor actieve agentpoolknooppunten.
Omdat Azure het beheer van de knooppunten in uw AKS-cluster afhandelt, hoeft u veel taken niet meer handmatig uit te voeren, zoals het upgraden van clusters. Omdat Azure deze kritieke onderhoudstaken voor u afhandelt, biedt AKS geen directe toegang (zoals met SSH) naar het cluster.
Teams die gebruikmaken van AKS, kunnen ook profiteren van Azure Dev Spaces. Met Azure Dev Spaces kunnen teams zich richten op de ontwikkeling en snelle herhaling van hun microservicetoepassing door teams in staat te stellen om rechtstreeks te werken met hun hele microservicesarchitectuur of -toepassing die in AKS wordt uitgevoerd. Azure Dev Spaces biedt een manier om onafhankelijke delen van uw microservicesarchitectuur in isolatie onafhankelijk bij te werken zonder dat dit van invloed is op de rest van het AKS-cluster of andere ontwikkelaars.
Azure Dev Spaces:
- Minimale tijd en resourcevereisten voor lokale machines instellen
- Teams toestaan om sneller te herhalen
- Verminder het aantal integratieomgevingen dat een team nodig heeft
- Verwijder de noodzaak om bepaalde services in een gedistribueerd systeem te mocken bij het ontwikkelen/testen
Meer informatie over Azure Dev Spaces
Azure Virtual Machines
Als u een bestaande toepassing hebt waarvoor aanzienlijke wijzigingen moeten worden uitgevoerd in App Service, kunt u virtuele machines kiezen om de migratie naar de cloud te vereenvoudigen. Voor het correct configureren, beveiligen en onderhouden van VM's is echter veel meer tijd en IT-expertise nodig in vergelijking met Azure-app Service. Als u Azure Virtual Machines overweegt, moet u rekening houden met de lopende onderhoudswerkzaamheden die nodig zijn om uw VM-omgeving te patchen, bij te werken en te beheren. Azure Virtual Machines is Infrastructure as a Service (IaaS), terwijl App Service PaaS is. U moet ook overwegen of het implementeren van uw app als een Windows-container in Web App for Containers een haalbare optie voor uw scenario is.
Logische processen
Afzonderlijke logische processen die kunnen worden losgekoppeld van de rest van de toepassing, kunnen onafhankelijk worden geïmplementeerd in Azure Functions op een 'serverloze' manier. Met Azure Functions kunt u alleen de code schrijven die u nodig hebt voor een bepaald probleem, zonder dat u zich zorgen hoeft te maken over de toepassing of infrastructuur om deze uit te voeren. U kunt kiezen uit verschillende programmeertalen, waaronder C#, F#, Node.js, Python en PHP, zodat u de meest productieve taal voor de taak kunt kiezen. Net als bij de meeste cloudoplossingen betaalt u alleen voor de hoeveelheid tijd die u gebruikt en kunt u Azure Functions zo nodig omhoog schalen.
Gegevens
Azure biedt een groot aantal opties voor gegevensopslag, zodat uw toepassing de juiste gegevensprovider voor de betreffende gegevens kan gebruiken.
Voor transactionele, relationele gegevens is Azure SQL Databases de beste optie. Voor gegevens met hoge prestaties die voornamelijk worden gelezen, is een Redis-cache die wordt ondersteund door een Azure SQL Database een goede oplossing.
Ongestructureerde JSON-gegevens kunnen op verschillende manieren worden opgeslagen, van SQL Database-kolommen tot blobs of tabellen in Azure Storage tot Azure Cosmos DB. Van deze mogelijkheden biedt Azure Cosmos DB de beste queryfunctionaliteit en is dit de aanbevolen optie voor grote aantallen op JSON gebaseerde documenten die ondersteuning moeten bieden voor query's.
Tijdelijke opdracht- of gebeurtenisgegevens die worden gebruikt om het gedrag van toepassingen te organiseren, kunnen Gebruikmaken van Azure Service Bus of Azure Storage Queues. Azure Service Bus biedt meer flexibiliteit en is de aanbevolen service voor niet-triviale berichten binnen en tussen toepassingen.
Aanbevelingen voor architectuur
De vereisten van uw toepassing moeten de architectuur dicteren. Er zijn veel verschillende Azure-services beschikbaar. Het kiezen van de juiste is een belangrijke beslissing. Microsoft biedt een galerie met referentiearchitecturen om typische architecturen te identificeren die zijn geoptimaliseerd voor algemene scenario's. Mogelijk vindt u een referentiearchitectuur die nauw is gekoppeld aan de vereisten van uw toepassing of ten minste een beginpunt biedt.
In afbeelding 11-1 ziet u een voorbeeldarchitectuur voor referentie. In dit diagram wordt een aanbevolen architectuurbenadering beschreven voor een sitecore-website voor inhoudsbeheersysteem die is geoptimaliseerd voor marketing.
Afbeelding 11-1. Referentiearchitectuur voor sitecore-marketingwebsites.
Verwijzingen : aanbevelingen voor Azure-hosting
Azure Solution Architectures
https://azure.microsoft.com/solutions/architecture/Azure Basic-webtoepassingsarchitectuur
https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/basic-web-appOntwerppatronen voor Microservices
https://learn.microsoft.com/azure/architecture/microservices/design/patternsOntwikkelaarshandleiding voor Azure
https://azure.microsoft.com/campaigns/developer-guide/Overzicht van Web Apps
https://learn.microsoft.com/azure/app-service/app-service-web-overviewWeb App for Containers
https://azure.microsoft.com/services/app-service/containers/Inleiding tot Azure Kubernetes Service (AKS)
https://learn.microsoft.com/azure/aks/intro-kubernetes