Designa för att skala ut
Utforma programmet så att det kan skala horisontellt
En primär fördel med molnet är elastisk skalning – möjligheten att använda så mycket kapacitet som du behöver, skala ut när belastningen ökar och skala in när den extra kapaciteten inte behövs. Utforma ditt program så att det kan skalas horisontellt, lägga till eller ta bort instanser, matcha tillgång till efterfrågan.
Skalbarhet mäts med förhållandet mellan dataflödesvinst och resursökning. Helst i ett väldesignat system är båda talen proportionella: en dubbel allokering av resurser fördubblar dataflödet. Skalbarheten begränsas vanligtvis av införandet av flaskhalsar eller synkroniseringspunkter i systemet.
Rekommendationer
Undvik instansvaraktighet. Varaktighet, eller sessionstillhörighet, är när förfrågningar från samma klient alltid dirigeras till samma server. Fasthet begränsar programmets möjlighet att skala ut. Trafik från en högvolymanvändare distribueras till exempel inte mellan instanser. Orsaker till varaktighet kan vara lagring av sessionstillstånd i minnet och användning av datorspecifika nycklar för kryptering. Kontrollera att alla instanser kan hantera alla förfrågningar.
Identifiera flaskhalsar. Att skala ut är inte en magisk åtgärd för varje prestandaproblem. Om det exempelvis är serverdelsdatabasen som är flaskhalsen hjälper det inte att lägga till fler webbservrar. Identifiera och lös flaskhalsarna i systemet först innan du försöker lösa problemet med hjälp av fler instanser. Tillståndskänsliga delar i systemet är den mest troliga orsaken till flaskhalsar.
Dela upp arbetsbelastningar enligt skalbarhetskrav. Program består ofta av flera arbetsbelastningar med olika skalningskrav. Ett program kan till exempel ha en offentlig webbplats och en separat administrationswebbplats. På den offentliga webbplatsen kan det uppstå plötsliga toppar i trafiken, medan administrationsplatsen har en mindre, mer förutsägbar belastning.
Utforma autonoma och frikopplade komponenter som kommunicerar via asynkrona kommunikationsprotokoll. Helst bör komponenter ha sitt eget, oberoende tillstånd och använda händelser för att kommunicera ändringar eller aktiviteter till externa komponenter. Detta hjälper till att självständigt skala endast den överlagrade komponenten. Implementera mekanismer för flödeskontroll för att hantera trafik och för att försämras korrekt. Konsumenterna bör kontrollera sin egen konsumtionstakt. Producenterna bör kontrollera sin egen överföringshastighet, inklusive stopp. Meddelandeköer är bra alternativ för att absorbera extra arbetsbelastning och för att göra det möjligt för konsumenterna att tömma arbetet på fritiden.
Undvik onödig kommunikation, samordning och väntan.
Avlasta naturligt asynkrona uppgifter. Uppgifter som att skicka e-post, åtgärder där användaren inte behöver ett omedelbart svar och integrering med andra system är alla bra platser för att använda asynkrona meddelandemönster.
Omfördela resurskrävande uppgifter. Uppgifter som kräver mycket CPU- eller I/O-resurser bör flyttas till bakgrundsjobb, när så är möjligt, för att minimera belastningen på klientdelen som hanterar användarbegäranden.
Autoskalning baserat på liveanvändningsmått och använd inbyggda funktioner för automatisk skalning. Många beräkningstjänster i Azure har inbyggt stöd för autoskalning. Om programmet har en förutsägbar, vanlig arbetsbelastning kan du skala ut enligt ett schema. Du kan exempelvis skala ut under kontorstid. Om arbetsbelastningen däremot inte är förutsägbar använder du prestandamått som CPU eller kölängd för begäranden för att utlösa autoskalning. Observera program och deras kommunikation för att identifiera flaskhalsar och härleda mer exakta beslut. Information om bästa metoder för autoskalning finns i Automatisk skalning.
Överväg aggressiv autoskalning för kritiska arbetsbelastningar. När det gäller kritiska arbetsbelastningar vill du ligga steget före efterfrågan. Det är bättre att lägga till nya instanser snabbt vid hög belastning för att hantera den ytterligare trafiken och sedan gradvis skala tillbaka.
Utforma för att skala in. Kom ihåg att med elastisk skalning kommer programmet att ha perioder då det skalar in, när instanser tas bort. Programmet måste hantera borttagning av instanser på ett smidigt sätt. Följande är några metoder för att hantera minskning av skala:
- Lyssna efter avstängningshändelser (i förekommande fall) och avsluta korrekt.
- Klienter/användare av en tjänst bör ha stöd för hantering av tillfälliga fel och omförsök.
- För uppgifter som körs under längre tid kan du överväga att dela upp arbetet med hjälp av kontrollpunkter eller mönstret Rör och filter.
- Placera arbetsobjekt i en kö så att en annan instans kan hämta upp arbetet om en instans tas bort mitt under bearbetningen.
Överväg att skala för redundans. Utskalning kan förbättra programmets tillförlitlighet. Överväg till exempel att skala ut över flera tillgänglighetszoner, till exempel med hjälp av zonredundanta tjänster. Den här metoden kan förbättra programmets dataflöde och ge återhämtning om en zon upplever ett avbrott.
Modellera och optimera systemets skalbarhet. Du kan använda modellen för ditt system med hjälp av en metod som Amdahls lag. Kvantifiera skalbarhet baserat på parametrar som konkurrens och samtidighet. Konkurrens avser fördröjning på grund av väntan eller köning för delade resurser. Konsekvens avser fördröjning för att data ska bli konsekventa. Att till exempel ha en hög konkurrens indikerar sekventiell bearbetning som kan parallelliseras, samtidigt som hög samtidighet tyder på överdrivna beroenden mellan processer, vilket uppmanar dig att minimera interaktioner. Under arbetsbelastningsdesignen kan du beräkna systemets maximala effektiva kapacitet för att undvika att tillhandahålla mer tillgång än efterfrågan, vilket leder till avfall.