Design för motståndskraft
Arbetsbelastningen måste fortsätta att fungera med fullständig eller reducerad funktionalitet. |
---|
Du bör förvänta dig att komponentfel, plattformsfel, prestandaförsämringar och andra fel inträffar. Skapa återhämtning i systemet så att det är feltolerant och kan försämras på ett smidigt sätt.
Exempelscenario
Contoso Air är ett kommersiellt flygbolag som har en intern utvecklingsavdelning. Det huvudsakliga LOB-programmet är en bokningslösning som gör det möjligt för kunder att boka flyg direkt med Contoso Air. Appen är inbyggd i Azure och använder Azure App Service, Cosmos DB, Azure Functions, Azure Logic Apps och Azure Service Bus.
Fastställa felrisker
Identifiera potentiella felpunkter i systemet, särskilt för de kritiska komponenterna, och fastställa effekten på användar- och systemflöden.
Analysera felfall, explosionsradie och felintensitet för varje potentiell felpunkt. Felfall och deras intensitet kan variera från relativt lågpåverkande scenarier som den tillfälliga förlusten av en serverdelsprocess till fullskalig avbrott till följd av katastrofer. Genom att utföra den här analysen kan du fastställa utformningen av funktioner för felhantering på komponentnivå.
Contosos utmaning
- LOB-programmet innehåller många viktiga funktioner, allt från marknadsföring via handel. Användarflödet för biljettköp har identifierats som det mest kritiska flödet. Arbetsbelastningsteamet har fastställt att fler tillförlitlighetsåtgärder ska implementeras för att säkerställa att flödet är optimerat för motståndskraft.
- Teamet har tid att budgetera för förbättringar som avkoppling av komponenter och omdesign av flöden, men vill se till att de använder den tiden för att fokusera på de högsta värdeförbättringarna.
Tillämpa metoden och resultaten
- Teamet identifierar den externa betalningsgatewayen som en potentiell felpunkt. Gatewayen är mycket tillgänglig, men det finns en potential för användare som drabbas av tillfälliga tillfälliga fel till följd av nätverksproblem eller toppar med extremt höga begäranden. Gatewayen kan avvisa vissa begäranden när den överbelastas av flera samtidiga begäranden som skickas.
- Teamet fastställer att användarna måste skicka begäranden på nytt när gatewayen avvisar sina första begäranden, vilket orsakar en negativ användarupplevelse.
Implementera självbevarande mekanismer
Skapa självbevarande funktioner med hjälp av designmönster korrekt och modularisera designen för att isolera fel.
Genom att skapa självbevarande funktioner i systemet kan du förhindra att ett problem påverkar underordnade komponenter. Systemet kommer att kunna åtgärda tillfälliga och permanenta fel, flaskhalsar i prestanda och andra problem som kan påverka tillförlitligheten. Du kommer också att kunna minimera explosionsradien.
Contosos utmaning
- Teamet vill minimera risken för tillfälliga fel som gör att användarnas begäranden avvisas av betalningsgatewayen. På grund av den tillfälliga karaktären hos vissa av felvillkoren är sannolikheten hög att samma begäran lyckas om den skickas på nytt.
Tillämpa metoden och resultaten
- Teamet utvecklar anpassad logik i flödet för att försöka transaktionen igen efter en kort fördröjning när ett fel som kan försökas igen identifieras.
- Lösningsdesignen ändras för att införliva återförsöksmönstret, vilket ökar väntetiden något mellan återförsök tills begäran har bearbetats eller det maximala antalet fel har nåtts.
- Teamet bestämmer sig också för att frikoppla funktionerna för användarinteraktion och betalningsbearbetning för serverdelen i det här flödet med hjälp av en händelsedriven metod med Azure Service Bus. När oåterkalleliga fel inträffar när meddelandet bearbetas (efter det maximala antalet återförsök) överger serverdelsprocessorn bearbetningen av begäran och lämnar meddelandet i kön så att det kan bearbetas igen vid ett senare tillfälle.
Skapa omfattande redundans och återhämtning
Skapa redundans i lager och återhämtning på olika programnivåer.
Sikta på redundans i fysiska verktyg och omedelbar datareplikering. Sikta också på redundans i det funktionella lagret som omfattar tjänster, drift och personal. Redundans hjälper till att minimera enskilda felpunkter. Om det till exempel uppstår ett avbrott som påverkar en eller flera komponenter, en tillgänglighetszon eller en hel regional distribution kan du uppfylla drifttidsmål för en redundant (aktiv-aktiv eller aktiv-passiv).
Att lägga till mellanhänder förhindrar direkt beroende mellan komponenter och förbättrar buffring. Båda dessa fördelar härdar systemets återhämtning.
Contosos utmaning
- Implementering av återförsök och avkoppling av betalningsgatewayanrop från användargränssnittet med Service Bus har avsevärt ökat tillförlitligheten för det här flödet, men affärsintressenterna oroar sig fortfarande för dataförlust som kan inträffa på grund av ett oåterkalleligt fel i den primära regionen.
Tillämpa metoden och resultaten
- Teamet bestämmer sig för att uppgradera till Service Bus Premium-nivån. På så sätt kan de dra nytta av den nivåns Tillgänglighetszoner supportfunktioner. Med den här funktionen lagras flera kopior av data i tre fysiskt avgränsade anläggningar (tillgänglighetszoner) och tjänsten har tillräckligt med kapacitetsreserver för att omedelbart hantera den fullständiga, katastrofala förlusten av ett datacenter.
- Dessutom konfigurerar teamet Geo-haveriberedskap i Azure Service Bus för kontinuerlig replikering av data till en sekundär region som kommer att användas i det osannolika fallet med ett fullständigt fel i den primära regionen.