Recommandations pour la conception d’une stratégie de test de fiabilité

S’applique à cette recommandation de liste de vérification de fiabilité Azure Well-Architected Framework :

RE :08 Testez les scénarios de résilience et de disponibilité en appliquant les principes de l’ingénierie du chaos dans vos environnements de test et de production. Utilisez les tests pour vous assurer que vos stratégies d’implémentation de dégradation et de mise à l’échelle sont efficaces en effectuant un dysfonctionnement actif et des tests de charge simulés.

Ce guide décrit les recommandations relatives à la conception d’une stratégie de test de fiabilité pour valider et optimiser la fiabilité de votre charge de travail. Les tests de fiabilité se concentrent sur la résilience et la disponibilité de votre charge de travail, en particulier les flux critiques que vous identifiez lorsque vous concevez votre solution. Ce guide fournit des conseils généraux sur les tests et des conseils spécifiques à l’injection de pannes et à l’ingénierie du chaos.

Définitions

Terme Définition
Disponibilité Durée pendant laquelle une charge de travail d’application s’exécute dans un état sain sans temps d’arrêt important.
Ingénierie du chaos La pratique de soumettre des applications et des services à des contraintes et des échecs réels. L’objectif de l’ingénierie du chaos est de créer et de valider la résilience aux conditions non fiables et aux dépendances manquantes.
Injection d’erreurs Le fait d’introduire une erreur dans un système pour tester la résilience du système.
Récupérabilité Synonyme de résilience.
Résilience Capacité d’une charge de travail d’application à résister aux modes d’échec et à la récupérer.

Stratégies de conception

Conseils généraux sur les tests

  • Effectuez régulièrement des tests pour valider les seuils, les cibles et les hypothèses existants. Lorsqu’un changement majeur se produit dans votre charge de travail, exécutez des tests réguliers. Effectuez la plupart des tests dans les environnements de test et de préproduction. Il est également avantageux d’exécuter un sous-ensemble de tests sur le système de production. Planifiez une parité un-à-un des environnements de test clés avec l’environnement de production.

  • Automatisez les tests pour garantir une couverture et une reproductibilité des tests cohérentes. Automatisez les tâches de test communes et intégrez-les à vos processus de génération. Le test manuel des logiciels est fastidieux et susceptible d’erreurs, mais vous pouvez effectuer des tests exploratoires manuels. Pour les cas où vous devez développer des tests automatisés, utilisez des tests manuels pour déterminer l’étendue des tests à développer.

  • Adoptez une approche de test shift-left pour effectuer des tests de résilience et de disponibilité au début du cycle de développement.

  • Adaptez un format de documentation simple afin que tout le monde puisse facilement comprendre le processus et les résultats de chaque test normal.

  • Partagez les résultats documentés avec les équipes appropriées, telles que les équipes opérationnelles, la direction technologique, les parties prenantes de l’entreprise et les parties prenantes de la récupération d’urgence. Les résultats doivent guider l’affinement des objectifs de fiabilité, tels que les objectifs de niveau de service (SLO), les contrats de niveau de service (SLA), les objectifs de temps de récupération (RTO) et les objectifs de point de récupération (RPO).

  • Créez une cadence de test régulière pour vos sauvegardes. Restaurez les données sur des systèmes isolés pour vous assurer que les sauvegardes sont valides et que les restaurations sont fonctionnelles.

  • Documentez et partagez des métriques de temps de récupération avec vos parties prenantes de récupération d’urgence pour vous assurer que les attentes en matière de récupération sont appropriées.

  • Utilisez des procédures de test de déploiement standard pour vous assurer que vous disposez d’un processus de déploiement automatisé, prévisible et efficace.

  • Testez la capacité de votre charge de travail à résister aux défaillances temporaires. Pour plus d’informations, consultez Recommandations pour la gestion des erreurs temporaires.

  • Testez la capacité de votre charge de travail à répondre aux changements de modèles de charge et aux pics d’utilisation. Utilisez ces informations pour vous aider à tester votre stratégie de mise à l’échelle. Pour plus d’informations sur les tests de charge et de contrainte, consultez Recommandations pour les tests.

  • Testez la façon dont votre charge de travail gère les défaillances dans les services dépendants ou d’autres dépendances à l’aide de l’injection d’erreurs.

  • Testez et validez la façon dont votre conception d’autorégation et d’auto-conservation répond aux dysfonctionnements. Testez les opérations de récupération automatisées et manuelles.

  • Testez votre plan de récupération d’urgence pour répondre aux défaillances catastrophiques et à d’autres incidents majeurs.

  • Testez la capacité de votre charge de travail à se dégrader correctement et à réduire le rayon d’explosion du dysfonctionnement du composant à l’aide de l’injection d’erreur.

