Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De belangrijkste onderdelen van deze architectuur zijn een webfront-end die clientaanvragen verwerkt en een werkrol die resource-intensieve taken, langlopende werkstromen of batchtaken uitvoert. De webfront-end communiceert met de werkrol via een berichtenwachtrij.
De volgende onderdelen zijn doorgaans opgenomen in deze architectuur:
Een of meer databases
Een cache voor het opslaan van waarden uit de database voor snelle leesbewerkingen
Een netwerk voor contentlevering voor statische inhoud
Externe services, zoals e-mail of Short Message Service (SMS), die niet-Microsoft-serviceproviders doorgaans bieden
Een id-provider voor verificatie
Het web en de worker zijn beide staatloos, en de sessiestatus kan worden opgeslagen in een gedistribueerde cache. De taakverwerker verwerkt langdurige taken asynchroon. Berichten in de wachtrij kunnen de werknemer starten, of een schema kan deze uitvoeren voor batchverwerking. De werknemer is optioneel als de toepassing geen langlopende bewerkingen heeft.
De front-end kan een web-API bevatten. Een toepassing met één pagina kan de web-API gebruiken door asynchrone HTTP-aanvragen te maken, of een systeemeigen clienttoepassing kan deze rechtstreeks gebruiken.
Wanneer u deze architectuur gebruikt
De web-Queue-Worker-architectuur wordt doorgaans geïmplementeerd met behulp van beheerde rekenservices zoals Azure App Service, Azure Kubernetes Service of Azure Container Apps.
Houd rekening met deze architectuur voor de volgende gebruiksvoorbeelden:
Toepassingen met een relatief eenvoudig domein
Toepassingen met langlopende werkstromen of batchbewerkingen
Scenario's waarin u de voorkeur geeft aan beheerde services via IaaS (Infrastructure as a Service)
Voordelen
Een architectuur die eenvoudig en eenvoudig te volgen is
Implementatie en beheer met minimale inspanning
Duidelijke scheiding van verantwoordelijkheden
Ontkoppeling van de front-end en werkrol via asynchrone berichten
Onafhankelijk schalen van de front-end en werkrol
Uitdagingen
Zonder zorgvuldig ontwerp kunnen de frontend en de werkkracht uitgroeien tot grote monolithische componenten die moeilijk te onderhouden en te updaten zijn.
Er kunnen verborgen afhankelijkheden zijn als de front-end en de worker gegevensschema's of codemodules delen.
De webfront-end kan mislukken nadat deze zich in de database bevindt, maar voordat berichten naar de wachtrij worden verzonden. Dit veroorzaakt consistentieproblemen omdat de worker zijn deel van de logica niet uitvoert. Om dit probleem te verhelpen, kunt u technieken zoals het Transactional Outbox-patroon gebruiken. Hiervoor moeten uitgaande berichten eerst teruggaan via een afzonderlijke wachtrij. De NServiceBus Transactional Session Library ondersteunt deze techniek.
Beste praktijken
Een goed ontworpen API beschikbaar maken voor de client. Zie best practices voor API-ontwerp voor meer informatie.
Automatisch schalen om wijzigingen in de belasting te verwerken. Voor meer informatie, zie beste praktijken voor automatisch schalen.
Semistatische gegevens in de cache opslaan. Voor meer informatie, zie Aanbevolen procedures voor het cachen.
Gebruik een netwerk voor contentlevering om statische inhoud te hosten. Zie best practices voor contentleveringsnetwerk voor meer informatie.
Gebruik polyglot-persistentie indien van toepassing. Zie Gegevensmodellen begrijpen voor meer informatie.
Partitioneer gegevens om de schaalbaarheid te verbeteren, conflicten te verminderen en de prestaties te optimaliseren. Voor meer informatie, zie beste praktijken voor gegevenspartitionering.
Web-Queue-Worker in App Service
In deze sectie wordt een aanbevolen web-Queue-Worker-architectuur beschreven die gebruikmaakt van App Service.
Een Visio-bestand van deze architectuur downloaden.
Werkproces
De front-end wordt geïmplementeerd als een App Service-web-app, en de worker wordt geïmplementeerd als een Azure Functions-app. De web-app en de Functions-app zijn beide gekoppeld aan een App Service-plan.
U kunt Azure Service Bus - of Azure Storage-wachtrijen gebruiken voor de berichtenwachtrij. In het vorige diagram wordt een opslagwachtrij gebruikt.
Azure Managed Redis slaat de sessiestatus en andere gegevens op waarvoor toegang met lage latentie is vereist.
Azure Content Delivery Network wordt gebruikt om statische inhoud in de cache op te cachen, zoals afbeeldingen, CSS of HTML.
Kies voor opslag technologieën die het beste aansluiten bij de behoeften van uw toepassing. Deze benadering, ook wel polyglot persistence genoemd, maakt gebruik van meerdere opslagtechnologieën in hetzelfde systeem om aan verschillende vereisten te voldoen. Ter illustratie van dit idee toont het diagram zowel Azure SQL Database als Azure Cosmos DB.
Zie Basislijn voor maximaal beschikbare zone-redundante webtoepassing en berichtgestuurde bedrijfstoepassingen bouwen met NServiceBus en Service Bus voor meer informatie.
Andere overwegingen
Niet elke transactie hoeft via de wachtrij en werknemer naar de opslag te gaan. De webfront-end kan eenvoudige lees- en schrijfbewerkingen rechtstreeks uitvoeren. Werkers zijn ontworpen voor resource-intensieve taken of langdurige werkstromen. In sommige gevallen hebt u mogelijk helemaal geen werknemer nodig.
Schaal het aantal exemplaren uit met behulp van de ingebouwde functie voor automatische schaalaanpassing van uw rekenplatform. Als de belasting van de toepassing voorspelbare patronen volgt, gebruikt u auto-scaling op basis van een schema. Als de belasting onvoorspelbaar is, gebruikt u automatisch schalen op basis van metrische gegevens.
Overweeg om de web-app en de Functions-app in afzonderlijke App Service-abonnementen te plaatsen, zodat ze onafhankelijk van elkaar kunnen worden geschaald.
Gebruik afzonderlijke App Service-plannen voor productie en testen.
Gebruik implementatieslots om implementaties voor App Service-plannen te beheren. Met deze methode kunt u een bijgewerkte versie implementeren naar een staging-site en vervolgens overschakelen naar de nieuwe versie. U kunt ook terugschakelen naar de vorige versie als er een probleem is tijdens de update.