Une méthodologie pour améliorer la résilience du système
La pratique de « l’ingénierie du chaos » semble cool, énervée et risquée. En réalité, c’est tout le contraire. C’est une discipline contrôlée, prudente et scientifique qui vise à améliorer la résilience des systèmes logiciels. Gartner prévoit que 40 % des organisations mettra en œuvre les pratiques d’ingénierie du chaos dans les années à venir, j’ai donc estimé qu’un article était nécessaire pour fournir des éclaircissements à ceux qui cherchent à l’utiliser.
Dans cet article, je couvrirai divers aspects de l’ingénierie du chaos, notamment les suivants :
Cet article sert de très courte introduction, et je fournirai lectures complémentaires et vidéos en conclusionque je recommande d’acquérir une compréhension plus profonde.
Définition
D’après le site Web « Principles of Chaos Engineering », la définition officielle de Chaos Engineering est :
« Chaos Engineering est la discipline d’expérimentation sur un système afin de renforcer la confiance dans la capacité du système à résister à des conditions de production turbulentes. »
L’ingénierie du chaos est l’art de « courtiser les petits dangers » dans un contexte d’ingénierie logicielle. Pour ce faire, on injecte délibérément des défaillances dans les systèmes pour renforcer la confiance ou révéler et corriger des défaillances inattendues. Bien qu’apparemment paradoxal (et effrayant), c’est grâce à ces petites défaillances que les systèmes peuvent devenir plus résilients.
Netflix a créé cette discipline après avoir connu une panne la veille de Noël. Cette panne a suscité l’idée d’utiliser des exercices préventifs d’échec de production qui encourageraient les ingénieurs à créer des services plus fiables à partir de composants cloud non fiables mais redondants. À peu près à la même époque, Werner Vogels, le CTO d’Amazon, a écrit qu’un enseignement clé d’une décennie de construction d’AWS était que les systèmes devaient être construits pour accepter l’échec, même un échec inconnu, comme un événement naturel.
Pour « accepter l’échec », Netflix a créé divers outils, notamment Singe du chaos et Kong du Chaos, qui terminent de manière aléatoire les instances et les régions AWS, respectivement. En exécutant régulièrement ces outils, les ingénieurs de Netflix ont pu identifier rapidement les faiblesses systématiques et augmenter considérablement la disponibilité globale de leurs services. Depuis lors, la discipline s’est largement répandue, de nombreuses entreprises ayant des équipes dédiées qui exécutent des expériences d’ingénierie du chaos sur leur infrastructure cloud. Les exemples comprennent Théâtre Slack’s Disasterpiece, Test de reprise après sinistre (DiRT) de Googleet Le projet Tempête de Facebookentre autres.
Traiter
En écho à Karl Popper, Chaos Engineering préconise d’utiliser l’expérimentation pour rechercher des preuves permettant de falsifier une hypothèse. C’est une discipline structurée qui cherche à faire émerger le chaos inhérent à un système, pas à le créer au hasard. Ce processus expérimental est rigoureusement contrôlé et vise à minimiser le rayon de souffle des tests de défaillance tout en cassant les systèmes de manière réaliste.
- Définir un état stationnaire : on commence une expérience d’ingénierie du chaos en définissant un état stationnaire mesurable pour le système. Une hypothèse peut être définie pour l’expérience. Par exemple : « dans des conditions x, les utilisateurs ne subiront aucun effet indésirable puisque le système ne s’écartera pas de l’état stable. »
- Introduisez le chaos : introduisez le chaos par des techniques telles que l’épuisement des ressources, les pannes matérielles, la latence du réseau et les pannes de dépendance interne/externe. Pour que l’expérience optimise l’apprentissage, les événements doivent être réalistes et reproduits à une fréquence beaucoup plus élevée que dans la vie réelle. Il est important de bien contrôler l’impact des expériences afin d’atteindre un équilibre entre la collecte d’apprentissages et la minimisation des effets sur les utilisateurs réels.
- Vérifiez l’état d’équilibre : examinez les résultats de l’expérience et décrivez les mesures nécessaires pour résoudre la dette cachée découverte. Cela nécessite un post-mortem approfondi qui évalue les preuves de l’impact de l’expérience depuis l’échec initial jusqu’à la récupération et son impact plus large sur les systèmes adjacents.
- Faire reculer le chaos : arrêter l’expérience et revenir en arrière
Chaos Engineering n’est pas une solution miracle pour améliorer la résilience des logiciels. Il s’agit plutôt d’une approche complémentaire qui peut être associée à d’autres tactiques de renforcement de la résilience. Des exemples de ces tactiques complémentaires incluent l’observabilité, la redondance, l’autoréparation, les tests et l’automatisation.
Ces tactiques sont toutes utiles pour différents niveaux de désordre. Pour déterminer la tactique appropriée, nous pouvons utiliser le cadre Cynefin (voir ci-dessous), qui décrit la stratégie à utiliser en fonction du trouble que nous vivons.
Par exemple, nous savons que le trafic fluctue souvent, nous pouvons donc atténuer cela en utilisant des groupes d’autoscaling afin que le système soit redondant. Il s’agit d’une pratique exemplaire proactive qui devrait être utilisée pour un niveau clair de désordre. Cependant, lorsque vous rencontrez des niveaux de désordre nouveaux, émergents et chaotiques, tels que les pannes régionales de Netflix qui ont eu des conséquences en cascade la veille de Noël, différentes techniques sont nécessaires.
L’ingénierie du chaos est efficace en tant que technique proactive qui fait apparaître ce comportement émergent avant qu’il ne se produise dans la réalité. Ce comportement émergent, par définition, n’est pas pris en compte par d’autres techniques, telles que les tests, qui vérifient ses connaissances sur le comportement existant. Voir la vidéo que j’ai créée ci-dessous qui montre la catégorie dans laquelle appartient l’ingénierie du chaos.
Le monde de l’architecture de microservices nous a fait évoluer vers des systèmes distribués avec de multiples points de défaillance qu’aucune personne ne peut pleinement comprendre. Pour cette raison, il faut mettre en œuvre l’ingénierie du chaos en conjonction avec d’autres tactiques empilées en couches, connues sous le nom de modèle du fromage suisse. Si cela est fait efficacement, le risque catastrophique contre tous les niveaux de trouble peut être considérablement réduit.
La plupart des organisations précoces utilisent des outils internes sur mesure pour effectuer des expériences d’ingénierie du chaos. En effet, comme l’ont dit un jour les ingénieurs de Netflix :
« Il n’est pas clair quelle part de l’outillage des expériences de recherche sur le chaos sera spécifique à l’infrastructure d’une organisation particulière et quelle part sera réutilisable. Est-il possible de construire un ensemble d’outils réutilisables dans toutes les organisations ? »
Heureusement, de nombreux services sont disponibles pour vous faciliter les expériences de Chaos Engineering. Certains d’entre eux sont détaillés à un niveau élevé ci-dessous (mais une comparaison ou une analyse détaillée n’est pas effectuée):
Diablotin
Diablotin est un outil SaaS Chaos Engineering de premier plan qui vous permet d’effectuer des expériences sur des instances exécutant un Gremlin. Ces expériences incluent la modification des ressources de l’instance (augmentation du CPU à 100 %), la modification de l’état de l’instance (arrêt de l’instance) et la falsification du réseau de l’instance (augmentation de la latence pour toutes les requêtes). Voir l’exemple ci-dessous, où j’ai augmenté l’utilisation du processeur d’une instance à 80 % (bulle 1). Notez comment on peut arrêter toutes les attaques instantanément (bulle 2).
Azure Chaos Studio et AWS FIS
Azur et AWS ont géré des offres qui permettent aux utilisateurs de créer des expériences d’ingénierie du chaos au sein des plates-formes. Ces expériences peuvent être basées sur des agents (comme Gremlin) ou interagir directement avec des services gérés. Voir la capture d’écran ci-dessous pour les différentes attaques que l’on peut effectuer sur une machine virtuelle dans Azure (bulle 1) :
Outils open source
Il existe divers outils open source que l’on peut utiliser pour effectuer des expériences d’ingénierie du chaos, notamment Boîte à outils du chaos, Lame du chaos, Tournesol, ChaosKubeet ChaosMesh.
Ceci conclut la très courte introduction à ce qui est une méthodologie passionnante et prometteuse pour améliorer la résilience du système. La pratique en est encore à ses balbutiements par rapport à d’autres tactiques, et il reste encore beaucoup à faire pour la généraliser. Voir les lectures et les vidéos ci-dessous pour plus d’informations et une discussion sur les compromis et les meilleures pratiques. N’hésitez pas à commenter avec des questions et des suggestions pour d’autres « introductions très courtes » !