Distribuera mikrotjänster med Azure Container Apps och Dapr
Den här artikeln beskriver en lösning för att köra ett orderhanteringssystem som har 10 mikrotjänster i Azure Container Apps. Lösningen använder också metodtips för mikrotjänster via Dapr (Distributed Application Runtime) och händelsedriven skalning med Kubernetes händelsedriven autoskalning (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
Ladda ned en PowerPoint-fil med den här arkitekturen.
Dataflöde
Den här lösningen beskriver ett fiktivt Red Dog-orderhanteringssystem och dess stöd för Azure-infrastruktur. Arkitekturen består av en enda Container Apps-miljö som är värd för 10 .NET Core-mikrotjänstprogram. Lösningen använder Dapr SDK för att integrera med Azure-resurser via byggblocken publish-subscribe, state och binding. Tjänsterna använder också KEDA-skalningsregler för att tillåta skalning baserat på händelseutlösare och scenarier med skalning till noll.
Följande dataflöde motsvarar föregående diagram:
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.
användargränssnitt: En instrumentpanel som visar order i realtid och aggregerade försäljningsdata för Red Dog-orderhanteringssystemet.
Virtuell kund: Ett kundsimuleringsprogram som simulerar kunder som gör beställningar via ordertjänsten.
Ordertjänst: Skapa, läsa, uppdatera och ta bort API:et för att placera och hantera beställningar.
Redovisningstjänst: En tjänst som bearbetar, lagrar och aggregerar orderdata. Den omvandlar kundorder till meningsfulla försäljningsmått som användargränssnittet visar.
Kvittotjänst: Ett arkiveringsprogram som genererar och lagrar orderkvitton för granskning och historiska ändamål.
Lojalitetstjänst: En tjänst som hanterar lojalitetsprogrammet genom att spåra kundbelöningspoäng baserat på orderutgifter.
Makeline-tjänst: En tjänst som hanterar 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.
Virtuell arbetare: Ett arbetssimuleringsprogram som simulerar slutförandet av kundorder.
| Tjänst | Inledning | Dapr-komponenter | KEDA-skalningsregler |
|---|---|---|---|
| Traefik | Externt | Dapr är inte aktiverat | HTTP |
| Användargränssnitt (UI) | Internt | Dapr är inte aktiverat | HTTP |
| Virtuell kund | Ingen | Tjänst-till-tjänst-anrop | Ej tillämpligt |
| Beställningstjänst | Internt | Publicera prenumeration: Azure Service Bus | HTTP |
| Redovisningstjänst | Internt | Publicera-prenumerera: Service Bus | Service Bus-ämneslängd, HTTP |
| Kvittotjänst | Internt | Publicera-prenumerera: Service Bus Bindning: Azure Blob Storage |
Service Bus-ämneslängd |
| Lojalitetstjänst | Internt | Publicera-prenumerera: Service Bus Tillstånd: Azure Cosmos DB |
Service Bus-ämneslängd |
| Makeline-tjänst | Internt | Publicera-prenumerera: Service Bus Tillstånd: Azure Cache for Redis |
Service Bus-ämneslängd, HTTP |
| Virtuell arbetare | Ingen | Tjänst-till-tjänst-anrop Bindning: Cron |
Ej tillämpligt |
Kommentar
Du kan också implementera Bootstrap i en containerapp. Den här tjänsten körs dock en gång för att skapa databasen och skalar sedan till noll när den har skapat de nödvändiga objekten i Azure SQL Database.
Komponenter
Application Insights är en utökningsbar tjänst för hantering av programprestanda som du kan använda för att övervaka aktiva program och automatiskt identifiera prestandaavvikelser. I den här arkitekturen använder du Application Insights med Azure Monitor för att visa containerloggarna och samla in mått från mikrotjänsterna.
Blob Storage är en molnbaserad lösning för lagring av enorma mängder ostrukturerade data som text eller binära filer. I den här arkitekturen använder en kvittotjänst Blob Storage via en Dapr-utdatabindning för att lagra orderkvittona.
Azure Cache for Redis är en distribuerad, minnesintern, skalbar hanterad Redis-cache. I den här arkitekturen används den som en Dapr-tillståndslagerkomponent för Makeline-tjänsten för att lagra data på de beställningar som bearbetas.
Azure Cosmos DB är en NoSQL-hanterad databastjänst med flera modeller. I den här arkitekturen används den som en Dapr state store-komponent för lojalitetstjänsten för att lagra kundernas lojalitetsdata.
Azure Monitor är en enhetlig plattform som gör att du kan samla in, analysera och agera på kundinnehållsdata från dina Azure-infrastrukturmiljöer. I den här arkitekturen använder du Azure Monitor med Application Insights för att visa containerloggarna och samla in mått från mikrotjänsterna.
Service Bus är en fullständigt hanterad meddelandekö för företag som har köer och publiceringsprenumeranter. I den här arkitekturen använder du Service Bus för implementeringen av Dapr publish-subscribe-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.
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 arkitekturen är du värd för alla 10 mikrotjänster i Container Apps och distribuerar dem till en enda Container Apps-miljö. Den här miljön fungerar som en säker gräns runt systemet.
SQL Database är en intelligent, skalbar relationsdatabastjänst som skapats för molnet. I den här arkitekturen fungerar den som datalager 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. Sedan körs den en gång innan anslutningen till redovisningstjänsten upprättas.
Traefik är en omvänd proxy och lastbalanserare som används för att dirigera nätverkstrafik till mikrotjänster. I den här arkitekturen 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. Den här konfigurationen möjliggör även direkta API-anrop till serverdelstjänsterna för testning.
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 vanliga projekt är NGINX och HAProxy.
All Azure-infrastruktur, förutom 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 scenariot visar Service Bus, Azure Cosmos DB, Azure Cache for Redis och Blob Storage några av de mer än 70 tillgängliga Dapr-komponenterna. En lista över alternativa asynkrona asynkrona abonnenter, tillståndslager och utdatabindningar finns i Dapr-dokumenten.
Information om scenario
Mikrotjänster är en allmänt antagen arkitekturstil. De ger fördelar som skalbarhet, flexibilitet och oberoende distributioner. 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 en betydande förståelse för komplexa tekniker som containerorkestrerare.
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 en abstraktion av den underliggande plattformen. Med den här metoden behöver du inte hantera en komplicerad infrastruktur.
Den här arkitekturen använder Container Apps-integrering med en hanterad version av Dapr. Dapr är ett projekt med öppen källkod som hjälper utvecklare att övervinna de inneboende utmaningarna i distribuerade program, till exempel tillståndshantering och tjänstanrop.
Container Apps tillhandahåller också en hanterad version av KEDA. MED KEDA kan dina containrar skalas automatiskt baserat på inkommande händelser från externa tjänster som Service Bus och Azure Cache for Redis.
Du kan också aktivera HTTPS-ingress i Container Apps utan att skapa fler Azure-nätverksresurser. Du kan använda Envoy-proxy, vilket också tillåter scenarier för trafikdelning.
Mer information finns i Jämför containerappar med andra Azure-containeralternativ.
Den här artikeln beskriver en lösning för att köra ett orderhanteringssystem som har 10 mikrotjänster i 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.
Följande 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 Well-Architected Framework.
Tillförlitlighet
Tillförlitlighet hjälper till att säkerställa att ditt program kan uppfylla de åtaganden som du gör gentemot dina kunder. Mer information finns i checklistan för Designgranskning för tillförlitlighet.
Container Apps bygger på en Kubernetes-grund som fungerar som den underliggande infrastrukturen. Återhämtningsmekanismer är inbyggda i Kubernetes som övervakar och startar om containrar, eller poddar, om det finns problem. Återhämtningsmekanismerna omfattar en inbyggd lastbalanserare som distribuerar trafik över flera repliker av varje containerapp. Med den här redundansen kan systemet fortsätta att fungera, även om en replik blir otillgänglig.
Säkerhet
Säkerhet ger garantier mot avsiktliga attacker och missbruk av dina värdefulla data och system. Mer information finns i Checklista för designgranskning för säkerhet.
I följande lista beskrivs flera säkerhetsfunktioner som utelämnas i den här arkitekturen, tillsammans med andra rekommendationer och överväganden:
Den här arkitekturen använder inte privata slutpunkter, vilket möjliggör säkrare, privata anslutningar till Azure-tjänster genom att tilldela dem en IP-adress från ditt virtuella nätverk. När privata slutpunkter används kan åtkomst till offentliga nätverk inaktiveras. Den här metoden behåller trafiken på Microsofts stamnät och förbättrar säkerhet och efterlevnad.
Nätverksaktiviteten bör övervakas kontinuerligt för att upptäcka och förhindra missbruk. Du kan uppnå den här metoden med hjälp av en Azure Firewall och routningstabeller. Routningstabellerna gör det möjligt att skicka trafik som lämnar ett virtuellt nätverk genom brandväggen först. Den här processen är ett viktigt steg för att säkerställa att din arkitektur inte är sårbar för dataexfiltreringsattacker.
Använd en brandvägg för webbprogram (WAF) för att skydda mot vanliga säkerhetsrisker. Använd Azure Front Door eller Azure Application Gateway för att implementera en WAF i den här arkitekturen.
Överväg att använda den inbyggda autentiserings- och auktoriseringsfunktionen för Container Apps, som kallas Easy Auth. Easy Auth hanterar integrering med identitetsprovidrar utanför webbappen, vilket kan minska mängden kod som du behöver underhålla.
Använd hanterad identitet för arbetsbelastningsidentiteter. Hanterad identitet eliminerar behovet av att utvecklare hanterar autentiseringsuppgifter. Till exempel autentiserar den grundläggande arkitekturen till SQL Server via lösenord i en anslutningssträng. När det är möjligt använder du Microsoft Entra-ID:t för att autentisera till Azure SQL Server.
Kostnadsoptimering
Kostnadsoptimering fokuserar 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.
Operativ skicklighet
Operational Excellence omfattar de driftsprocesser som distribuerar ett program och håller det igång i produktion. Mer information finns i Checklista för designgranskning för Operational Excellence.
Du kan använda Azure Monitor och Application Insights för att övervaka 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 karta.
Mer information finns i Övervaka en app i Container Apps.
Prestandaeffektivitet
Prestandaeffektivitet syftar på arbetsbelastningens förmåga att skala för att effektivt uppfylla användarnas krav. Mer information finns i checklistan för Designgranskning för prestandaeffektivitet.
Den här lösningen är starkt beroende av KEDA-implementeringen i Container Apps för händelsedriven skalning. När du distribuerar den virtuella kundtjänsten lägger den kontinuerligt beställningar. Den här skalningen gör att ordertjänsten skalas upp via HTTP KEDA-skalningen. 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 kontinuerligt söker efter orderuppfyllelse. Mer information finns i Ange skalningsregler i Container Apps.
Deltagare
Microsoft ansvarar för den här artikeln. Följande deltagare skrev den här artikeln.
Huvudförfattare:
- Alice Gibbons | Molnbaserat globalt svart bälte
Övriga medarbetare:
- Lynn Orrell | Huvudlösningsspecialist (GBB)
- Kendall Roden | Senior Program Manager
Om du vill se linkedin-profiler som inte är offentliga loggar du in på LinkedIn.