Bewerken

Delen via


Microservices implementeren met Azure Container Apps en Dapr

Azure Container Apps
.NET
Azure SQL Database
Azure Cosmos DB
Azure Cache for Redis

In dit artikel wordt een oplossing beschreven voor het uitvoeren van een orderbeheersysteem met 10 microservices in Azure Container Apps. De oplossing maakt ook gebruik van best practices voor microservices via Dapr en gebeurtenisgestuurd schalen met KEDA.

Dapr en Traefik zijn handelsmerken van hun respectieve bedrijven. Er wordt geen goedkeuring geïmpliceerd door het gebruik van deze markeringen.

Architectuur

Diagram met een orderbeheersysteem met microservices in Container Apps.

Download een PowerPoint-bestand van deze architectuur.

Gegevensstroom

Deze oplossing maakt gebruik van Bicep-sjablonen om de implementatie van het Reddog-orderbeheersysteem en de ondersteunende Azure-infrastructuur uit te voeren. De architectuur bestaat uit één Azure Container Apps-omgeving die als host fungeert voor 10 .NET Core-microservicetoepassingen. U gebruikt de .NET Core Dapr SDK om te integreren met Azure-resources via de bouwstenen Publish-Subscribe (pub/sub) en State and Binding. Hoewel Dapr doorgaans flexibiliteit biedt wanneer u onderdelen implementeert, is deze oplossing gebaseerd op een mening. De services maken ook gebruik van KEDA-schaalregels om schaalaanpassing mogelijk te maken op basis van gebeurtenistriggers en schalen naar nulscenario's.

In de volgende lijst worden elke microservice en de Configuratie van Azure Container Apps beschreven waarmee deze wordt geïmplementeerd. Zie de reddog-code-opslagplaats op GitHub om de code weer te geven.

  1. Traefik: De basisproxy voor het routeren van gebruikersaanvragen van de gebruikersinterface naar de accounting- en Makeline-services voor het interactieve dashboard.

  2. UI: Een dashboard met realtime order- en geaggregeerde verkoopgegevens voor het Reddog-orderbeheersysteem.

  3. Virtuele klant: een klantsimulatieprogramma dat klanten simuleert die orders plaatsen via de orderservice.

  4. Orderservice: een CRUD-API voor het plaatsen en beheren van orders.

  5. Boekhoudservice: een service die ordergegevens verwerkt, opslaat en samenvoegt. Het transformeert klantorders in zinvolle verkoopstatistieken die worden weergegeven door de gebruikersinterface.

  6. Ontvangstservice: Een archiveringsprogramma dat orderbevestigingen genereert en opslaat voor controle en historische doeleinden.

  7. Loyaliteitsservice: Een service die het loyaliteitsprogramma beheert door beloningspunten van klanten bij te houden op basis van orderuitgaven.

  8. Makeline-service: een service die verantwoordelijk is voor het beheren van een wachtrij met huidige orders die wachten op uitvoering. Hiermee wordt de verwerking en voltooiing van de orders door de virtuele werkrolservice bijgehouden.

  9. Virtuele werkrol: een werkrolsimulatieprogramma dat de voltooiing van klantorders simuleert.

  10. Bootstrapper (niet weergegeven): Een service die gebruikmaakt van Entity Framework Core om de tabellen in Azure SQL Database te initialiseren voor gebruik met de accountingservice.

Service Inkomend verkeer Dapr-onderdelen KEDA-schaalregels
Traefik External Dapr niet ingeschakeld HTTP
Gebruikersinterface Intern Dapr niet ingeschakeld HTTP
Virtuele klant Geen Service-naar-service-aanroep N.v.t.
Bestelservice Intern Pub/sub: Azure Service Bus HTTP
Boekhoudservice Intern Pub/sub: Azure Service Bus Azure Service Bus-onderwerplengte, HTTP
Ontvangstservice Intern Pub/sub: Azure Service Bus
Binding: Azure Blob
Lengte van Azure Service Bus-onderwerp
Loyaliteitsservice Intern Pub/sub: Azure Service Bus
Status: Azure Cosmos DB
Lengte van Azure Service Bus-onderwerp
Makeline-service Intern Pub/sub: Azure Service Bus
Status: Azure Redis
Azure Service Bus-onderwerplengte, HTTP
Virtuele werkrol Geen Service-naar-service-aanroep
Binding: Cron
N.v.t.

