Redigera

Dela via


Distribuera mikrotjänster med Azure Container Apps och Dapr

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

Den här artikeln beskriver en lösning för att köra ett orderhanteringssystem med 10 mikrotjänster i Azure Container Apps. Lösningen använder också metodtips för mikrotjänster via Dapr och händelsedriven skalning med KEDA.

Dapr och Traefik är varumärken som tillhör respektive företag. Ingen bekräftelse understås av användningen av dessa märken.

Arkitektur

Diagram som visar ett orderhanteringssystem med mikrotjänster i Container Apps.

Ladda ned en PowerPoint-fil med den här arkitekturen.

Dataflöde

Den här lösningen använder Bicep-mallar för att köra distributionen av Red Dog-orderhanteringssystemet och dess stöd för Azure-infrastruktur. Arkitekturen består av en enda Azure Container Apps-miljö som är värd för 10 .NET Core-mikrotjänstprogram. Du använder .NET Core Dapr SDK för att integrera med Azure-resurser via byggblocken publish-subscribe (pub/sub) och State and Binding. Även om Dapr vanligtvis ger flexibilitet när du implementerar komponenter baseras den här lösningen på ett yttrande. Tjänsterna använder också KEDA-skalningsregler för att tillåta skalning baserat på händelseutlösare och skala till noll-scenarier.

I följande lista beskrivs varje mikrotjänst och den Azure Container Apps-konfiguration som den distribuerar med. Se lagringsplatsen för reddog-kod på GitHub för att visa koden.

  1. Traefik: Den grundläggande proxyn för att dirigera användarbegäranden från användargränssnittet till redovisningen och Makeline-tjänsterna för den interaktiva instrumentpanelen.

  2. användargränssnitt: En instrumentpanel som visar order i realtid och aggregerade försäljningsdata för Red Dog-orderhanteringssystemet.

  3. Virtuell kund: Ett kundsimuleringsprogram som simulerar kunder som gör beställningar via ordertjänsten.

  4. Ordertjänst: ETT CRUD-API för att placera och hantera beställningar.

  5. Redovisningstjänst: En tjänst som bearbetar, lagrar och aggregerar orderdata. Den omvandlar kundorder till meningsfulla försäljningsmått som visas av användargränssnittet.

  6. Kvittotjänst: Ett arkiveringsprogram som genererar och lagrar orderkvitton för granskning och historiska ändamål.

  7. Lojalitetstjänst: En tjänst som hanterar lojalitetsprogrammet genom att spåra kundbelöningspoäng baserat på orderutgifter.

  8. Makeline-tjänst: En tjänst som ansvarar för att hantera en kö med aktuella beställningar som väntar på att uppfyllas. Den spårar bearbetningen och slutförandet av beställningarna av den virtuella arbetstjänsten.

  9. Virtuell arbetare: Ett arbetssimuleringsprogram som simulerar slutförandet av kundorder.

  10. Bootstrapper (visas inte): En tjänst som använder Entity Framework Core för att initiera tabellerna i Azure SQL Database för användning med redovisningstjänsten.

Tjänst Ingress Dapr-komponenter KEDA-skalningsregler
Traefik Externt Dapr är inte aktiverat HTTP
UI Internt Dapr är inte aktiverat HTTP
Virtuell kund Ingen Tjänst-till-tjänst-anrop Ej tillämpligt
Beställningstjänst Internt Pub/sub: Azure Service Bus HTTP
Redovisningstjänst Internt Pub/sub: Azure Service Bus Azure Service Bus-ämneslängd, HTTP
Kvittotjänst Internt Pub/sub: Azure Service Bus
Bindning: Azure Blob
Azure Service Bus-ämneslängd
Lojalitetstjänst Internt Pub/sub: Azure Service Bus
Tillstånd: Azure Cosmos DB
Azure Service Bus-ämneslängd
Makeline-tjänst Internt Pub/sub: Azure Service Bus
Tillstånd: Azure Redis
Azure Service Bus-ämneslängd, HTTP
Virtuell arbetare Ingen Tjänst-till-tjänst-anrop
Bindning: Cron
Ej tillämpligt

Kommentar

Du kan också köra Bootstrapper i en containerapp. Den här tjänsten körs dock en gång för att skapa databasen och skalas sedan till noll när du har skapat de nödvändiga objekten i Azure SQL Database.

Komponenter

