Recommandations pour la conception d’une stratégie de test de fiabilité
S’applique à cette recommandation de liste de contrôle de fiabilité d’Azure Well-Architected Framework :
RE :08 | Testez des 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 des tests pour vous assurer que votre implémentation de dégradation normale et vos stratégies 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 | Acte d’introduction d’une erreur à 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 et à récupérer à partir des modes d’échec. |
Stratégies de conception
Préparation des tests de fiabilité
Effectuez régulièrement des tests pour valider les seuils, cibles et hypothèses existants. Exécutez des tests réguliers lorsqu’un changement majeur survient dans votre charge de travail. Effectuez la plupart des tests dans les environnements de test et des environnements intermédiaires. Il est également utile 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 de test et une reproductibilité cohérentes. Automatisez les tâches de test communes et intégrez-les à vos processus de génération. Le test manuel du logiciel est fastidieux et susceptible d’erreur, mais vous pouvez effectuer des tests exploratoires manuels. Pour les cas dans lesquels 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, de sorte qu’il est facile pour tout le monde de comprendre le processus et les résultats de chaque test standard.
Partagez les résultats documentés avec les équipes appropriées, telles que les équipes opérationnelles, le leadership technologique, les parties prenantes de l’entreprise et les parties prenantes de la reprise d’activité. Les résultats doivent informer l’affinement des cibles de fiabilité, telles que les objectifs de niveau de service (SLA), 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 les 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 modifications apportées aux 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’auto-guérison et de préservation de soi 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 autres incidents majeurs.
Testez la capacité de votre charge de travail à dégrader correctement et à réduire le rayon d’explosion du composant en utilisant l’injection de pannes.
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 l’occasion 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 des composants et des 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 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 opportunité 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écupérez 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 soigneusement. Assurez-vous 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, dans tous les composants de votre charge de travail. Utilisez cette opportunité pour traiter de manière proactive ces composants. Consultez votre historique des incidents pour détecter les 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 réussi à résoudre la cause racine et les problèmes similaires en testant directement la même défaillance.
Utiliser l’injection de pannes et l’ingénierie du chaos
Les tests d’injection de panne 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 pour effectuer une analyse du mode d’échec pour vous assurer que vous testez uniquement les erreurs que vous hiérarchiser et que vous disposez de stratégies d’atténuation qui traitent les erreurs. Les principales lignes directrices de l’ingénierie du chaos sont les suivantes :
Soyez proactif. N’attendez pas que les échecs se produisent. Essayez d’anticiper les défaillances en effectuant des expériences de chaos pour détecter et résoudre les problèmes avant qu’ils n’affectent votre environnement de production.
Exploitez les défaillances. Acceptez et apprenez des échecs qui se produisent dans votre système. Voyez les défaillances comme une partie naturelle des systèmes complexes et utilisez-les comme opportunités d’apprendre et d’améliorer la fiabilité de votre système.
Arrêtez le système. Injectez délibérément des erreurs ou des contraintes dans votre système pour tester sa résilience. Simuler des défaillances ou 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. Lorsque 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é, comme le modèle Disjoncteur ou le modèle de limitation, pour augmenter la disponibilité. Implémentez des approches de dégradation normale qui permettent la continuité de l’activité pendant les défaillances.
Réduisez au minimum le rayon d’impact. Implémentez des stratégies d’isolation des erreurs pour vous assurer que, même si une défaillance se produit, 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 de chaos pour améliorer la capacité de votre charge de travail à empêcher et à récupérer des défaillances.
L’ingénierie chaos fait partie intégrante de la culture de l’équipe de charge de travail et d’une pratique continue, et non pas un effort tactique à court terme en réponse à une panne unique. Suivez cette méthode standard lorsque vous concevez vos expériences chaos :
- 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.
- 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 comparer l’état détérioré lors de l’exécution de votre expérience.
- 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 entraînera pour aider à contrôler le rayon d’explosion de l’expérience.
- Analysez le comportement qui en résulte. Rassemblez les 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 de l’injection d’erreurs.
- Documentez le processus et les observations. La conservation des enregistrements détaillés de vos expériences informera les décisions futures sur la conception de la charge de travail, en vous assurant que vous répondez aux lacunes qui ont été révélées au fil du temps.
- 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. Assurez-vous que les plans d’amélioration de la conception sont examinés et testés dans des environnements hors production en fonction des mêmes processus que d’autres déploiements.
Validez régulièrement votre processus, vos choix d’architecture et votre code pour détecter rapidement la dette technique, intégrer de nouvelles technologies et s’adapter aux exigences changeantes.
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’un individu directement responsable (DRI) pour prendre possession d’un incident.
- Vérifiez que vos processus de documentation et d’investigation 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 test approfondi, y compris les tests d’injection d’erreur, 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 de manière qui ne sont pas immédiatement apparentes.
Utilisez des mémoires tampons SLA. Limitez les tests de chaos pour rester dans vos contrats SLA et évitez les effets potentiels de la réputation ou des effets financiers des pannes. Vos cibles de récupération de flux et de composant permettent de 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 la portée. 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 différents composants de votre charge de travail qui sont révélés par le biais de tests de chaos.
Ajustez les plans de récupération si nécessaire pour tenir compte des dépendances 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 eux.
Compromis : les tests d’injection de pannes en production peuvent être perturbants et peuvent entraîner un temps d’arrêt. Soyez transparent avec les parties prenantes sur cette possibilité et assurez-vous que vous disposez de protections en place pour mettre fin aux expériences et restaurer rapidement les plans pour inverser rapidement les défaillances que vous introduisez. Pour vous protéger contre les pannes involontaires en production, veillez à planifier une redondance suffisante et que vos parties prenantes comprennent le compromis des coûts.
Facilitation Azure
Azure Test Plans est une solution de gestion de test 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 à commencer à tester l’injection d’erreurs et les tests de résilience pour votre application à l’aide de l’infrastructure Azure.
Liens connexes
- Sauvegarde et reprise d’activité pour les applications Azure
- Liste de contrôle pour les tests de fiabilité
- Tester les applications pour la disponibilité et la résilience
Liste de contrôle de fiabilité
Reportez-vous à l’ensemble complet de recommandations.