Microservices implementeren met Azure Container Apps en Dapr
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 aanbevolen procedures voor microservices via Distributed Application Runtime (Dapr) en gebeurtenisgestuurd schalen met Kubernetes-gebeurtenisgestuurde automatische schaalaanpassing (KEDA).
Dapr en Traefik zijn handelsmerken van hun respectieve bedrijven. Er wordt geen goedkeuring geïmpliceerd door het gebruik van deze markeringen.
Architectuur
Download een PowerPoint-bestand van deze architectuur.
Gegevensstroom
In deze oplossing wordt een fictief Red Dog-bestelbeheersysteem en de ondersteunende Azure-infrastructuur beschreven. De architectuur bestaat uit één Container Apps-omgeving die als host fungeert voor 10 .NET Core-microservicetoepassingen. De oplossing maakt gebruik van de Dapr SDK om te integreren met Azure-resources via bouwstenen voor publiceren/abonneren, status en binding. De services maken ook gebruik van KEDA-schaalregels om schaalaanpassing mogelijk te maken op basis van gebeurtenistriggers en scenario's voor schalen naar nul.
De volgende gegevensstroom komt overeen met het vorige diagram:
Traefik: De basisproxy voor het routeren van gebruikersaanvragen van de gebruikersinterface naar de accounting- en Makeline-services voor het interactieve dashboard.
ui: een dashboard met realtime order- en geaggregeerde verkoopgegevens voor het Red Dog-orderbeheersysteem.
Virtuele klant: een klantsimulatieprogramma dat klanten simuleert die orders plaatsen via de orderservice.
Bestelservice: Een API maken, lezen, bijwerken en verwijderen om orders te plaatsen en te beheren.
Boekhoudservice: een service die ordergegevens verwerkt, opslaat en samenvoegt. Het transformeert klantorders in zinvolle verkoopstatistieken die in de gebruikersinterface worden weergegeven.
Ontvangstservice: Een archiveringsprogramma dat orderbevestigingen genereert en opslaat voor controle en historische doeleinden.
Loyaliteitsservice: Een service die het loyaliteitsprogramma beheert door beloningspunten van klanten bij te houden op basis van orderuitgaven.
Makelineservice: Een service die een wachtrij met huidige orders beheert die wachten om te worden voltooid. Hiermee wordt de verwerking en voltooiing van de orders door de virtuele werkrolservice bijgehouden.
Virtuele werkrol: een werkrolsimulatieprogramma dat de voltooiing van klantorders simuleert.
| Dienst | Inkomend verkeer | Dapr-onderdelen | KEDA-schaalregels |
|---|---|---|---|
| Traefik | Extern | Dapr niet ingeschakeld | HTTP |
| Gebruikersinterface | Intern | Dapr niet ingeschakeld | HTTP |
| Virtuele klant | Geen | Aanroep van service-naar-service | N.v.t. |
| Bestelservice | Intern | Publish-subscribe: Azure Service Bus | HTTP |
| Boekhoudservice | Intern | Publiceren-abonneren: Service Bus | Service Bus-onderwerplengte, HTTP |
| Ontvangstservice | Intern | Publiceren-abonneren: Service Bus Binding: Azure Blob Storage |
Lengte van Service Bus-onderwerp |
| Loyaliteitsservice | Intern | Publiceren-abonneren: Service Bus Status: Azure Cosmos DB |
Lengte van Service Bus-onderwerp |
| Makeline-service | Intern | Publiceren-abonneren: Service Bus Status: Azure Cache voor Redis |
Service Bus-onderwerplengte, HTTP |
| Virtuele werkrol | Geen | Aanroep van service-naar-service Binding: Cron |
N.v.t. |
Notitie
U kunt Bootstrap ook implementeren in een container-app. Deze service wordt echter één keer uitgevoerd om de database te maken en vervolgens naar nul te schalen nadat de benodigde objecten in Azure SQL Database zijn gemaakt.
Onderdelen
Application Insights is een uitbreidbare service voor het beheer van toepassingsprestaties die u kunt gebruiken om livetoepassingen te bewaken en automatisch prestatieafwijkingen te detecteren. In deze architectuur gebruikt u Application Insights met Azure Monitor om de containerlogboeken te bekijken en metrische gegevens van de microservices te verzamelen.
Blob Storage is een cloudoplossing voor het opslaan van enorme hoeveelheden ongestructureerde gegevens, zoals tekst- of binaire bestanden. In deze architectuur maakt een ontvangstservice gebruik van Blob Storage via een Dapr-uitvoerbinding om de orderbevestigingen op te slaan.
Azure Cache voor Redis is een gedistribueerde, in-memory, schaalbare beheerde Redis-cache. In deze architectuur wordt het gebruikt als een dapr-statusarchiefonderdeel voor de Makeline-service om gegevens op te slaan in de orders die worden verwerkt.
Azure Cosmos DB is een NoSQL-databaseservice met meerdere modellen. In deze architectuur wordt het gebruikt als een dapr-statusarchiefonderdeel voor de loyaliteitsservice om klanten loyaliteitsgegevens op te slaan.
Azure Monitor is een geïntegreerd platform waarmee u klantinhoudsgegevens uit uw Azure-infrastructuuromgevingen kunt verzamelen, analyseren en erop kunt reageren. In deze architectuur gebruikt u Azure Monitor met Application Insights om de containerlogboeken te bekijken en metrische gegevens van de microservices te verzamelen.
Service Bus is een volledig beheerde berichtenbroker voor ondernemingen met wachtrijen en onderwerpen over publiceren/abonneren. In deze architectuur gebruikt u Service Bus voor de implementatie van het publiceren/abonneren van dapr-onderdelen. Meerdere services gebruiken dit onderdeel. De orderservice publiceert berichten in de bus en de Makeline-, accounting-, loyaliteits- en ontvangstdiensten abonneren zich op deze berichten.
Container Apps is een volledig beheerde, serverloze containerservice die wordt gebruikt voor het bouwen en implementeren van moderne apps op schaal. In deze architectuur host u alle 10 microservices in Container Apps en implementeert u deze in één Container Apps-omgeving. Deze omgeving fungeert als een veilige grens rond het systeem.
SQL Database is een intelligente, schaalbare relationele databaseservice die is gebouwd voor de cloud. In deze architectuur fungeert het als het gegevensarchief 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. Vervolgens wordt deze één keer uitgevoerd voordat de verbinding met de boekhoudservice tot stand wordt gebracht.
Traefik is een omgekeerde proxy en load balancer die worden gebruikt om netwerkverkeer naar microservices te routeren. In deze architectuur gebruikt u de dynamische configuratiefunctie van Traefik om padgebaseerde routering uit te voeren vanuit de gebruikersinterface. Dit is een Vue.js toepassing met één pagina. Met deze configuratie kunnen ook directe API-aanroepen naar de back-endservices worden uitgevoerd voor testen.
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 veelvoorkomende projecten zijn NGINX en HAProxy.
Alle Azure-infrastructuur, met uitzondering van SQL Database, maakt gebruik van 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 scenario laten Service Bus, Azure Cosmos DB, Azure Cache voor Redis en Blob Storage enkele van de meer dan 70 beschikbare Dapr-onderdelen zien. Een lijst met alternatieve brokers voor publiceren/abonneren, statusarchieven en uitvoerbindingen zijn beschikbaar in de Dapr-documenten.
Scenariodetails
Microservices zijn een veelgebruikte architectuurstijl. Ze bieden voordelen zoals schaalbaarheid, flexibiliteit en onafhankelijke implementaties. 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 kunt overwegen voor grootschalige microservicesarchitecturen. Normaal gesproken vereist het infrastructuurplatform een aanzienlijk begrip van complexe technologieën zoals containerorchestrators.
Container Apps is een volledig beheerde serverloze containerservice voor het uitvoeren van moderne toepassingen op schaal. Hiermee kunt u container-apps implementeren via een abstractie van het onderliggende platform. Met deze methode hoeft u geen ingewikkelde infrastructuur te beheren.
Deze architectuur maakt gebruik van Container Apps-integratie met een beheerde versie van de Dapr. Dapr is een opensource-project waarmee ontwikkelaars de inherente uitdagingen in gedistribueerde toepassingen kunnen overwinnen, zoals statusbeheer en serviceaanroepen.
Container Apps biedt ook een beheerde versie van KEDA. MET KEDA kunnen uw containers automatisch worden geschaald op basis van binnenkomende gebeurtenissen van externe services, zoals Service Bus en Azure Cache voor Redis.
U kunt ook INKOMEND HTTPS inSchakelen in 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.
Zie Container Apps vergelijken met andere Azure-containeropties voor meer informatie.
In dit artikel wordt een oplossing beschreven voor het uitvoeren van een orderbeheersysteem met 10 microservices in 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.
De volgende 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 Well-Architected Frameworkvoor meer informatie.
Betrouwbaarheid
Betrouwbaarheid zorgt ervoor dat uw toepassing kan voldoen aan de toezeggingen die u aan uw klanten hebt gedaan. Zie Controlelijst ontwerpbeoordeling voor betrouwbaarheidvoor meer informatie.
Container Apps is gebouwd op een Kubernetes-basis, die fungeert als de onderliggende infrastructuur. Tolerantiemechanismen zijn ingebouwd in Kubernetes die containers of pods bewaken en opnieuw opstarten als er problemen zijn. De tolerantiemechanismen omvatten een ingebouwde load balancer die verkeer distribueert over meerdere replica's van elke container-app. Met deze redundantie kan het systeem operationeel blijven, zelfs als één replica niet beschikbaar is.
Veiligheid
Beveiliging biedt garanties tegen opzettelijke aanvallen en misbruik van uw waardevolle gegevens en systemen. Zie de controlelijst ontwerpbeoordeling voor beveiliging voor meer informatie.
De volgende lijst bevat een overzicht van verschillende beveiligingsfuncties die in deze architectuur worden weggelaten, samen met andere aanbevelingen en overwegingen:
Deze architectuur maakt geen gebruik van privé-eindpunten, waardoor beveiligdere privéconnectiviteit met Azure-services mogelijk is door ze een IP-adres toe te wijzen vanuit uw virtuele netwerk. Wanneer privé-eindpunten worden gebruikt, kan openbare netwerktoegang worden uitgeschakeld. Deze aanpak houdt verkeer op de Microsoft-backbone en verbetert de beveiliging en naleving.
Netwerkactiviteit moet continu worden bewaakt om misbruik te detecteren en te voorkomen. U kunt deze aanpak bereiken met behulp van een Azure Firewall en routetabellen. Met de routetabellen kan verkeer dat een virtueel netwerk verlaat eerst worden doorgegeven via de firewall. Dit proces is een belangrijke stap om ervoor te zorgen dat uw architectuur niet kwetsbaar is voor aanvallen op gegevensexfiltratie.
Gebruik een WAF (Web Application Firewall) om te beschermen tegen veelvoorkomende beveiligingsproblemen. Gebruik Azure Front Door of Azure Application Gateway om een WAF in deze architectuur te implementeren.
Overweeg het gebruik van de ingebouwde verificatie- en autorisatiefunctie voor Container Apps, ook wel Easy Auth genoemd. Easy Auth verwerkt integratie met id-providers buiten uw web-app, waardoor de hoeveelheid code die u moet onderhouden, wordt verminderd.
Beheerde identiteit gebruiken voor workloadidentiteiten. Beheerde identiteit elimineert de noodzaak voor ontwikkelaars om verificatiereferenties te beheren. De basisarchitectuur wordt bijvoorbeeld geverifieerd bij SQL Server via een wachtwoord in een verbindingsreeks. Gebruik indien mogelijk Microsoft Entra-id's om te verifiëren bij Azure SQL Server.
Kostenoptimalisatie
Kostenoptimalisatie richt zich op manieren om onnodige uitgaven te verminderen en operationele efficiëntie te verbeteren. Zie controlelijst ontwerpbeoordeling voor kostenoptimalisatievoor meer informatie.
Gebruik de Azure-prijscalculator om de kosten van de services in deze architectuur te schatten.
Operationele uitmuntendheid
Operational Excellence behandelt de operationele processen die een toepassing implementeren en deze in productie houden. Zie de controlelijst ontwerpbeoordeling voor Operational Excellence voor meer informatie.
U kunt Azure Monitor en Application Insights gebruiken om 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 de volgende kaart weer te geven.
Zie Een app bewaken in Container Apps voor meer informatie.
Prestatie-efficiëntie
Prestatie-efficiëntie verwijst naar de mogelijkheid van uw workload om efficiënt te voldoen aan de behoeften van de gebruiker. Zie controlelijst ontwerpbeoordeling voor prestatie-efficiëntievoor meer informatie.
Deze oplossing is sterk afhankelijk van de KEDA-implementatie in Container Apps voor gebeurtenisgestuurd schalen. Wanneer u de virtuele klantenservice implementeert, plaatst deze continu orders. Door deze schaalaanpassing wordt de orderservice omhoog 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 wordt niet omlaag geschaald omdat er continu wordt gecontroleerd op orderafhandeling. Zie Schaalregels instellen in Container Apps voor meer informatie.
Medewerkers
Microsoft onderhoudt dit artikel. De volgende inzenders hebben dit artikel geschreven.
Hoofdauteur:
- Alice Gibbons | Cloud Native Global Black Belt
Andere Inzenders:
- Lynn Orrell | Principal Solution Specialist (GBB)
- Kendall Roden | Senior Program Manager
Als u niet-openbare LinkedIn-profielen wilt zien, meldt u zich aan bij LinkedIn.