Aanbevelingen voor het ontwerpen van een strategie voor betrouwbaarheidstests

Is van toepassing op deze aanbeveling voor de betrouwbaarheidschecklist van Azure Well-Architected Framework:

RE:08 Test op tolerantie- en beschikbaarheidsscenario's door de principes van chaos-engineering toe te passen in uw test- en productieomgevingen. Gebruik testen om ervoor te zorgen dat uw implementatie- en schaalstrategieën voor degradatie effectief zijn door actieve storingen en gesimuleerde belastingstests uit te voeren.

In deze handleiding worden de aanbevelingen beschreven voor het ontwerpen van een strategie voor het testen van betrouwbaarheid om de betrouwbaarheid van uw workload te valideren en te optimaliseren. Betrouwbaarheidstests zijn gericht op de tolerantie en beschikbaarheid van uw workload, met name de kritieke stromen die u identificeert wanneer u uw oplossing ontwerpt. Deze handleiding biedt algemene testrichtlijnen en richtlijnen die specifiek zijn voor foutinjectie en chaos-engineering.

Definities

Termijn Definitie
Beschikbaarheid De hoeveelheid tijd die een toepassingsworkload in een goede status uitvoert zonder aanzienlijke downtime.
Chaos-engineering De praktijk van het onderwerpen van toepassingen en services aan echte stress en fouten. Het doel van chaos-engineering is het bouwen en valideren van tolerantie voor onbetrouwbare omstandigheden en ontbrekende afhankelijkheden.
Foutinjectie Het introduceren van een fout in een systeem om de tolerantie van het systeem te testen.
Herstelbaarheid Een synoniem voor tolerantie.
Flexibiliteit Het vermogen van een toepassingsworkload om storingsmodi te weerstaan en te herstellen.

Belangrijke ontwerpstrategieën

Algemene testrichtlijnen

  • Voer regelmatig tests uit om bestaande drempelwaarden, doelen en veronderstellingen te valideren. Wanneer er een grote wijziging optreedt in uw workload, voert u regelmatig tests uit. Voer de meeste tests uit in test- en faseringsomgevingen. Het is ook handig om een subset van tests uit te voeren op het productiesysteem. Plan een een-op-een pariteit van belangrijke testomgevingen met de productieomgeving.

  • Automatiseer testen om consistente testdekking en reproduceerbaarheid te garanderen. Automatiseer algemene testtaken en integreer ze in uw buildprocessen. Het handmatig testen van software is vervelend en gevoelig voor fouten, maar u kunt handmatig verkennende tests uitvoeren. Voor gevallen waarin u geautomatiseerde tests moet ontwikkelen, gebruikt u handmatige tests om het bereik van de te ontwikkelen tests te bepalen.

  • Gebruik een shift-left-testbenadering om vroeg in de ontwikkelingscyclus tolerantie- en beschikbaarheidstests uit te voeren.

  • Pas een eenvoudige documentatie-indeling aan, zodat iedereen het proces en de resultaten van elke reguliere test gemakkelijk kan begrijpen.

  • Deel de gedocumenteerde resultaten met de juiste teams, zoals operationele teams, technologieleiderschap, zakelijke belanghebbenden en belanghebbenden bij herstel na noodgevallen. De resultaten moeten informatie geven over de verfijning van betrouwbaarheidsdoelen, zoals serviceniveaudoelstellingen (SLO's), service level agreements (SLA's), RTO's (Recovery Time Objectives) en RPO's (Recovery Point Objectives).

  • Maak een regelmatig testritme voor uw back-ups. Herstel de gegevens naar geïsoleerde systemen om ervoor te zorgen dat de back-ups geldig zijn en dat herstelbewerkingen functioneel zijn.

  • Documenteer en deel metrische gegevens over hersteltijd met uw belanghebbenden voor herstel na noodgevallen om ervoor te zorgen dat de verwachtingen voor herstel passend zijn.

  • Gebruik industriestandaard implementatietestprocedures om ervoor te zorgen dat u een geautomatiseerd, voorspelbaar en efficiënt implementatieproces hebt.

  • Test het vermogen van uw workload om tijdelijke storingen te weerstaan. Zie Aanbevelingen voor het afhandelen van tijdelijke fouten voor meer informatie.

  • Test de mogelijkheid van uw workload om te reageren op wijzigingen in de belastingspatronen en pieken in het gebruik. Gebruik deze informatie om uw schaalstrategie te testen. Zie Aanbevelingen voor testen voor meer informatie over belasting- en stresstests.

  • Test hoe uw workload fouten in afhankelijke services of andere afhankelijkheden verwerkt met behulp van foutinjectie.

  • Test en valideer hoe uw zelfherstellend en zelfbehoudontwerp reageert op storingen. Geautomatiseerde en handmatige herstelbewerkingen testen.

  • Test uw noodherstelplan om te reageren op onherstelbare fouten en andere grote incidenten.

  • Test het vermogen van uw workload om probleemloos te degraderen en de straal van storingen van onderdelen te minimaliseren met behulp van foutinjectie.

