Ingénierie du chaos
L'ingénierie du chaos, ou chaos engineering en anglais, consiste à tester la résistance d'un système informatique distribué à des perturbations imprévues pendant son fonctionnement. Le nom fait référence à des concepts de la théorie du chaos, qui étudie les comportements aléatoires et imprévisibles.
L'objectif de l'ingénierie du chaos est de mener en continu et sous contrôle des expériences qui introduisent un comportement aléatoire et imprévisible afin de détecter les faiblesses d'un système.
En informatique, un système distribué désigne tout groupe d'ordinateurs reliés par un réseau et partageant des ressources. Certains systèmes distribués peuvent s'interrompre en cas de conditions ou de situations inattendues (par exemple, une modification fortuite résultant d'une mise à jour intentionnelle). Dans les grands systèmes distribués, il existe des dépendances complexes et imprévisibles entre les composants, ce qui complique le dépannage d'une erreur. C'est là que l'ingénierie du chaos entre en jeu. Il s'agit de procéder à des simulations visant à déclencher des pannes pour que les responsables du système évaluent les performances et l'intégrité du logiciel.
Par exemple, imaginez un système logiciel distribué conçu pour traiter un certain nombre de transactions à la seconde. Dans le cadre de l'ingénierie du chaos, on chercherait à connaître la réaction du logiciel lorsque la limite est proche, atteinte ou dépassée, et à savoir si les performances ralentissent, ou que le système plante. On simule le scénario dans une configuration d'ingénierie du chaos pour voir le comportement du système en cas de manque de ressources ou de point de défaillance. Si le système tombe en panne lors des tests, les développeurs peuvent corriger la conception de manière à prendre en charge le scénario ou ajouter des moyens d'évitement. Une fois les modifications apportées, le test est renouvelé pour vérifier si l'on obtient les résultats souhaités.
Fonctionnement de l'ingénierie du chaos
Comme les tests de résistance, l'ingénierie du chaos vise à améliorer la conception d'un système ou d'un réseau en en faisant ressortir les faiblesses pour les corriger. Le processus, généralement segmenté en étapes, commence par l'établissement d'une référence. Les testeurs doivent d'abord déterminer le comportement souhaité du système dans des conditions optimales et préciser ce qui constitue un état normal de fonctionnement.
Ensuite, ils doivent isoler une ou plusieurs faiblesses potentielles et formuler une hypothèse sur leurs effets. Par exemple, les testeurs de logiciel cherchent à savoir ce qu'il se passe en cas de fort pic de trafic. Ils mènent ensuite les tests voulus pour évaluer les conséquences d'un tel pic. Ces expérimentations peuvent révéler une erreur dans un processus critique ou une relation de cause à effet inattendue. Par exemple, la simulation de pics de trafic peut montrer une dégradation imprévue des performances au niveau du stockage.
On peut utiliser l'ingénierie du chaos sur un programme avant son lancement et en tirer beaucoup d'enseignements. Toutefois, ce sont les tests en conditions réelles qui produisent les résultats les plus précis. C'est pourquoi on adopte souvent l'ingénierie du chaos sur des systèmes de production, surtout lorsque la duplication à des fins uniques de test d'un vaste système distribué s'avère trop complexe et onéreuse.
Ceci sous-entend naturellement que l'ingénierie du chaos a un énorme potentiel de perturbation. La réussite de l'ingénierie du chaos exige une bonne communication et une étroite collaboration entre l'équipe informatique et les développeurs, et entre les divisions opérationnelles. Les tests sont rarement exécutés lors des pics d'activité afin d'éviter aux clients une expérience négative.
Outils d'ingénierie du chaos
L'ingénierie du chaos est une approche assez nouvelle des tests logiciels et de l'assurance qualité logicielle (QA). Grand pionnier en la matière, Netflix a été parmi les premiers à en formaliser l'utilisation dans des systèmes de production. Netflix a conçu des plateformes d'automatisation pour ces tests et en a publié le code en open source, notamment les outils Chaos Monkey, Chaos Gorilla et d'autres aux noms semblables connus collectivement comme la Simian Army.
Par exemple, Chaos Monkey désactive au hasard des instances de production pour entraîner une panne du système, mais sans qu'il y ait pour autant d'effet négatif sur les clients. Chaos Gorilla fait la même chose à plus grande échelle. Cette "armée de singes" de Netflix continue de s'étoffer grâce à d'autres programmes de chaos conçus pour éprouver ses services.
LinkedIn utilise SIMOORG, un autre programme open source créateur de pannes. Monkey-Ops, outil open source implémenté chez Go, est conçu pour tester et interrompre aléatoirement des composants ou des configurations de déploiement. Gremlin est un autre programme d'ingénierie du chaos.