Tirer parti des pannes planifiées et non planifiées

Lorsque votre charge de travail est hors connexion en raison d’une maintenance planifiée ou d’une panne non planifiée, vous avez une opportunité unique d’effectuer des tests et d’améliorer votre compréhension de votre charge de travail. Les sections suivantes fournissent des recommandations pour chaque scénario.

Maintenance planifiée

Lorsque vous avez planifié des fenêtres de maintenance pour les mises à jour ou les correctifs, vous pouvez tester les composants et les flux qui ne sont pas impliqués dans le travail de maintenance. Effectuez des tests sans risque potentiel de dégrader de manière inattendue la charge de travail ou de la mettre complètement hors connexion. Si vous avez suffisamment de temps pendant votre fenêtre de maintenance, vous pouvez également tester les composants et les flux impliqués dans la maintenance une fois le travail de maintenance terminé.

Panne non planifiée

Utilisez chaque incident de panne comme occasion d’en savoir plus sur votre charge de travail et d’améliorer sa résilience en suivant ces étapes, classées par priorité :

  • Rétablissez la charge de travail en ligne pour vos clients. Pour ce faire, vous pouvez effectuer une solution de contournement pour le problème, résoudre le problème ou lancer les processus de récupération.

  • Déterminez la cause racine de la panne et résolvez-la. Si vous pouvez corriger la cause racine dans le cadre de l’enquête, documentez la cause racine et les mesures que vous avez prises pour la corriger. Si le problème nécessite une fenêtre de maintenance supplémentaire ultérieurement, assurez-vous que vos mesures d’atténuation peuvent gérer la charge attendue en la testant minutieusement. Vérifiez que vous avez configuré une surveillance suffisante pour couvrir vos mesures d’atténuation.

  • Le cas échéant, recherchez le même problème ou les faiblesses de configuration susceptibles d’être affectées par des problèmes similaires, sur tous les composants de votre charge de travail. Utilisez cette opportunité pour traiter ces composants de manière proactive. Consultez l’historique des incidents pour détecter des modèles de problèmes similaires dans votre charge de travail.

  • Utilisez vos résultats pour améliorer votre stratégie de test. Vérifiez que vous avez correctement résolu la cause racine et des problèmes similaires en testant directement le même échec.

Conseils en matière d’injection de pannes et d’ingénierie du chaos