Notitie

U kunt Bootstrapper ook uitvoeren in een container-app. Deze service wordt echter eenmaal uitgevoerd om de database te maken en vervolgens naar nul geschaald na het maken van de benodigde objecten in Azure SQL Database.

Onderdelen

Deze oplossing maakt gebruik van de volgende onderdelen:

  • Azure-resourcegroepen zijn logische containers voor Azure-resources. U gebruikt één resourcegroep om alles te structuren met betrekking tot deze oplossing in Azure Portal.
  • Azure Container Apps is een volledig beheerde, serverloze containerservice die wordt gebruikt voor het bouwen en implementeren van moderne apps op schaal. In deze oplossing host u alle 10 microservices in Azure Container Apps en implementeert u deze in één Container App-omgeving. Deze omgeving fungeert als een veilige grens rond het systeem.
  • Azure Service Bus is een volledig beheerde berichtenbroker voor ondernemingen, compleet met wachtrijen en onderwerpen over publiceren/abonneren. In deze oplossing gebruikt u deze voor de implementatie van dapr pub/subonderdelen. Meerdere services gebruiken dit onderdeel. De orderservice publiceert berichten in de bus en de Makeline-, accounting-, loyaliteits- en ontvangstdiensten abonneren zich op deze berichten.
  • Azure Cosmos DB is een beheerde NoSQL-databaseservice met meerdere modellen. Gebruik het als een dapr-statusarchiefonderdeel voor de loyaliteitsservice om de loyaliteitsgegevens van klanten op te slaan.
  • Azure Cache voor Redis is een gedistribueerde, in-memory, schaalbare beheerde Redis-cache. Het wordt gebruikt als een dapr-statusarchiefonderdeel voor de Makeline-service om gegevens op te slaan in de orders die worden verwerkt.
  • Azure SQL Database is een intelligente, schaalbare relationele databaseservice die is gebouwd voor de cloud. Maak deze voor de accountingservice, die gebruikmaakt van Entity Framework Core om te interfacen met de database. De Bootstrapper-service is verantwoordelijk voor het instellen van de SQL-tabellen in de database en wordt vervolgens eenmaal uitgevoerd voordat de verbinding met de accountingservice tot stand wordt gebracht.
  • Azure Blob Storage slaat enorme hoeveelheden ongestructureerde gegevens op, zoals tekst- of binaire bestanden. De ontvangstservice maakt gebruik van Blob Storage via een Dapr-uitvoerbinding om de orderbevestigingen op te slaan.
  • Traefik is een toonaangevende moderne omgekeerde proxy en load balancer waarmee microservices eenvoudig kunnen worden geïmplementeerd. In deze oplossing gebruikt u de dynamische configuratiefunctie van Traefik om padgebaseerde routering vanuit de gebruikersinterface uit te voeren. Dit is een Vue.js toepassing met één pagina (SPA). Met deze configuratie kunnen ook directe API-aanroepen naar de back-endservices worden uitgevoerd om te testen.
  • Met Azure Monitor kunt u gegevens van klantinhoud verzamelen, analyseren en erop reageren vanuit uw Azure-infrastructuuromgevingen. U gebruikt deze met Application Insights om de containerlogboeken te bekijken en metrische gegevens van de microservices te verzamelen.

Alternatieven