Den här lösningen använder följande komponenter:

  • Azure-resursgrupper är logiska containrar för Azure-resurser. Du använder en enskild resursgrupp för att strukturera allt som är relaterat till den här lösningen i Azure Portal.
  • Azure Container Apps är en fullständigt hanterad, serverlös containertjänst som används för att skapa och distribuera moderna appar i stor skala. I den här lösningen är du värd för alla 10 mikrotjänster i Azure Container Apps och distribuerar dem till en enda Container App-miljö. Den här miljön fungerar som en säker gräns runt systemet.
  • Azure Service Bus är en fullständigt hanterad meddelandekö för företag med köer och publiceringsprenumeranter. I den här lösningen använder du den för implementeringen av Dapr pub/sub-komponenten. Flera tjänster använder den här komponenten. Ordertjänsten publicerar meddelanden på bussen och tjänsterna Makeline, accounting, loyalty och receipt prenumererar på dessa meddelanden.
  • Azure Cosmos DB är en NoSQL-hanterad databastjänst med flera modeller. Använd den som en Dapr state store-komponent för lojalitetstjänsten för att lagra kundens lojalitetsdata.
  • Azure Cache for Redis är en distribuerad, minnesintern, skalbar hanterad Redis-cache. Den används som en Dapr-tillståndslagerkomponent för Makeline-tjänsten för att lagra data på de beställningar som bearbetas.
  • Azure SQL Database är en intelligent, skalbar relationsdatabastjänst som skapats för molnet. Skapa den för redovisningstjänsten, som använder Entity Framework Core för att interagera med databasen. Bootstrapper-tjänsten ansvarar för att konfigurera SQL-tabellerna i databasen och körs sedan en gång innan anslutningen till redovisningstjänsten upprättas.
  • Azure Blob Storage lagrar enorma mängder ostrukturerade data som text eller binära filer. Kvittotjänsten använder Blob Storage via en Dapr-utdatabindning för att lagra orderkvittona.
  • Traefik är en ledande modern omvänd proxy och lastbalanserare som gör det enkelt att distribuera mikrotjänster. I den här lösningen använder du Traefiks dynamiska konfigurationsfunktion för att utföra sökvägsbaserad routning från användargränssnittet, som är ett Vue.js ensidesprogram (SPA). Den här konfigurationen möjliggör även direkta API-anrop till serverdelstjänsterna för testning.
  • Med Azure Monitor kan du samla in, analysera och agera på kundinnehållsdata från dina Azure-infrastrukturmiljöer. Du använder den med Application Insights för att visa containerloggarna och samla in mått från mikrotjänsterna.

Alternativ

I den här arkitekturen distribuerar du en Traefik-proxy för att aktivera sökvägsbaserad routning för Vue.js-API:et. Det finns många alternativa proxyservrar med öppen källkod som du kan använda för detta ändamål. Två andra populära projekt är NGINX och HAProxy.

All Azure-infrastruktur, förutom Azure SQL Database, använder Dapr-komponenter för samverkan. En fördel med Dapr är att du kan växla alla dessa komponenter genom att ändra distributionskonfigurationen för containerappar. I det här fallet valdes Azure Service Bus, Azure Cosmos DB, Cache for Redis och Blob Storage för att visa upp några av de 70+ Dapr-komponenter som är tillgängliga. En lista över alternativa pub-/underkoordinatorer, tillståndslager och utdatabindningar finns i Dapr-dokumenten.

Information om scenario

Mikrotjänster är en allt populärare arkitekturstil som kan ha många fördelar, inklusive hög skalbarhet, kortare utvecklingscykler och ökad enkelhet. Du kan använda containrar som en mekanism för att distribuera mikrotjänstprogram och sedan använda en containerorkestrerare som Kubernetes för att förenkla åtgärderna. Det finns många faktorer att tänka på för storskaliga mikrotjänstarkitekturer. Infrastrukturplattformen kräver vanligtvis betydande förståelse för komplexa tekniker som containerorkestreringarna.

Azure Container Apps är en fullständigt hanterad serverlös containertjänst för att köra moderna program i stor skala. Det gör att du kan distribuera containerbaserade appar genom abstraktion av den underliggande plattformen. På så sätt behöver du inte hantera en komplicerad infrastruktur. Azure Container Apps drivs av tekniker med öppen källkod.

Den här arkitekturen använder Azure Container Apps-integrering med en hanterad version av Dapr (Distributed Application Runtime). Dapr är ett öppen källkod projekt som hjälper utvecklare med de inneboende utmaningarna i distribuerade program, till exempel tillståndshantering och tjänstanrop.

Azure Container Apps tillhandahåller också en hanterad version av Kubernetes Händelsedriven autoskalning (KEDA). MED KEDA kan dina containrar skalas automatiskt baserat på inkommande händelser från externa tjänster som Azure Service Bus och Azure Cache for Redis.

