# Ingénierie du chaos

L'ingénierie du chaos est la discipline qui consiste à expérimenter sur un système distribué afin d'améliorer la confiance dans ses capacités à résister à des turbulences en conditions de production.
C'est l'ingénierie des tests de résilience sur un système réel et non simulé pour ce qui concerne le domaine de l'informatique. En tant que telle, cette pratique fait donc partie intégrante de l’ingénierie de la fiabilité des sites.

## Concept

Dans le domaine du développement logiciel, la capacité d'un système à tolérer les pannes tout en garantissant la résilience : une qualité de service adéquate étant souvent spécifiée comme une exigence.
Pourtant, les équipes de développement ne parviennent que rarement à répondre à cette exigence en raison de facteurs tels que des délais de mise en production courts ou un manque de connaissance du domaine. L’ingénierie du chaos est une démarche permettant de répondre à l’exigence de résilience.
L’ingénierie du chaos peut également être utilisée pour atteindre challenger, vérifier, valider la résilience contre les pannes d’infrastructure, les pannes de réseau et les pannes d’applications.
Enfin, il permet avant tout de construire la confiance des équipes en la capacité de leurs systèmes à résister aux turbulences.

## Préparation opérationnelle grâce à l'ingénierie du chaos

Calculer le degré de confiance que nous accordons aux systèmes complexes interconnectés intégrés dans les environnements de production nécessite d'avoir des mesures d'opérabilité. L'état de préparation opérationnelle peut être évalué à l'aide de simulations d'ingénierie du chaos hors environnement de production.
En effet la reproductibilité de reproduction des environnements grâce aux démarches de déploiement tout-"as-code", permettent aujourd'hui d'avoir une confiance relative dans la simulation réaliste des environnements de production. Ces fonctionnalités sont prises en charge par les nouvelles infrastructures comme l'infrastructure Kubernetes, ou les fournisseurs de cloud computing via des outils comme Terraform ou Ansible. Les solutions pour accroître la résilience et la préparation opérationnelle d'une plate-forme incluent le renforcement des capacités de sauvegarde, de restauration, de transfert de fichiers réseau, de basculement et de sécurité globale de l'environnement. Gautam Siwach et al, ont effectué une évaluation de la manière de provoquer le chaos dans un environnement Kubernetes qui termine des pods aléatoires avec des données provenant d'appareils de périphérie dans des centres de données tout en traitant des analyses sur un réseau Big Data, et en déduisant le temps de récupération des pods pour calculer un temps de réponse estimé, comme mesure de résilience$^,$.

## Histoire

1983 – Apple
Durant le développement des outils de bureautique MacWrite et MacPaint pour le premier ordinateur Apple Macintosh, Steve Capps a créé un outil de test appelé "Monkey".
Cet outil permettait de générer manière aléatoire des événements d'interface utilisateur à grande vitesse. Cela permettait de simuler un singe frappant frénétiquement le clavier et déplaçant et cliquant sur la souris, comme si un vrai singe était placé devant (cf. Paradoxe du singe savant). Il a été rapidement utilisé pour le débogage en générant des erreurs que les développeurs devaient corriger. À l'époque les tests automatisés n'étaient pas possibles ; le premier Macintosh disposait de trop peu d’espace mémoire libre pour un process plus sophistiqué.
2003 – Amazon
Pendant l'amélioration de la fiabilité du site Web chez Amazon, Jesse Robbins, qui y travaillait, a créé les "Game day"
Ce sont des jeux sérieux dont l'objectif est d'augmenter la fiabilité en créant délibérément des défaillances majeures régulièrement. Robbins a déclaré qu'il était inspiré par la formation des pompiers et la recherche dans d'autres domaines, des leçons sur les systèmes complexes, l'ingénierie de la fiabilité.
2006-Google
Alors qu'il travaillait pour Google, Kripa Krishnan a créé un programme équivalent au GameDay (venant d'Amazon cf. ci-dessus) appelé "DiRT"$^,$$^,$. Jason Cahoon, ingénieur en fiabilité de site (SRE) chez Google, a contribué au livre « Chaos Engineering » par un chapitre sur Google DiRT dans, et a décrit le système lors de la conférence GOTOpia 2021.
2011 – Netflix
Durant la migration de Netflix vers le cloud en 2011, Nora Jones, Casey Rosenthal et Greg Orzell$^,$$^,$ qui la supervisaient, ont élargi la discipline alors qu'ils travaillaient ensemble chez Netflix. Ils mettaient en place un outil qui provoquerait des pannes dans leur environnement de production, c'est-à-dire l'environnement utilisé par les clients Netflix. L’intention était de passer d’un modèle de développement ne supposant aucune panne à un modèle dans lequel les pannes étaient considérées comme inévitables. Cela doit forcer les développeurs à considérer la résilience intégrée comme une obligation plutôt qu’une option. En « descendant » régulièrement et aléatoirement des instances d'un micro-service logiciel, on a eu l'opportunité de tester une architecture redondante pour vérifier qu'une panne de serveur n'avait pas d'impact notable sur les clients.
Le concept d'ingénierie du chaos est proche du principe de fonctionnement des serveurs Phoenix. Ils ont été introduits pour la première fois par Martin Fowler en 2012.