Profiteren van geplande en niet-geplande storingen

Wanneer uw workload offline is vanwege gepland onderhoud of een niet-geplande storing, hebt u een unieke kans om tests uit te voeren en uw inzicht in uw workload te verbeteren. De volgende secties bevatten aanbevelingen voor elk scenario.

Gepland onderhoud

Wanneer u onderhoudsvensters voor updates of patches hebt gepland, kunt u onderdelen en stromen testen die niet betrokken zijn bij de onderhoudswerkzaamheden. Voer tests uit zonder het risico dat de workload onverwacht wordt gedegraded of helemaal offline wordt gehaald. Als u voldoende tijd hebt tijdens uw onderhoudsvenster, kunt u ook de onderdelen en stromen testen die betrokken zijn bij het onderhoud nadat de onderhoudswerkzaamheden zijn voltooid.

Niet-geplande uitval

Gebruik elk storingsincident als een kans om meer te weten te komen over uw workload en de tolerantie ervan te verbeteren door deze stappen te volgen, geordend op prioriteit:

  • Zorg dat de workload weer online is voor uw klanten. Hiervoor kunt u een tijdelijke oplossing voor het probleem uitvoeren, het probleem oplossen of de herstelprocessen initiëren.

  • Bepaal de hoofdoorzaak van de storing en los deze op. Als u de hoofdoorzaak kunt oplossen als onderdeel van het onderzoek, documenteert u de hoofdoorzaak en de maatregelen die u hebt genomen om deze op te lossen. Als het probleem vereist dat er op een later tijdstip een extra onderhoudsvenster moet worden uitgevoerd, moet u ervoor zorgen dat uw risicobeperkingsmaatregelen de verwachte belasting kunnen verwerken door deze grondig te testen. Zorg ervoor dat u voldoende bewaking hebt ingesteld om uw risicobeperkingsmaatregelen te dekken.

  • Zoek, indien van toepassing, naar hetzelfde probleem of naar zwakke plekken in de configuratie die mogelijk worden beïnvloed door vergelijkbare problemen, in alle onderdelen in uw workload. Gebruik deze mogelijkheid om deze onderdelen proactief aan te pakken. Raadpleeg uw incidentgeschiedenis om patronen van vergelijkbare problemen in uw workload te detecteren.

  • Gebruik uw bevindingen om uw teststrategie te verbeteren. Zorg ervoor dat u de hoofdoorzaak en vergelijkbare problemen hebt opgelost door dezelfde fout rechtstreeks te testen.

Technische richtlijnen voor foutinjectie en chaos