In deze architectuur implementeert u een Traefik-proxy om padgebaseerde routering in te schakelen voor de Vue.js-API. Er zijn veel alternatieve opensourceproxy's die u voor dit doel kunt gebruiken. Twee andere populaire projecten zijn NGINX en HAProxy.

Alle Azure-infrastructuur, met uitzondering van Azure SQL Database, gebruikt Dapr-onderdelen voor interoperabiliteit. Een voordeel van Dapr is dat u al deze onderdelen kunt wisselen door de implementatieconfiguratie van container-apps te wijzigen. In dit geval zijn Azure Service Bus, Azure Cosmos DB, Cache voor Redis en Blob Storage gekozen om een aantal van de 70+ Dapr-onderdelen weer te geven die beschikbaar zijn. Een lijst met alternatieve pub-/subbrokers, statusarchieven en uitvoerbindingen bevinden zich in de Dapr-documenten.

Scenariodetails

Microservices zijn een steeds populairdere architectuurstijl die veel voordelen kan hebben, waaronder hoge schaalbaarheid, kortere ontwikkelingscycli en meer eenvoud. U kunt containers gebruiken als mechanisme voor het implementeren van microservicestoepassingen en vervolgens een containerorchestrator zoals Kubernetes gebruiken om bewerkingen te vereenvoudigen. Er zijn veel factoren die u moet overwegen voor grootschalige microservicesarchitecturen. Normaal gesproken vereist het infrastructuurplatform veel inzicht in complexe technologieën, zoals de containerorchestrators.

Azure Container Apps is een volledig beheerde serverloze containerservice voor het uitvoeren van moderne toepassingen op schaal. Hiermee kunt u container-apps implementeren via abstractie van het onderliggende platform. Op deze manier hoeft u geen ingewikkelde infrastructuur te beheren. Azure Container Apps wordt mogelijk gemaakt door opensourcetechnologieën.

Deze architectuur maakt gebruik van Azure Container Apps-integratie met een beheerde versie van de Gedistribueerde Application Runtime (Dapr). Dapr is een opensource-project dat ontwikkelaars helpt bij de inherente uitdagingen in gedistribueerde toepassingen, zoals statusbeheer en serviceaanroepen.

Azure Container Apps biedt ook een beheerde versie van Kubernetes Gebeurtenisgestuurde Automatische schaalaanpassing (KEDA). Met KEDA kunnen uw containers automatisch worden geschaald op basis van binnenkomende gebeurtenissen van externe services zoals Azure Service Bus en Azure Cache voor Redis.

U kunt ook INKOMEND HTTPS inschakelen in Azure Container Apps zonder dat u meer Azure-netwerkresources hoeft te maken. U kunt Envoy-proxy gebruiken, waarmee ook scenario's voor het splitsen van verkeer worden toegestaan.

Als u wilt verkennen hoe Azure Container Apps zich verhoudt tot andere platformen voor containerhosting in Azure, raadpleegt u Container Apps vergelijken met andere Azure-containeropties.

In dit artikel wordt een oplossing beschreven voor het uitvoeren van een orderbeheersysteem met 10 microservices in Azure Container Apps. De oplossing maakt ook gebruik van best practices voor microservices via Dapr en gebeurtenisgestuurd schalen met KEDA.

Potentiële gebruikscases

Deze oplossing is van toepassing op elke organisatie die staatloze en stateful microservices gebruikt voor gedistribueerde systemen. De oplossing is het beste voor consumenten verpakte goederen en productiebranches die een bestel- en leveringssysteem hebben.

Deze andere oplossingen hebben vergelijkbare ontwerpen:

  • Architectuur op basis van microservices in AKS (Azure Kubernetes Service)
  • Microservicesarchitectuur in Azure Functions
  • Gebeurtenisgestuurde architecturen

Overwegingen

Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die u kunt gebruiken om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.

Betrouwbaarheid

Betrouwbaarheid zorgt ervoor dat uw toepassing kan voldoen aan de toezeggingen die u aan uw klanten hebt gedaan. Zie Overzicht van de betrouwbaarheidspijler voor meer informatie.