Les tests d’injection d’erreur suivent les principes de l’ingénierie du chaos en mettant en évidence la capacité de la charge de travail à réagir aux défaillances des composants. Effectuez des tests d’injection d’erreur dans les environnements de préproduction et de production. Appliquez des tests aux couches d’infrastructure et d’application. Appliquez les informations que vous avez apprises Recommandations pour effectuer une analyse du mode d’échec pour vous assurer que vous testez uniquement les erreurs que vous hiérarchisez et que vous disposez de stratégies d’atténuation qui résolvent les erreurs. Les principales recommandations de l’ingénierie du chaos sont les suivantes :

  • Soyez proactif. N’attendez pas que des échecs se produisent. Essayez d’anticiper les défaillances en effectuant des expériences de chaos pour découvrir et résoudre les problèmes avant qu’ils n’affectent votre environnement de production.

  • Exploitez les défaillances. Acceptez et apprenez des défaillances qui se produisent dans votre système. Voyez les défaillances comme une partie naturelle des systèmes complexes et utilisez-les comme des opportunités d’apprentissage et d’amélioration de la fiabilité de votre système.

  • Arrêtez le système. Injectez délibérément des erreurs ou du stress dans votre système pour tester sa résilience. Simulez des défaillances ou des interruptions réelles pour tester et améliorer les fonctionnalités de récupération de votre charge de travail.

  • Identifiez et résolvez précocement les points de défaillance uniques. À mesure que vous testez, consultez et mettez à jour votre analyse du mode d’échec pour valider et résoudre les erreurs dans votre documentation. Appliquez des approches de fiabilité, telles que la redondance et la segmentation, pour augmenter la disponibilité de votre charge de travail et réduire les temps d’arrêt.

  • Instaurez des garde-fous et des atténuations. Implémentez des mesures de sécurité, telles que le modèle Disjoncteur ou le modèle de limitation, pour augmenter la disponibilité. Implémentez des approches de dégradation normales qui permettent la continuité de l’activité en cas de défaillance.

  • Réduisez au minimum le rayon d’impact. Implémentez des stratégies d’isolation des pannes pour vous assurer que, même en cas de défaillance, son étendue est limitée. Le système continue de fonctionner avec un effet minimal sur vos clients.

  • Développez l’immunité. Utilisez des expériences d’ingénierie du chaos pour améliorer la capacité de votre charge de travail à prévenir et à récupérer après des défaillances.

L’ingénierie du chaos fait partie intégrante de la culture de l’équipe de charge de travail et d’une pratique continue, et non un effort tactique à court terme en réponse à une seule panne. Suivez cette méthode standard lorsque vous concevez vos expériences de chaos :

  1. Commencez par formuler une hypothèse. Chaque expérience doit avoir un objectif clair, comme tester la capacité d’un flux donné à résister à la perte d’un composant particulier.
  2. Mesurez le comportement de base. Vérifiez que vous disposez de métriques de fiabilité et de performances cohérentes pour le flux et les composants impliqués dans une expérience donnée afin de les comparer à l’état détérioré lors de l’exécution de votre expérience.
  3. Introduisez une ou plusieurs pannes. L’expérience doit cibler intentionnellement des composants spécifiques qui peuvent être récupérés rapidement et vous devez avoir une attente informée de l’effet que l’injection d’erreur provoquera pour aider à contrôler le rayon d’explosion de l’expérience.
  4. Analysez le comportement qui en résulte. Collecter des données de télémétrie sur les composants de flux individuels et le comportement de flux de bout en bout que l’expérience cible pour comprendre correctement les effets de l’erreur. Comparez les métriques que vous collectez avec les métriques de base pour obtenir une image complète des résultats d’injection d’erreur.
  5. Documentez le processus et les observations. La conservation d’enregistrements détaillés de vos expériences informera les décisions futures concernant la conception de la charge de travail, ce qui vous permettra de combler les lacunes qui ont été révélées au fil du temps.
  6. Identifiez le résultat et agissez en conséquence. Planifiez les étapes de correction qui peuvent être ajoutées à votre backlog de charge de travail en tant qu’améliorations. Vérifiez que les plans d’amélioration de la conception sont examinés et testés dans les environnements hors production selon les mêmes processus que d’autres déploiements.

Validez régulièrement vos processus, vos choix d’architecture et votre code pour détecter rapidement la dette technique, intégrer de nouvelles technologies et s’adapter à l’évolution des exigences.

