Mappa eShopOnContainers till Azure Services
Dricks
Det här innehållet är ett utdrag från eBook, Architecting Cloud Native .NET Applications for Azure, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.
Även om det inte krävs är Azure väl lämpat för att stödja eShopOnContainers eftersom projektet skapades som ett molnbaserat program. Programmet är byggt med .NET, så det kan köras på Linux- eller Windows-containrar beroende på Docker-värden. Programmet består av flera autonoma mikrotjänster, var och en med sina egna data. De olika mikrotjänsterna visar olika metoder, allt från enkla CRUD-åtgärder till mer komplexa DDD- och CQRS-mönster. Mikrotjänster kommunicerar med klienter via HTTP och med varandra via meddelandebaserad kommunikation. Programmet stöder även flera plattformar för klienter, eftersom det använder HTTP som ett standardkommunikationsprotokoll och innehåller ASP.NET Core- och Xamarin-mobilappar som körs på Android-, iOS- och Windows-plattformar.
Programmets arkitektur visas i bild 2–5. Till vänster finns klientapparna, uppdelade i mobila, traditionella spa-smaker (Web, Web Single Page Application). Till höger finns de komponenter på serversidan som utgör systemet, som var och en kan finnas i Docker-containrar och Kubernetes-kluster. Den traditionella webbappen drivs av det ASP.NET Core MVC-programmet som visas i gult. Den här appen och mobil- och webb-SPA-programmen kommunicerar med de enskilda mikrotjänsterna via en eller flera API-gatewayer. API-gatewayerna följer mönstret "serverdelar för klientdelar" (BFF), vilket innebär att varje gateway är utformad för att stödja en viss klientdel. De enskilda mikrotjänsterna visas till höger om API-gatewayerna och innehåller både affärslogik och någon form av beständighetslager. De olika tjänsterna använder SQL Server-databaser, Redis-cacheinstanser och MongoDB/CosmosDB-butiker. Längst till höger finns systemets Event Bus, som används för kommunikation mellan mikrotjänsterna.
Bild 2-5. Arkitekturen eShopOnContainers.
Komponenterna på serversidan i den här arkitekturen mappar enkelt till Azure-tjänster.
Orkestrering och klustring av containrar
Programmets containervärdtjänster, från ASP.NET Core MVC-appar till enskilda katalog- och beställningsmikrotjänster, kan hanteras i Azure Kubernetes Service (AKS). Programmet kan köras lokalt på Docker och Kubernetes, och samma containrar kan sedan distribueras till mellanlagrings- och produktionsmiljöer som finns i AKS. Den här processen kan automatiseras som vi ser i nästa avsnitt.
AKS tillhandahåller hanteringstjänster för enskilda kluster av containrar. Programmet distribuerar separata containrar för varje mikrotjänst i AKS-klustret, enligt arkitekturdiagrammet ovan. Med den här metoden kan varje enskild tjänst skalas separat enligt resursbehoven. Varje mikrotjänst kan också distribueras oberoende av varandra, och helst bör sådana distributioner medföra noll systemavbrott.
API-gateway
eShopOnContainers-programmet har flera klientdelsklienter och flera olika serverdelstjänster. Det finns ingen en-till-en-korrespondens mellan klientprogrammen och de mikrotjänster som stöder dem. I ett sådant scenario kan det finnas en hel del komplexitet när du skriver klientprogramvara för gränssnitt med de olika serverdelstjänsterna på ett säkert sätt. Varje klient skulle behöva hantera den här komplexiteten på egen hand, vilket resulterar i duplicering och många platser där uppdateringar när tjänster ändras eller nya principer implementeras.
Azure API Management (APIM) hjälper organisationer att publicera API:er på ett konsekvent och hanterbart sätt. APIM består av tre komponenter: API Gateway och administrationsportalen (Azure-portalen) och en utvecklarportal.
API Gateway accepterar API-anrop och dirigerar dem till rätt serverdels-API. Den kan också tillhandahålla ytterligare tjänster som verifiering av API-nycklar eller JWT-token och API-transformering i farten utan kodändringar (till exempel för att hantera klienter som förväntar sig ett äldre gränssnitt).
I Azure-portalen definierar du API-schemat och paketera olika API:er i produkter. Du kan också konfigurera användaråtkomst, visa rapporter och konfigurera principer för kvoter eller omvandlingar.
Utvecklarportalen fungerar som huvudresurs för utvecklare. Det ger utvecklare API-dokumentation, en interaktiv testkonsol och rapporter om sin egen användning. Utvecklare använder också portalen för att skapa och hantera sina egna konton, inklusive prenumerations- och API-nyckelstöd.
Med APIM kan program exponera flera olika grupper av tjänster, som var och en tillhandahåller en serverdel för en viss klientdel. APIM rekommenderas för komplexa scenarier. För enklare behov kan den lätta API Gateway Ocelot användas. Appen eShopOnContainers använder Ocelot på grund av dess enkelhet och eftersom den kan distribueras till samma programmiljö som själva programmet. Läs mer om eShopOnContainers, APIM och Ocelot.
Ett annat alternativ om ditt program använder AKS är att distribuera Azure Gateway Ingress Controller som en podd i ditt AKS-kluster. Med den här metoden kan klustret integreras med en Azure Application Gateway, vilket gör att gatewayen kan lastbalansera trafik till AKS-poddarna. Läs mer om Azure Gateway Ingress Controller för AKS.
Data
De olika serverdelstjänster som används av eShopOnContainers har olika lagringskrav. Flera mikrotjänster använder SQL Server-databaser. Basket-mikrotjänsten utnyttjar en Redis-cache för sin beständighet. Mikrotjänsten Locations förväntar sig ett MongoDB-API för sina data. Azure stöder var och en av dessa dataformat.
För SQL Server-databasstöd har Azure produkter för allt från enkla databaser upp till elastiska SQL Database-pooler med hög skalbarhet. Enskilda mikrotjänster kan konfigureras för att snabbt och enkelt kommunicera med sina egna enskilda SQL Server-databaser. Dessa databaser kan skalas efter behov för att stödja varje separat mikrotjänst efter behov.
eShopOnContainers-programmet lagrar användarens aktuella varukorg mellan begäranden. Den här aspekten hanteras av basketmikrotjänsten som lagrar data i en Redis-cache. Under utveckling kan den här cachen distribueras i en container, medan den i produktion kan använda Azure Cache for Redis. Azure Cache for Redis är en fullständigt hanterad tjänst som erbjuder hög prestanda och tillförlitlighet utan att du behöver distribuera och hantera Redis-instanser eller containrar på egen hand.
Mikrotjänsten Locations använder en MongoDB NoSQL-databas för sin beständighet. Under utvecklingen kan databasen distribueras i en egen container, medan tjänsten i produktion kan använda Azure Cosmos DB:s API för MongoDB. En av fördelarna med Azure Cosmos DB är dess möjlighet att utnyttja flera olika kommunikationsprotokoll, inklusive ett SQL API och vanliga NoSQL-API:er, inklusive MongoDB, Cassandra, Gremlin och Azure Table Storage. Azure Cosmos DB erbjuder en fullständigt hanterad och globalt distribuerad databas som en tjänst som kan skalas för att uppfylla behoven hos de tjänster som använder den.
Distribuerade data i molnbaserade program beskrivs mer i detalj i kapitel 5.
Event Bus
Programmet använder händelser för att kommunicera ändringar mellan olika tjänster. Den här funktionen kan implementeras med olika implementeringar och lokalt använder programmet eShopOnContainers RabbitMQ. När programmet finns i Azure använder det Azure Service Bus för sina meddelanden. Azure Service Bus är en fullständigt hanterad meddelandekö för integrering som gör att program och tjänster kan kommunicera med varandra på ett frikopplat, tillförlitligt och asynkront sätt. Azure Service Bus stöder enskilda köer och separata ämnen för att stödja scenarier för utgivare och prenumeranter. Programmet eShopOnContainers använder ämnen med Azure Service Bus för att stödja distribution av meddelanden från en mikrotjänst till andra mikrotjänster som behövs för att reagera på ett visst meddelande.
Motståndskraft
När eShopOnContainers-programmet har distribuerats till produktion skulle det kunna dra nytta av flera tillgängliga Azure-tjänster för att förbättra dess återhämtning. Programmet publicerar hälsokontroller som kan integreras med Application Insights för att tillhandahålla rapportering och aviseringar baserat på appens tillgänglighet. Azure-resurser tillhandahåller även diagnostikloggar som kan användas för att identifiera och korrigera buggar och prestandaproblem. Resursloggar innehåller detaljerad information om när och hur olika Azure-resurser används av programmet. Du får lära dig mer om molnbaserade återhämtningsfunktioner i kapitel 6.