## Outils d'ingénierie du chaos
### Chaos Monkey

Chaos Monkey est un outils inventé en 2011 par Netflix pour tester la résilience de son infrastructure informatique. Il fonctionne en désactivant intentionnellement les ordinateurs du réseau de production de Netflix pour tester la manière dont les systèmes restants réagissent à la panne. Chaos Monkey fait désormais partie d'une suite plus large d'outils appelée Simian Army, conçue pour simuler et tester les réponses à diverses pannes du système et cas extrêmes.
Le code source de Chaos Monkey a été publié par Netflix en 2012 sous une licence Apache 2.0$^,$.
Le nom "Chaos Monkey" est expliqué dans le livre Chaos Monkeys d'Antonio Garcia Martinez:
   Imaginez un singe entrant dans un « data center », ces « fermes » de serveurs qui hébergent toutes les fonctions critiques de nos activités en ligne. Le singe déchire au hasard les câbles, détruit les appareils et retourne tout ce qui lui passe par la main [...]. L’enjeu pour les responsables informatiques est de concevoir le système d’information dont ils ont la charge pour qu’il puisse fonctionner malgré ces singes dont personne ne sait jamais quand ils arriveront et ce qu’ils vont détruire.

#### Simian Army

La Simian Army est une suite d'outils développés par Netflix pour tester la fiabilité, la sécurité ou la résilience de son infrastructure hébergée sur Amazon Web Services et comprend les outils suivants :
Tout en haut de la hiérarchie de l'armée simienne, Chaos Kong déconnecte une " région " AWS complète. Bien que cela soit rare, la perte d'une région entière se produit et Chaos Kong simule une réponse et une récupération du système à ce type d'événement.
Chaos Gorilla déconnecte une « zone de disponibilité » Amazon complète (un ou plusieurs centres de données entiers desservant une région géographique).

### Plateforme d'ingénierie du chaos Proofdock

Proofdock est une plateforme d'ingénierie du chaos qui se concentre sur et exploite la plateforme Microsoft Azure et les services Azure DevOps . Les utilisateurs peuvent injecter des pannes au niveau de l’infrastructure, de la plateforme et des applications.

### Gremlin

Gremlin est une plateforme « Panne en tant que service ».

### Facebook Storm

Pour se préparer à la perte d'un datacenter, Facebook teste régulièrement la résistance de ses infrastructures aux événements extrêmes. Connu sous le nom de Storm Project, le programme simule des pannes massives de centres de données.

### Days of Chaos

Voyages-sncf.com a créé en 2017 une « Journée du Chaos », gamifiant la simulation d'échecs de pré-production. Ils ont présenté leurs résultats lors de la conférence DevOps REX 2017.

### Pole Emploi (actuel France Travail) et Chaos-Native

En 2020, à l'initiative du responsable de la sécurité opérationnelle des datacenters Julien Carreno, un partenariat a été mis en place entre la DSI de Pole-Emploi et la fondation à l'origine de l'outil Litmus, Chaos-Native. Cet outil permet l'automatisation des tests et leur randomisation en production. Sa mise en pratique a été présentée lors du DevOps DDay de Marseille en 2021. Cette démarche est accompagnée par les pratiques d'ingénierie de la résilience des sites.

## Voir également

* Redondance des données
* Détection et correction des erreurs
* Système infaillible
* Échouer rapidement (affaires), un sujet connexe à la gestion d'entreprise
* Tomber en arrière et en avant
* Injection de défauts
* Tolérance aux pannes
* Système informatique tolérant aux pannes
* Graisse (réseau)
* Résilience (réseau)
* Robustesse (informatique)