REL11-BP05 Utiliser la stabilité statique pour éviter les comportements bimodaux - Reliability Pillar

REL11-BP05 Utiliser la stabilité statique pour éviter les comportements bimodaux

Les charges de travail doivent être statiquement stables et ne fonctionner que dans un seul mode normal. On parle de comportement bimodal lorsque la charge de travail présente un comportement différent en mode normal et en mode d’échec.

Par exemple, vous pouvez essayer de récupérer une défaillance de la zone de disponibilité en lançant de nouvelles instances dans une zone de disponibilité différente. Il peut en résulter une réponse bimodale lors d’un mode de défaillance. Pour éviter ce type de comportement, vous devez créer des charges de travail stables statiquement et qui fonctionnent dans un seul mode. Dans cet exemple, ces instances auraient dû être provisionnées dans la deuxième zone de disponibilité avant la panne. Ce modèle de stabilité statique permet de vérifier que la charge de travail ne fonctionne que dans un seul mode.

Résultat souhaité : les charges de travail ne présentent pas de comportement bimodal en mode normal et en mode d’échec.

Anti-modèles courants :

  • Supposer que les ressources peuvent toujours être provisionnées quelle que soit l’étendue de la défaillance.

  • Essayer d’acquérir dynamiquement des ressources lors d’une panne.

  • Ne pas provisionner les ressources adéquates dans les zones ou les régions jusqu’à ce qu’une panne se produise.

  • Envisager des modèles statiques et stables pour les ressources informatiques uniquement.

Avantages du respect de cette bonne pratique : les charges de travail exécutées avec des modèles statiquement stables sont capables d’avoir des résultats prévisibles lors d’événements normaux et de défaillances.

Niveau d’exposition au risque si cette bonne pratique n’est pas respectée : moyen

Directives d’implémentation

Un comportement bimodal survient lorsque votre charge de travail adopte un comportement différent en mode normal et en mode de défaillance (par exemple, en s’appuyant sur le lancement de nouvelles instances en cas de défaillance d’une zone de disponibilité). Exemple de comportement bimodal : les modèles Amazon EC2 stables provisionnent suffisamment d’instances dans chaque zone de disponibilité pour gérer la charge de travail si une zone de disponibilité était supprimée. Elastic Load Balancing ou Amazon Route 53 vérifieraient l’état pour éloigner une charge de l’instance défaillante. Une fois le trafic déplacé, utilisez AWS Auto Scaling pour remplacer de manière asynchrone les instances de la zone défaillante et les lancer dans les zones saines. La stabilité statique du déploiement de calcul (par exemple, des conteneurs ou des instances EC2) garantit une fiabilité optimale.

Diagramme illustrant la stabilité statique des instances EC2 dans les zones de disponibilité

Stabilité statique des instances EC2 dans les zones de disponibilité

Cela doit être comparé au coût de ce modèle et à la valeur commerciale du maintien de la charge de travail dans tous les cas de résilience. Il est moins coûteux de provisionner moins de capacité de calcul et de compter sur le lancement de nouvelles instances en cas de panne. Cependant, pour les pannes à grande échelle (comme une zone de disponibilité ou une panne régionale), cette approche se révèle moins efficace, car elle repose à la fois sur un plan opérationnel et sur la disponibilité de ressources suffisantes dans les zones ou les régions non affectées.

Votre solution doit également tenir compte de la fiabilité par rapport aux coûts nécessaires pour votre charge de travail. Les architectures de stabilité statique s’appliquent à différentes architectures, notamment les instances de calcul réparties dans les zones de disponibilité, les modèles de réplicas en lecture de bases de données, les modèles de clusters Kubernetes (EKS) et les architectures de basculement multi-régions.

Il est également possible de mettre en œuvre un modèle plus stable sur le plan statique en utilisant davantage de ressources dans chaque zone. En ajoutant davantage de zones, vous réduisez la quantité de calcul supplémentaire nécessaire à la stabilité statique.

Autre exemple de comportement bimodal : un délai d’expiration du réseau peut amener un système à tenter d’actualiser l’état de configuration de l’ensemble du système. Cela ajouterait une charge inattendue à un autre composant et pourrait provoquer sa défaillance, entraînant d’autres conséquences inattendues. Cette boucle de rétroaction négative a un impact sur la disponibilité de votre charge de travail. Vous pourriez donc créer des systèmes stables statiquement et fonctionnant dans un seul mode. Un modèle statiquement stable consisterait à effectuer un travail constant et à toujours actualiser l’état de la configuration selon une cadence fixe. Lorsqu’un appel échoue, la charge de travail utilise la valeur précédemment mise en cache et déclenche une alarme.

Un autre exemple de comportement bimodal consiste à autoriser les clients à contourner votre cache de charge de travail lorsque des défaillances se produisent. Cette solution peut sembler répondre aux besoins des clients, mais elle peut modifier considérablement les exigences de votre charge de travail et risque d’entraîner des échecs.

Évaluez les charges de travail critiques afin de déterminer celles qui nécessitent ce type de modèle de résilience. Pour celles qui sont jugées critiques, chaque composant de l’application doit être examiné. Voici quelques exemples de services nécessitant une évaluation de la stabilité statique :

  • Calcul : Amazon EC2, EKS-EC2, ECS-EC2, EMR-EC2

  • Bases de données : Amazon Redshift, Amazon RDS, Amazon Aurora

  • Stockage : Amazon S3 (zone unique), Amazon EFS (montages), Amazon FSx (montages)

  • Équilibreurs de charge : selon certains modèles

Étapes d’implémentation

  • Créez des systèmes stables statiquement et qui fonctionnent dans un seul mode. Dans ce cas, provisionnez suffisamment d’instances dans chaque zone de disponibilité ou région pour gérer la capacité de la charge de travail si une zone de disponibilité ou une région était supprimée. Plusieurs services peuvent être utilisés pour l’acheminement vers des ressources saines, par exemple :

  • Configurez des réplicas en lecture de base de données pour tenir compte de la perte d’une instance primaire unique ou d’un réplica en lecture. Si le trafic est desservi par des réplicas en lecture, la quantité dans chaque zone de disponibilité et chaque région doit correspondre au besoin global en cas de défaillance de la zone ou de la région.

  • Configurez les données critiques dans un stockage Amazon S3 conçu pour être statiquement stable pour les données stockées en cas de défaillance d’une zone de disponibilité. Si la classe de stockage Amazon S3 unizone – Accès peu fréquent est utilisée, elle ne doit pas être considérée comme statiquement stable, car la perte de cette zone minimise l’accès aux données stockées.

  • Des équilibreurs de charge sont parfois configurés de manière incorrecte ou sciemment pour desservir une zone de disponibilité spécifique. Dans ce cas, le modèle statiquement stable peut consister à répartir une charge de travail sur plusieurs zones de disponibilité dans le cadre d’un modèle plus complexe. Le modèle original peut être utilisé pour réduire le trafic interzone pour des raisons de sécurité, de latence ou de coût.

Ressources

Bonnes pratiques Well-Architected connexes :

Documents connexes :

Vidéos connexes :

Exemples connexes :