Azure Container Apps wordt achter de schermen uitgevoerd op Kubernetes. Tolerantiemechanismen zijn ingebouwd in Kubernetes die containers of pods bewaken en opnieuw opstarten als er problemen zijn. De tolerantiemechanismen combineren met de ingebouwde load balancer om meerdere replica's van elke container-app uit te voeren. Met deze redundantie kan de oplossing tolereren dat een exemplaar niet beschikbaar is.

U kunt Azure Monitor en Application Insights gebruiken om Azure Container Apps te bewaken. U kunt containerlogboeken weergeven door in de portal naar het deelvenster Logboeken in elke container-app te navigeren en vervolgens de volgende Kusto-query uit te voeren. In dit voorbeeld ziet u logboeken voor de Makeline-service-app.

ContainerAppConsoleLogs_CL |
    where ContainerAppName_s contains "make-line-service" |
    project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
    order by _timestamp_d asc

Het toepassingsoverzicht in Application Insights laat ook zien hoe de services in realtime communiceren. U kunt ze vervolgens gebruiken voor foutopsporingsscenario's. Navigeer naar het toepassingsoverzicht onder de Application Insights-resource om iets als hieronder weer te geven.

Schermopname van een toepassingsoverzicht in Application Insights.

Zie Een app bewaken in Azure Container Apps voor meer informatie over het bewaken van Azure Container Apps.

Kostenoptimalisatie

Optimaliseer de kosten door te kijken naar manieren om onnodige uitgaven te verminderen en operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.

Gebruik de Azure-prijscalculator om de kosten van de services in deze architectuur te schatten.

Prestatie-efficiëntie

Prestatie-efficiëntie is de mogelijkheid van uw workload om te schalen om te voldoen aan de vereisten die u erop plaatst op een efficiënte manier. Zie overzicht van de pijler Prestatie-efficiëntie voor meer informatie.

Deze oplossing is sterk afhankelijk van de KEDA-implementatie in Azure Container Apps voor gebeurtenisgestuurd schalen. Wanneer u de virtuele klantenservice implementeert, worden er continu orders geplaatst, waardoor de orderservice omhoog wordt geschaald via de HTTP KEDA-schaalfunctie. Wanneer de orderservice de orders op de servicebus publiceert, zorgen de keda-schaalders van de servicebus ervoor dat de boekhoud-, ontvangst-, Makeline- en loyaliteitsservices omhoog worden geschaald. De gebruikersinterface en Traefik-container-apps configureren ook HTTP KEDA-schaalders, zodat de apps worden geschaald naarmate meer gebruikers toegang hebben tot het dashboard.

Wanneer de virtuele klant niet wordt uitgevoerd, worden alle microservices in deze oplossing geschaald naar nul, met uitzondering van virtuele werkrol- en Makeline-services. Virtuele werkrol schaalt niet omlaag, omdat deze voortdurend controleert op orderafhandeling. Zie Schaalregels instellen in Azure Container Apps voor meer informatie over schalen in container-apps. Lees de KEDA-documentatie over Scalers voor meer informatie over KEDA Scalers.

Dit scenario implementeren

Zie de Red Dog-demo: Implementatie van Azure Container Apps op GitHub voor implementatie-instructies.

De Red Dog Demo: Microservices-integratie is een verpakte app-sjabloon die voortbouwt op de voorgaande codeassets om de integratie van Azure Container Apps, App Service, Functions en API Management te demonstreren en de infrastructuur in te delen, implementeert de code met behulp van GitHub Actions.

Medewerkers

Dit artikel wordt onderhouden door Microsoft. De tekst is oorspronkelijk geschreven door de volgende Inzenders.

Hoofdauteur:

Andere Inzenders:

Als u niet-openbare LinkedIn-profielen wilt zien, meldt u zich aan bij LinkedIn.

Volgende stappen