Molndesignmönster som stöder prestandaeffektivitet
När du utformar arbetsbelastningsarkitekturer bör du använda branschmönster som hanterar vanliga utmaningar. Mönster kan hjälpa dig att göra avsiktliga kompromisser inom arbetsbelastningar och optimera för önskat resultat. De kan också bidra till att minska risker som kommer från specifika problem, vilket kan påverka tillförlitlighet, säkerhet, kostnad och åtgärder. Om de inte minimeras leder riskerna så småningom till ineffektivitet i prestandan. Dessa mönster backas upp av verkliga upplevelser, är utformade för molnskala och driftsmodeller och är i sig leverantörsoberoende. Att använda välkända mönster som ett sätt att standardisera din arbetsbelastningsdesign är en del av driftseffektivitet.
Många designmönster har direkt stöd för en eller flera arkitekturpelare. Designmönster som stöder pelare för prestandaeffektivitet hanterar skalbarhet, prestandajustering, uppgiftsprioritering och borttagning av flaskhalsar.
Designmönster för prestandaeffektivitet
I följande tabell sammanfattas molndesignmönster som stöder målen med prestandaeffektivitet.
Mönster | Sammanfattning |
---|---|
Asynkront begäransvar | Förbättrar svarstiden och skalbarheten för system genom att ta bort frånkopplingen av begäran- och svarsfaserna för interaktioner för processer som inte behöver omedelbara svar. Genom att använda ett asynkront mönster kan du maximera samtidigheten på serversidan. Du kan använda det här mönstret för att schemalägga arbete som ska slutföras som kapacitet tillåter. |
Serverdelar för klienter | Individualiserar tjänstlagret för en arbetsbelastning genom att skapa separata tjänster som är exklusiva för ett specifikt klientdelsgränssnitt. Med den här separationen kan du optimera på sätt som kanske inte är möjliga med ett delat tjänstlager. När du hanterar enskilda klienter på olika sätt kan du optimera prestanda för en specifik klients begränsningar och funktioner. |
Bulkhead | Introducerar segmentering mellan komponenter för att isolera tryckvågsradien för fel. Med den här designen kan varje skott vara individuellt skalbart för att uppfylla behoven för uppgiften som är inkapslad i skottet. |
Cachereservera | Optimerar åtkomsten till ofta lästa data genom att införa ett cacheminne som fylls på begäran. Cachen används sedan för efterföljande begäranden om samma data. Det här mönstret är särskilt användbart med läsintensiva data som inte ändras ofta och som kan tolerera en viss föråldring. Målet med den här implementeringen är att ge bättre prestanda i systemet genom att avlasta den här typen av data till en cache i stället för att köpa dem från datalagret. |
Koreografi | Samordnar beteendet för autonoma distribuerade komponenter i en arbetsbelastning med hjälp av decentraliserad, händelsedriven kommunikation. Det här mönstret kan vara ett alternativ när prestandaflaskhalsar uppstår i en centraliserad orkestreringstopologi. |
Kretsbrytare | Förhindrar kontinuerliga begäranden till ett beroende som inte fungerar eller inte är tillgängligt. En metod för återförsök vid fel kan leda till överdriven resursanvändning under beroendeåterställning och kan även överbelasta prestanda för ett beroende som försöker återställa. |
Anspråkskontroll | Separerar data från meddelandeflödet, vilket gör det möjligt att separat hämta data som är relaterade till ett meddelande. Det här mönstret förbättrar effektiviteten och prestandan för meddelandeutgivare, prenumeranter och själva meddelandebussen när systemet hanterar stora datanyttolaster. Det fungerar genom att minska storleken på meddelanden och se till att konsumenterna endast hämtar nyttolastdata vid behov och vid en lämplig tidpunkt. |
Konkurrerande konsumenter | Tillämpar distribuerad och samtidig bearbetning för att effektivt hantera objekt i en kö. Den här modellen stöder distribution av belastning över alla konsumentnoder och dynamisk skalning som baseras på ködjup. |
Konsolidering av beräkningsresurser | Optimerar och konsoliderar beräkningsresurser genom att öka densiteten. Det här mönstret kombinerar flera program eller komponenter i en arbetsbelastning i en delad infrastruktur. Den här konsolideringen maximerar användningen av beräkningsresurser genom att använda reservnodkapacitet för att minska överetablering. Containerorkestrerare är ett vanligt exempel. Stora (lodrätt skalade) beräkningsinstanser används ofta i resurspoolen för dessa infrastrukturer. |
CQRS (Command and Query Responsibility Segregation) | Separerar läs- och skrivåtgärder för ett programs datamodell. Den här separationen möjliggör riktade prestanda- och skalningsoptimeringar för varje åtgärds specifika syfte. Den här designen är mest användbar i program som har ett högt läs-till-skriv-förhållande. |
Distributionsstämplar | Tillhandahåller en metod för att släppa en specifik version av ett program och dess infrastruktur som en kontrollerad distributionsenhet, baserat på antagandet att samma eller olika versioner kommer att distribueras samtidigt. Det här mönstret överensstämmer ofta med de definierade skalningsenheterna i din arbetsbelastning: eftersom ytterligare kapacitet behövs utöver vad en enskild skalningsenhet tillhandahåller distribueras ytterligare en distributionsstämpel för utskalning. |
Händelsekällor | Behandlar tillståndsändring som en serie händelser och samlar in dem i en oföränderlig logg med endast tillägg. Beroende på din arbetsbelastning kan det här mönstret, vanligtvis kombinerat med CQRS, en lämplig domändesign och strategisk ögonblicksbild, förbättra prestandan. Prestandaförbättringar beror på atomära tilläggsåtgärder och undvikande av databaslåsning för skrivningar och läsningar. |
Federerade identiteter | Delegerar förtroende till en identitetsprovider som är extern för arbetsbelastningen för att hantera användare och tillhandahålla autentisering för ditt program. När du avlastar användarhantering och autentisering kan du ägna programresurser åt andra prioriteringar. |
Gatekeeper | Avlastning av bearbetning av begäranden som är specifikt för säkerhet och åtkomstkontroll framtvingande före och efter vidarebefordran av begäran till en serverdelsnod. Det här mönstret används ofta för att implementera begränsning på gatewaynivå i stället för att implementera hastighetskontroller på nodnivå. Det går inte att samordna hastighetstillståndet mellan alla noder. |
Gateway-samling | Förenklar klientinteraktioner med din arbetsbelastning genom att aggregera anrop till flera serverdelstjänster i en enda begäran. Den här designen kan medföra kortare svarstider än en design där klienten upprättar flera anslutningar. Cachelagring är också vanligt i aggregeringsimplementeringar eftersom det minimerar anrop till serverdelssystem. |
Gateway-avlastning | Avlastning av bearbetning av begäranden till en gatewayenhet före och efter vidarebefordran av begäran till en serverdelsnod. Genom att lägga till en gateway för avlastning i begärandeprocessen kan du använda färre resurser per nod eftersom funktionerna är centraliserade vid gatewayen. Du kan optimera implementeringen av avlastade funktioner oberoende av programkoden. Avlastade funktioner som tillhandahålls av plattformen är redan mycket högpresterande. |
Gateway-routning | Dirigerar inkommande nätverksbegäranden till olika serverdelssystem baserat på begärande avsikter, affärslogik och serverdelstillgänglighet. Med gateway-routning kan du distribuera trafik mellan noder i systemet för att balansera belastningen. |
Geode | Distribuerar system som körs i aktiv-aktiv-tillgänglighetslägen över flera geografiska områden. Det här mönstret använder datareplikering för att stödja idealet att alla klienter kan ansluta till valfri geografisk instans. Du kan använda den för att hantera ditt program från en region som är närmast din distribuerade användarbas. Detta minskar svarstiden genom att eliminera fjärrtrafik och eftersom du bara delar infrastruktur mellan användare som för närvarande använder samma geode. |
Övervakning av slutpunktshälsa | Ger ett sätt att övervaka hälsotillståndet eller statusen för ett system genom att exponera en slutpunkt som är särskilt utformad för det ändamålet. Du kan använda dessa slutpunkter för att förbättra belastningsutjämningen genom att dirigera trafik till endast noder som har verifierats som felfria. Med ytterligare konfiguration kan du också hämta mått på tillgänglig nodkapacitet. |
Indextabell | Optimerar datahämtning i distribuerade datalager genom att göra det möjligt för klienter att söka efter metadata så att data kan hämtas direkt, så att du inte behöver göra fullständiga genomsökningar av datalager. Klienter pekar på sin shard, partition eller slutpunkt, som kan aktivera dynamisk datapartitionering för prestandaoptimering. |
Materialiserad vy | Använder förberäknade vyer av data för att optimera datahämtning. De materialiserade vyerna lagrar resultatet av komplexa beräkningar eller frågor utan att databasmotorn eller klienten behöver beräknas om för varje begäran. Den här designen minskar den totala resursförbrukningen. |
Prioritetskö | Säkerställer att objekt med högre prioritet bearbetas och slutförs före objekt med lägre prioritet. Genom att separera objekt baserat på affärsprioritet kan du fokusera prestandaarbetet på det mest tidskänsliga arbetet. |
Utgivare/prenumerant | Frikopplar komponenter i en arkitektur genom att ersätta direkt kommunikation från klient till tjänst eller från klient till tjänst med kommunikation via en mellanliggande meddelandekoordinator eller händelsebuss. Genom att koppla bort utgivare från konsumenter kan du optimera beräkningen och koden specifikt för den uppgift som konsumenten behöver utföra för det specifika meddelandet. |
Köbaserad belastningsutjämning | Styr nivån för inkommande begäranden eller uppgifter genom att buffrar dem i en kö och låter köprocessorn hantera dem i kontrollerad takt. Den här metoden möjliggör avsiktlig design av dataflödesprestanda eftersom intaget av begäranden inte behöver korrelera med den hastighet som de bearbetas i. |
Scheduler-agentövervakare | Distribuerar och distribuerar uppgifter effektivt över ett system baserat på faktorer som kan observeras i systemet. Det här mönstret använder prestanda- och kapacitetsmått för att identifiera aktuell användning och dirigera uppgifter till en agent som har kapacitet. Du kan också använda den för att prioritera körning av arbete med högre prioritet framför arbete med lägre prioritet. |
Horisontell partitionering | Dirigerar inläsning till ett specifikt logiskt mål för att hantera en specifik begäran, vilket aktiverar samlokalisering för optimering. När du använder horisontell partitionering i din skalningsstrategi isoleras data eller bearbetning till en shard, så den konkurrerar endast om resurser med andra begäranden som dirigeras till fragmentet. Du kan också använda horisontell partitionering för att optimera baserat på geografi. |
Sidovagn | Utökar funktionerna i ett program genom att kapsla in icke-primära eller övergripande uppgifter i en tillhörande process som finns tillsammans med huvudprogrammet. Du kan flytta övergripande uppgifter till en enda process som kan skalas över flera instanser av huvudprocessen, vilket minskar behovet av att distribuera duplicerade funktioner för varje instans av programmet. |
Värddator för statiskt innehåll | Optimerar leveransen av statiskt innehåll till arbetsbelastningsklienter med hjälp av en värdplattform som är utformad för detta ändamål. Avlastning av ansvar till en extern värd hjälper till att minska överbelastningen och gör att du bara kan använda din programplattform för att leverera affärslogik. |
Begränsning | Begränsar hastigheten eller dataflödet för inkommande begäranden till en resurs eller komponent. När systemet är under hög efterfrågan hjälper det här mönstret till att minska överbelastningen som kan leda till flaskhalsar i prestanda. Du kan också använda den för att proaktivt undvika scenarier med bullriga grannar. |
Valet-nyckel | Ger säkerhetsbegränsad åtkomst till en resurs utan att använda en mellanliggande resurs för att proxy-åtkomsten. Detta avlastar bearbetningen som en exklusiv relation mellan klienten och resursen utan att kräva en ambassadörskomponent som behöver hantera alla klientbegäranden på ett högpresterande sätt. Fördelen med att använda det här mönstret är viktigast när proxyn inte lägger till värde i transaktionen. |
Nästa steg
Granska de molndesignmönster som stöder de andra Grundpelarna i Azure Well-Architected Framework: