Partager via


Modèle de maturité de fiabilité

Le parcours de fiabilité est un processus pas à pas où chaque étape s’appuie sur la précédente pour garantir que les systèmes restent disponibles et répondent aux attentes des utilisateurs. Ce modèle de maturité est destiné à vous aider à évaluer votre état actuel et à offrir un chemin structuré pour l’amélioration.

La base commence par l’amorçage des fonctionnalités de fiabilité de base offertes par Azure en utilisant des fonctionnalités de fiabilité Azure intégrées telles que la redondance de zone pour des améliorations immédiates sans surcharge d’optimisation étendue.

De façon contre-intuitive, la façon d’atteindre une fiabilité élevée consiste à accepter les défaillances sont inévitables. Au lieu d’essayer d’empêcher chaque problème, il est plus efficace de planifier la façon dont votre système répond lorsque des problèmes se produisent. Vos besoins métier permettent de déterminer les risques qui méritent d’être abordés de manière proactive. Les équipes investissent dans des fonctionnalités de supervision avancées avec une observabilité structurée, étendent l’atténuation des défaillances pour inclure les préoccupations au niveau de l’application et commencent à tester les mesures de résilience.

Ensuite, les équipes intègrent des insights métier avec des compétences techniques. Teams implémentent la modélisation de la santé, effectuent une analyse du mode de défaillance et préparent des plans de récupération d'urgence complets. Cette étape garantit la responsabilité grâce à des objectifs mesurables et à la préparation systématique pour différents scénarios d’échec.

Une fois que le système est actif, l’accent est mis sur la gestion des défis liés aux environnements de production, notamment la gestion des changements et la complexité opérationnelle des données, ainsi que sur la façon dont ceux-ci affectent la fiabilité de votre système.

Le niveau final s’exécute indéfiniment et être résilient est son objectif principal. Ce niveau représente l’évolution au-delà des contrôles techniques à l’adaptabilité architecturale. Ce niveau se concentre sur l’activation des systèmes pour résister aux risques nouveaux et imprévus à mesure que les charges de travail évoluent et augmentent.

Le modèle est structuré en cinq niveaux de maturité distincts, chacun ayant un objectif principal et un ensemble de stratégies de base. Utilisez les affichages par onglets ci-dessous pour explorer chaque niveau. Veillez également à passer en revue les compromis mis en évidence et les risques associés à mesure que vous progressez.

L’icône Objectif Établir un terrain solide pour la résilience dans l’infrastructure et les opérations de charge de travail, plutôt que de consacrer du temps aux tâches d’optimisation.

Le niveau 1 du modèle de maturité est conçu pour aider les équipes de charge de travail à créer une base solide pour la fiabilité du système. L’accent est mis sur l’amorçage, qui est le processus de mise en place des principes de base pour les décisions futures en matière de fiabilité. Cette étape implique principalement l’implémentation fonctionnelle avec des extensions mineures aux pratiques actuelles.

Cette étape comprend la recherche, l’obtention d’insights et la création d’un inventaire de vos systèmes. Il utilise également des fonctionnalités de fiabilité intégrées sur Azure, telles que l’activation de la redondance de zone pour des améliorations immédiates.

En établissant ces principes de base, vous pouvez préparer votre équipe à passer par les niveaux du modèle de maturité de fiabilité afin d’améliorer progressivement la résilience et les performances de votre système.

Stratégies clés

• Évaluer les opportunités de décharger la responsabilité opérationnelle

Cette stratégie est fondamentalement une approche de construction par rapport à des options d'achat ou de reliance. La décision dépend de la responsabilité gérable à ce stade tout en soutenant le développement futur. Vous souhaitez utiliser des ressources pertinentes pour la charge de travail, mais vous devez toujours explorer les opportunités de décharger leur maintenance. Voici quelques cas d’usage classiques où vous souhaiterez peut-être appliquer cette approche.

  • Déchargez les responsabilités sur la plateforme cloud en choisissant des solutions PaaS (Platform as a Service). Ils fournissent des solutions prêtes à l'emploi pour des besoins de résilience courants tels que la réplication, le basculement et les sauvegardes. Lorsque vous prenez cette approche, le fournisseur de cloud gère les améliorations apportées à l’hébergement, à la maintenance et à la résilience.

    Par exemple, le fournisseur de cloud réplique des données sur plusieurs nœuds de calcul et distribue les réplicas entre les zones de disponibilité. Si vous créez votre propre solution sur des machines virtuelles, vous devez gérer ces aspects vous-même, ce qui peut prendre du temps et être complexe.

  • Déléguer les responsabilités pour les opérations qui ne sont pas directement liées aux objectifs métier de la charge de travail. Certaines opérations spécialisées, telles que la gestion et la sécurité de la base de données, peuvent avoir une incidence sur la fiabilité de votre charge de travail. Explorez la possibilité de faire gérer ces tâches par des équipes expérimentées, par la technologie ou par les deux.

    Par exemple, si votre équipe n’a pas d’expertise en base de données, utilisez des services managés pour aider à transférer la responsabilité au fournisseur. Cette approche peut être utile lorsque vous démarrez, car elle permet à votre équipe de se concentrer sur les fonctionnalités de la charge de travail. De nombreuses entreprises ont partagé des services gérés de manière centralisée. Si des équipes de plateforme sont disponibles, utilisez-les pour gérer ces opérations. Toutefois, cette approche peut ajouter des dépendances et une complexité organisationnelle.

    Sinon, si votre équipe a la bonne expertise, vous pouvez prendre une décision explicite d’utiliser ses compétences et sélectionner des services qui n’incluent pas de fonctionnalités de gestion.

  • Déchargez les responsabilités des fournisseurs non-Microsoft. Choisissez les produits hors étagère comme point de départ. Créez des solutions personnalisées uniquement lorsqu’elles contribuent à la valeur métier de votre charge de travail.

Risque: Si l’option d’achat ou de confiance répond partiellement à vos besoins, vous devrez peut-être implémenter des extensions personnalisées. Cette méthode peut entraîner une situation de « verrouillage de personnalisation », où les mises à jour et la modernisation deviennent irréalisables. Passez régulièrement en revue vos besoins et comparez-les aux fonctionnalités de la solution. Développez une stratégie de sortie pour le moment où il y a un écart significatif entre les deux.

Le scénario opposé est également un risque. Bien que l’option d’achat ou de confiance semble plus simple au début, elle peut nécessiter une nouvelle évaluation et une refonte ultérieurement si les limitations du service PaaS, de la solution fournisseur ou des ressources appartenant à la plateforme ne répondent pas à la granularité ou au niveau d’autonomie nécessaire pour la charge de travail.

✓ Identifier les flux critiques utilisateur et système

La décomposition de la charge de travail en flux est cruciale à ce stade. Concentrez-vous sur les flux utilisateur et système . Les flux utilisateur déterminent les interactions utilisateur et les flux système déterminent la communication entre les composants de charge de travail qui ne sont pas directement associés aux tâches utilisateur.

Par exemple, dans une application de commerce électronique, les clients effectuent des activités frontales telles que la navigation et la commande. Pendant ce temps, les transactions principales et les processus déclenchés par le système répondent aux demandes des utilisateurs et gèrent d’autres tâches. Ces flux distincts font partie du même système, mais ils impliquent différents composants et servent des objectifs différents.

Commencez à créer un catalogue de flux à ce stade. Observez les interactions utilisateur et la communication des composants. Répertoriez et catégorisez les flux, définissez leurs points de départ et de fin, et notez les dépendances. Documentez les résultats et les exceptions à l’aide de diagrammes pour plus de clarté. Ce catalogue peut servir d’outil important pour la conversation initiale avec les parties prenantes de l’entreprise afin d’identifier les aspects les plus importants de leur point de vue. Cette conversation peut informer le premier niveau de hiérarchisation.

Classifiez un flux comme critique en évaluant le risque et l’impact sur les activités principales de l’entreprise. Si vous prévoyez une panne, la dégradation progressive se concentre sur le maintien de ces flux critiques. Dans l’exemple de commerce électronique, les flux critiques incluent les recherches de produits, l’ajout d’éléments au panier et l’extraction, car ces tâches sont essentielles pour l’entreprise. D’autres processus, tels que la mise à jour des données de produit et la maintenance des images de produit, ne sont pas aussi critiques. Assurez-vous que les flux critiques restent opérationnels pendant une panne afin d’éviter toute perte de revenus en permettant aux utilisateurs de continuer à rechercher des produits et à ajouter des éléments au panier.

Remarque

Un processus métier peut être critique même s’il n’est pas sensible au temps. La criticité temporelle est un facteur clé. Par exemple, la conformité aux exigences d’audit est un processus critique, mais vous n’avez peut-être pas besoin de présenter immédiatement des données pour un audit. Le processus reste important, mais sa fiabilité n’est pas critique dans le temps, car la récupération dans quelques heures est acceptable.

Pour plus d’informations, consultez Azure Well-Architected Framework : Optimiser la conception de la charge de travail à l’aide de flux.

• Sélectionner le modèle de conception, les ressources et les fonctionnalités appropriés

Vous devez appliquer cette stratégie aux niveaux suivants :

  • Architecture: La conception de la charge de travail doit tenir compte des attentes en matière de fiabilité dans différentes couches d’infrastructure. Vos décisions initiales peuvent être le choix entre la conteneurisation ou PaaS pour l’hébergement de l’application. Vous pouvez également envisager des configurations réseau telles que hub-and-spoke ou un seul réseau virtuel.

    Vous devez également définir des limites qui créent une segmentation basée sur les fonctionnalités. Par exemple, au lieu d’héberger tout sur une machine virtuelle avec un disque virtuel à zone unique, envisagez de fractionner le calcul et le stockage des données et d’utiliser des services dédiés.

    Avertissement

    Dans les scénarios de migration, l’adoption d’une approche lift-and-shift sans examiner les nouvelles opportunités peut entraîner des avantages manqués et des inefficacités. Il est important de rechercher rapidement la modernisation afin d’éviter d’être bloqué avec les configurations difficiles à modifier et de tirer parti de meilleures options et améliorations.

  • Services Azure : Utilisez des arbres de décision pour vous aider à sélectionner les services appropriés pour votre conception. Choisissez les composants qui répondent à vos besoins actuels, mais restent flexibles afin de pouvoir changer de service à mesure que votre charge de travail évolue et nécessite davantage de fonctionnalités.

  • Références SKU ou niveaux au sein des services Azure : Passez en revue les fonctionnalités de chaque référence SKU et comprenez les garanties de disponibilité de la plateforme. Évaluez les contrats de niveau de service pour comprendre la couverture fournie autour du centile publié.

  • Fonctionnalités qui prennent en charge la fiabilité : Choisissez des services cloud natifs pour améliorer la disponibilité via des configurations simples sans modifier le code. Il est important de comprendre les options et de sélectionner intentionnellement des configurations, telles que l’augmentation de la redondance de zone ou la réplication de données dans une région secondaire.

✓ Déployer avec un niveau de redondance de base

Dans chaque partie de votre solution, évitez les points de défaillance uniques, tels que les instances uniques. Créez plusieurs instances pour la redondance à la place. Les services Azure gèrent souvent la redondance pour vous, en particulier avec les services PaaS, qui incluent généralement la redondance locale par défaut et les options à mettre à niveau. De préférence, utilisez la redondance de zone pour répartir ces instances sur plusieurs centres de données Azure. Si ce n’est pas le cas, assurez-vous au moins la redondance locale, mais cette méthode présente un risque plus élevé. Dans les niveaux futurs, vous évaluez si vos exigences de fiabilité peuvent être satisfaites en étendant la solution avec des composants géoredondants.

Compromis: Un compromis important est l’augmentation du coût de la redondance. En outre, la communication interzone peut introduire une latence. Pour les applications héritées qui nécessitent une latence minimale, la redondance peut dégrader les performances.

Risque: Si une application n’est pas conçue pour un environnement à plusieurs instances, elle peut rencontrer des difficultés avec plusieurs instances actives, ce qui peut entraîner des données incohérentes. En outre, si une application est créée pour une configuration locale qui a une faible latence, l’utilisation de zones de disponibilité peut perturber ses performances.

• Activer les métriques, les logs et les traces pour surveiller les flux

Choisissez des outils natifs de la plateforme comme Azure Monitor pour garantir la visibilité sur les métriques, les journaux et les traces. Utilisez des fonctionnalités intégrées pour définir des alertes pour les problèmes potentiels. Vous devez disposer d’alertes de base en place pour envoyer des notifications et obtenir des alertes. Tirez parti des fonctionnalités de plateforme Azure qui indiquent les modifications apportées à l’état d’intégrité des services, telles que :

Configurez des groupes d’actions Azure Monitor pour l’infrastructure et l’application.

Compromis : À mesure que vous collectez plus de logs, vous devez gérer le volume croissant, ce qui affecte les coûts de stockage de ces logs. Utilisez des stratégies de rétention pour gérer le volume. Utilisez Azure Monitor pour définir une limite quotidienne sur un espace de travail. Pour plus d’informations, consultez les recommandations de configuration pour la fiabilité.

Commencez à créer une observabilité aux couches suivantes.

Infrastructure

Commencez par activer les journaux de diagnostic et assurez-vous de collecter des métriques natives à partir de composants de plateforme à des fins d’analyse. Rassemblez des informations sur l’utilisation des ressources, telles que l’UC, la mémoire, l’entrée/sortie et l’activité réseau.

Application

Collectez les métriques au niveau de l'application, telles que la consommation de mémoire ou la latence des requêtes, et journalisez les activités de l'application. Effectuez des opérations de journalisation dans un thread ou un processus distinct du thread d’application principal. Cette approche n’entraîne pas la journalisation à ralentir les tâches principales de l’application.

Vérifiez également les tests de disponibilité de base dans Application Insights.

Données

Pour surveiller les bases de données à un niveau de base, collectez les métriques clés émises par les ressources de base de données. Comme pour les composants d’infrastructure, effectuez le suivi de l’utilisation des ressources dans le contexte des magasins de données, tels que les indicateurs réseau. La collecte de données sur la façon dont les connexions sont mises en pool est importante pour améliorer l’efficacité à des étapes ultérieures.

Pour une fiabilité, il est important de suivre les métriques de connexion, telles que la surveillance des connexions actives et ayant échoué. Par exemple, dans Azure Cosmos DB, un code d’état 429 est retourné lorsque le nombre de requêtes dépasse les unités de requête allouées et que les connexions commencent à échouer.

✓ Commencer à créer un playbook d’atténuation des défaillances

Les défaillances varient des pannes intermittentes aux pannes temporaires légèrement prolongées et aux pannes catastrophiques.

Au niveau 1, concentrez-vous sur les défaillances de la plateforme. Même s’ils sont au-delà de votre contrôle, vous devriez toujours avoir des stratégies pour les gérer. Par exemple, traitez les pannes zonales à l’aide de zones de disponibilité. Anticiper les erreurs temporaires au niveau de la plateforme et les gérer dans votre charge de travail.

Le processus de gestion de ces défaillances varie en fonction de la complexité. Commencez à documenter les défaillances potentielles au niveau de la plateforme, leurs risques associés et les stratégies d’atténuation. Cet exercice est principalement théorique et mûrit avec l’automatisation à des niveaux ultérieurs.

Vous devez documenter les échecs, y compris les facteurs tels que leur probabilité, leur impact et leurs stratégies d’atténuation. Utilisez une échelle de criticité qui s’aligne sur les objectifs de votre charge de travail. Votre échelle peut inclure :

  • Élevé. Panne complète du système qui entraîne une perte financière significative et une baisse de confiance des utilisateurs.

  • Moyen. Une interruption temporaire qui affecte une partie de la charge de travail et provoque des inconvénients de l’utilisateur.

  • Faible. Un problème logiciel mineur qui affecte une fonctionnalité nonessential de l’application et provoque un temps d’arrêt minimal pour les utilisateurs.

Voici un exemple de modèle :

Problème Risque Origine Sévérité Vraisemblance Atténuation
Échec réseau temporaire Le client perd sa connexion au serveur d’applications. Plateforme Azure Élevé Très probable Utilisez des modèles de conception dans la logique côté client, comme la logique de nouvelle tentative et les disjoncteurs.
Panne de zone L’utilisateur ne peut pas atteindre l’application. Plateforme Azure Élevé Peu probable Activez la résilience de zone sur tous les composants.
Expiration du certificat TLS (Transport Layer Security) Le client ne peut pas établir de session TLS avec l’application. Erreur humaine Élevé Probable Utilisez la gestion automatisée des certificats TLS.
L’utilisation du processeur ou de la mémoire atteint des limites définies et provoque l’échec du serveur. Les demandes expirent. Application Moyen Probable Implémenter des redémarrages automatiques.
Le composant n’est pas disponible pendant une mise à jour. L’utilisateur rencontre une erreur non gérée dans l’application. Déploiement ou modification de la configuration Faible Très probable pendant les déploiements et pas probablement à d’autres moments Gérez les composants dans la logique côté client.

Au niveau 1, ne vous efforcez pas d'atteindre la complétude, car il y a toujours des cas d’échec imprévus. Si vous rencontrez des pannes inattendues, documentez les causes et les atténuations dans le playbook. Traitez cette ressource comme un document vivant que vous mettez à jour au fil du temps.

✓ Ajouter des mécanismes de récupération à partir d’échecs temporaires

Dans un environnement cloud, les défaillances temporaires sont courantes. Ils indiquent des problèmes à court terme que les nouvelles tentatives peuvent généralement résoudre en quelques secondes.

Utilisez des kits sdk et des configurations intégrés pour gérer ces erreurs pour maintenir le système actif. Les configurations intégrées sont souvent le paramètre par défaut. Vous devrez peut-être donc tester pour valider l’implémentation. Implémentez également des modèles conçus pour gérer les défaillances temporaires dans votre architecture. Pour plus d’informations, consultez Modèles de conception d’architecture qui prennent en charge la fiabilité.

Les problèmes persistants peuvent indiquer un échec qui n’est pas temporaire ou le début d’une panne. Ce scénario nécessite plus que de résoudre simplement les problèmes localisés au sein de l’application. Il s'agit d'examiner les flux critiques des utilisateurs et des systèmes et d'ajouter des techniques de préservation automatique ainsi que des stratégies de récupération. Ces méthodes sont des pratiques matures décrites par le niveau 2.

✓ Exécuter des tests de base

Intégrez les tests de fiabilité de base aux premières étapes du cycle de vie du développement logiciel. Recherchez les opportunités de test, en commençant par des tests unitaires pour valider les fonctionnalités et les configurations.

En outre, développez des cas de test simples pour les problèmes que vous identifiez dans le playbook d’atténuation des risques. Concentrez-vous sur un impact plus élevé, et réduisez les mesures d’atténuation des efforts. Par exemple, simuler des pannes réseau ou des problèmes de connectivité intermittente pour voir comment votre logique de nouvelle tentative résout les interruptions.

Risque: Les tests introduisent souvent des frictions dans le cycle de développement. Pour atténuer ce risque, effectuez des tests de fiabilité pouvant être suivis en même temps que les tâches de développement.

Le développement de fonctionnalités est la priorité et les tests peuvent introduire des frictions dans le cycle de développement. Il est plus facile de commencer à tester avant la fin du développement des fonctionnalités. La conception d’aspects non fonctionnels de l’application au début vous permet de les étendre au fur et à mesure que vous ajoutez des fonctionnalités fonctionnelles, plutôt que de créer un backlog de problèmes pour résoudre plus tard. Bien que cette approche nécessite plus d’efforts initialement, elle est gérable et empêche les problèmes plus importants ultérieurement.

Étapes suivantes