Foutinjectietests volgen de principes van chaos-engineering door te benadrukken dat de workload kan reageren op fouten van onderdelen. Foutinjectietests uitvoeren in preproductie- en productieomgevingen. Test toepassen op infrastructuur- en toepassingslagen. Pas de informatie toe die u hebt geleerd Aanbevelingen voor het uitvoeren van analyse van de foutmodus om ervoor te zorgen dat u alleen fouten test die u prioriteit geeft en dat u risicobeperkingsstrategieën hebt die fouten aanpakken. De belangrijkste richtlijnen van chaos engineering zijn:

  • Wees proactief. Wacht niet tot er fouten optreden. Probeer te anticiperen op fouten door chaos-experimenten uit te voeren om problemen te detecteren en op te lossen voordat ze van invloed zijn op uw productieomgeving.

  • Omarm fouten. Accepteer en leer van de fouten die zich in uw systeem voordoen. Zie fouten als een natuurlijk onderdeel van complexe systemen en gebruik ze als kansen om de betrouwbaarheid van uw systeem te leren en te verbeteren.

  • Breek het systeem. Injecteer opzettelijk fouten of stress in uw systeem om de tolerantie te testen. Simuleer echte fouten of onderbrekingen om de herstelmogelijkheden van uw workload te testen en te verbeteren.

  • Identificeer en los single points of failure vroegtijdig op. Tijdens het testen raadpleegt en werkt u de analyse van de foutmodus bij om fouten in uw documentatie te valideren en op te pakken. Pas betrouwbaarheidsbenaderingen toe, zoals redundantie en segmentatie, om de beschikbaarheid van uw workload te verhogen en downtime te minimaliseren.

  • Installeer kaders en een probleemloze beperking. Implementeer veiligheidsmaatregelen, zoals het circuitonderbrekerpatroon of het beperkingspatroon, om de beschikbaarheid te verhogen. Implementeer een goede aanpak voor degradatie die bedrijfscontinuïteit mogelijk maakt tijdens storingen.

  • Minimaliseer de straal van de ontploffing. Implementeer foutisolatiestrategieën om ervoor te zorgen dat, zelfs als er een fout optreedt, het bereik ervan beperkt is. Het systeem blijft functioneren met minimale gevolgen voor uw klanten.

  • Immuniteit opbouwen. Gebruik chaos-technische experimenten om de mogelijkheid van uw workload om fouten te voorkomen en te herstellen te verbeteren.

Chaos engineering is een integraal onderdeel van de workloadteamcultuur en een voortdurende praktijk, geen tactische inspanning op korte termijn als reactie op één storing. Volg deze standaardmethode wanneer u uw chaos-experimenten ontwerpt:

  1. Begin met een hypothese. Elk experiment moet een duidelijk doel hebben, zoals het testen van het vermogen van een bepaalde stroom om het verlies van een bepaald onderdeel te weerstaan.
  2. Meet basislijngedrag. Zorg ervoor dat u consistente metrische betrouwbaarheids- en prestatiegegevens hebt voor de stroom en onderdelen die betrokken zijn bij een bepaald experiment, zodat deze kunnen worden vergeleken met de gedegradeerde status bij het uitvoeren van uw experiment.
  3. Injecteer een fout of fouten. Het experiment moet gericht zijn op specifieke onderdelen die snel kunnen worden hersteld en u moet een geïnformeerde verwachting hebben van het effect dat de foutinjectie zal veroorzaken om de straal van het experiment onder controle te houden.
  4. Bewaak het resulterende gedrag. Verzamel telemetrie over de afzonderlijke stroomonderdelen en het end-to-end-stroomgedrag waarop het experiment is gericht om de effecten van de fout goed te begrijpen. Vergelijk de metrische gegevens die u verzamelt met de metrische basislijngegevens voor een volledig beeld van de resultaten van foutinjectie.
  5. Documenteer het proces en de waarnemingen. Als u gedetailleerde gegevens van uw experimenten bijhoudt, worden toekomstige beslissingen over het ontwerp van de workload geïnformeerd, zodat u de hiaten die in de loop van de tijd zijn ontdekt, kunt aanpakken.
  6. Het resultaat identificeren en erop reageren. Plan herstelstappen die als verbeteringen aan uw workloadachterstand kunnen worden toegevoegd. Zorg ervoor dat ontwerpverbeteringsplannen worden beoordeeld en getest in niet-productieomgevingen volgens dezelfde processen als andere implementaties.

Valideer periodiek uw proces, architectuurkeuzes en code om snel technische schulden te detecteren, nieuwe technologieën te integreren en u aan te passen aan veranderende vereisten.