Lorsque vous effectuez des expériences d’injection d’erreurs, vous :

  • Vérifiez que la surveillance est en place et que les alertes sont configurées.
  • Validez votre processus d’affectation d’une personne directement responsable (DRI) pour prendre possession d’un incident.
  • Assurez-vous que vos processus de documentation et d’examen sont à jour.

Intégrez les recommandations et considérations suivantes pour optimiser votre stratégie de test de chaos :

  • Remettez en cause les hypothèses système. Avec les tests, vous essayez d’améliorer la résilience de votre charge de travail et vos stratégies de conception de charge de travail. Recherchez les opportunités d’injecter des erreurs dans des composants et des flux que vous supposez fiables en fonction des expériences passées. Ils peuvent ne pas être fiables dans votre nouvelle charge de travail.

  • Validez les modifications, telles que la topologie, la plateforme et les ressources. Sans tests approfondis, y compris les tests d’injection d’erreurs, vous pouvez avoir une image incomplète de votre charge de travail une fois les modifications apportées. Par exemple, vous pouvez introduire par inadvertance de nouvelles dépendances ou des dépendances existantes rompues d’une manière qui n’est pas immédiatement apparente.

  • Utilisez des mémoires tampons SLA. Limitez les tests de chaos pour rester dans vos contrats SLA et éviter les effets potentiels sur la réputation ou les effets financiers des pannes. Vos cibles de récupération de flux et de composants vous aident à définir l’étendue de vos tests.

  • Établissez un budget de pannes pour investir dans le chaos et l'introduction de pannes. Votre budget d’erreur est la différence entre atteindre 100 % du SLO et atteindre le SLO convenu.

  • Arrêtez l’expérience si elle dépasse l’étendue. Les résultats inconnus sont un résultat attendu des expériences de chaos. Tâchez de parvenir à un équilibre entre la collecte de données de résultats substantielles et l’affectation du moins d’utilisateurs de production possible.

  • Collaborez étroitement avec les équipes de développement pour garantir la pertinence des défaillances injectées. Servez-vous des incidents ou problèmes passés pour vous guider. Examinez les dépendances et évaluez les résultats lorsque vous supprimez ces dépendances.

  • Identifiez et documentez les dépendances précédemment non découvertes entre les différents composants de votre charge de travail qui sont révélées par le biais de tests de chaos.

  • Ajustez les plans de récupération si nécessaire pour prendre en compte les dépendances qui sont découvertes pendant les tests de chaos.

  • Utilisez les résultats de vos expériences et tests comme base pour de nouvelles expériences et tests. À mesure que des comportements inattendus surviennent, de nouveaux tests peuvent cibler ces comportements directement et vous donner la possibilité de concevoir des stratégies de correction pour ceux-ci.

Compromis : les tests d’injection d’erreurs en production peuvent perturber et entraîner des temps d’arrêt. Soyez transparent avec les parties prenantes sur cette possibilité et assurez-vous que vous disposez de mesures de protection pour mettre fin aux expériences et annuler des plans afin d’inverser rapidement les défaillances que vous introduisez. Pour vous protéger contre les pannes involontaires en production, veillez à planifier une redondance suffisante et à ce que vos parties prenantes comprennent l’inconvénient des coûts.

Animation Azure

Azure Test Plans est une solution de gestion des tests basée sur un navigateur facile à utiliser qui fournit toutes les fonctionnalités requises pour les tests manuels planifiés, les tests d’acceptation des utilisateurs, les tests exploratoires et la collecte de commentaires des parties prenantes.

Azure Chaos Studio est un service managé qui utilise l’ingénierie du chaos pour vous aider à mesurer, comprendre et améliorer votre application cloud et la résilience du service. Azure Chaos Studio a atteint la disponibilité générale à Ignite 2023 et dispose de nombreuses fonctionnalités pour vous aider à démarrer avec l’injection d’erreurs et les tests de résilience pour votre application à l’aide de l’infrastructure Azure.

Liste de contrôle de fiabilité

Reportez-vous à l’ensemble complet de recommandations.