Du kan också aktivera HTTPS-ingress i Azure Container Apps utan att skapa fler Azure-nätverksresurser. Du kan använda Envoy-proxy, vilket också tillåter scenarier för trafikdelning.

Information om hur Azure Container Apps jämförs med andra värdplattformar för containrar i Azure finns i Jämföra containerappar med andra Azure-containeralternativ.

Den här artikeln beskriver en lösning för att köra ett orderhanteringssystem med 10 mikrotjänster i Azure Container Apps. Lösningen använder också metodtips för mikrotjänster via Dapr och händelsedriven skalning med KEDA.

Potentiella användningsfall

Den här lösningen gäller för alla organisationer som använder tillståndslösa och tillståndskänsliga mikrotjänster för distribuerade system. Lösningen är bäst för konsumentpaketerade varor och tillverkningsindustrier som har ett beställnings- och uppfyllandesystem.

Dessa andra lösningar har liknande design:

  • Arkitektur för mikrotjänster på Azure Kubernetes Service (AKS)
  • Arkitektur för mikrotjänster i Azure Functions
  • Händelsedrivna arkitekturer

Att tänka på

Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som du kan använda för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.

Tillförlitlighet

Tillförlitlighet säkerställer att ditt program kan uppfylla de åtaganden du gör gentemot dina kunder. Mer information finns i checklistan för Designgranskning för tillförlitlighet.

Azure Container Apps körs i Kubernetes i bakgrunden. Återhämtningsmekanismer är inbyggda i Kubernetes som övervakar och startar om containrar, eller poddar, om det finns problem. Återhämtningsmekanismerna kombineras med den inbyggda lastbalanseraren för att köra flera repliker av varje containerapp. Med den här redundansen kan lösningen tolerera att en instans inte är tillgänglig.

Du kan använda Azure Monitor och Application Insights för att övervaka Azure Container Apps. Du kan visa containerloggar genom att navigera i portalen till fönstret Loggar i varje containerapp och sedan köra följande Kusto-fråga. I det här exemplet visas loggar för Makeline-tjänstappen.

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

Programkartan i Application Insights visar också hur tjänsterna kommunicerar i realtid. Du kan sedan använda dem för felsökningsscenarier. Gå till programkartan under Application Insights-resursen för att visa något som liknar följande.

Skärmbild som visar en programkarta i Application Insights.

Mer information om övervakning av Azure Container Apps finns i Övervaka en app i Azure Container Apps.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i checklistan Designgranskning för kostnadsoptimering.

Använd Priskalkylatorn för Azure för att beräkna kostnaden för tjänsterna i den här arkitekturen.

Prestandaeffektivitet

Prestandaeffektivitet är arbetsbelastningens förmåga att skala för att uppfylla användarnas krav på ett effektivt sätt. Mer information finns i checklistan för Designgranskning för prestandaeffektivitet.

Den här lösningen är starkt beroende av KEDA-implementeringen i Azure Container Apps för händelsedriven skalning. När du distribuerar den virtuella kundtjänsten kommer den kontinuerligt att göra beställningar, vilket gör att ordertjänsten skalas upp via HTTP KEDA-skalningstjänsten. När ordertjänsten publicerar beställningarna på servicebussen gör SERVICE Bus KEDA-skalarna att bokförings-, kvitto-, makeline- och lojalitetstjänsterna skalas upp. Containerapparna UI och Traefik konfigurerar även HTTP KEDA-skalor så att apparna skalas när fler användare kommer åt instrumentpanelen.

När den virtuella kunden inte körs skalas alla mikrotjänster i den här lösningen till noll förutom för virtual worker- och Makeline-tjänster. Den virtuella arbetaren skalas inte ned eftersom den ständigt söker efter orderuppfyllelse. Mer information om skalning i containerappar finns i Ange skalningsregler i Azure Container Apps. Mer information om KEDA-skalare finns i KEDA-dokumentationen om skalare.

Distribuera det här scenariot

Distributionsinstruktioner finns i Red Dog Demo: Distribution av Azure Container Apps på GitHub.

Red Dog Demo: Microservices-integrering är en paketerad appmall som bygger på de föregående kodtillgångarna för att demonstrera integreringen av Azure Container Apps, App Service, Functions och API Management och etablerar infra, distribuerar koden med GitHub Actions.

Deltagare

Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.

Huvudförfattare:

Övriga medarbetare:

Om du vill se icke-offentliga LinkedIn-profiler loggar du in på LinkedIn.

Nästa steg