Wanneer u experimenten met foutinjectie uitvoert, doet u het volgende:

  • Controleer of er bewaking is en of er waarschuwingen zijn ingesteld.
  • Valideer uw proces voor het toewijzen van een direct verantwoordelijke persoon (DRI) om eigenaar te worden van een incident.
  • Zorg ervoor dat uw documentatie en onderzoeksprocessen up-to-date zijn.

Integreer de volgende aanbevelingen en overwegingen om uw strategie voor het testen van chaos te optimaliseren:

  • Systeemveronderstellingen uitdagen. Met testen probeert u de tolerantie van uw workload en uw strategieën voor workloadontwerp te verbeteren. Zoek naar mogelijkheden om fouten in onderdelen en stromen te injecteren die betrouwbaar zijn op basis van eerdere ervaringen. Ze zijn mogelijk niet betrouwbaar in uw nieuwe workload.

  • Valideer wijzigingen, zoals de topologie, het platform en de resources. Zonder grondige tests, inclusief foutinjectietests, hebt u mogelijk een onvolledig beeld van uw workload nadat er wijzigingen zijn aangebracht. U kunt bijvoorbeeld per ongeluk nieuwe afhankelijkheden introduceren of bestaande afhankelijkheden verbroken op een manier die niet direct duidelijk is.

  • SLA-buffers gebruiken. Beperk chaostests om binnen uw SLA's te blijven en mogelijke reputatie- of financiële gevolgen van storingen te voorkomen. Uw stroom- en onderdeelhersteldoelen helpen bij het definiëren van het bereik van uw tests.

  • Stel een foutenbudget in als een investering in chaos en foutinjectie. Uw foutenbudget is het verschil tussen het bereiken van 100 procent van de SLO en het behalen van de overeengekomen SLO.

  • Stop het experiment als het buiten het bereik valt. Onbekende resultaten zijn een verwacht resultaat van chaos-experimenten. Streven naar een balans tussen het verzamelen van substantiële resultaatgegevens en het beïnvloeden van zo weinig mogelijk productiegebruikers.

  • Werk nauw samen met ontwikkelteams om ervoor te zorgen dat de geïnjecteerde fouten relevant zijn. Gebruik eerdere incidenten of problemen als richtlijn. Bekijk afhankelijkheden en evalueer de resultaten wanneer u deze afhankelijkheden verwijdert.

  • Identificeer en documenteer eerder onontdekte afhankelijkheden tussen verschillende onderdelen binnen uw workload die worden onthuld door chaostests.

  • Pas herstelplannen indien nodig aan om rekening te houden met afhankelijkheden die tijdens chaostests worden gedetecteerd.

  • Gebruik de resultaten van uw experimenten en tests als basis voor nieuwe experimenten en tests. Wanneer onverwacht gedrag zich voordoet, kunnen nieuwe tests zich rechtstreeks op dit gedrag richten en u de mogelijkheid bieden om herstelstrategieën voor hen te ontwerpen.

Compromis: Testen met foutinjectie in productie kan verstorend zijn en kan leiden tot downtime. Wees transparant met belanghebbenden over deze mogelijkheid en zorg ervoor dat u beveiligingsmaatregelen hebt om experimenten te beëindigen en plannen terug te draaien om de fouten die u veroorzaakt, snel terug te draaien. Ter bescherming tegen onbedoelde onderbrekingen in de productie, moet u ervoor zorgen dat u voldoende redundantie plant en dat uw belanghebbenden begrijpen wat het kostenrisico is.

Azure-facilitering

Azure Test Plans is een eenvoudig te gebruiken, browsergebaseerde oplossing voor testbeheer die alle mogelijkheden biedt die nodig zijn voor gepland handmatig testen, testen van gebruikersacceptatie, verkennende tests en het verzamelen van feedback van belanghebbenden.

Azure Chaos Studio is een beheerde service die gebruikmaakt van chaos-engineering om u te helpen bij het meten, begrijpen en verbeteren van de tolerantie van uw cloudtoepassing en service. Azure Chaos Studio is algemeen beschikbaar op Ignite 2023 en heeft veel functies om u te helpen aan de slag te gaan met foutinjectie en tolerantietests voor uw toepassing met behulp van Azure-infrastructuur.

Controlelijst voor betrouwbaarheid

Raadpleeg de volledige set aanbevelingen.