Le chaos testing permet d’éprouver un système avant même qu’il ne subisse une défaillance. Une approche d’anticipation par l’erreur volontaire en quelque sorte. Objectif : renforcer la résilience des systèmes informatiques. Adopté par bon nombre d’acteurs majeurs du monde digital, penchons-nous sur sa pratique, ses avantages, et ses outils. 

Fin 2010, Netflix a présenté Chaos Monkey au monde. L’objectif de cette solution : faire en sorte que son infrastructure informatique soit résiliente face aux pannes et autres événements imprévus. Et par extension, que l’entreprise y survive.

Depuis ses débuts, le chaos testing a été utilisé par un certain nombre d’organisations de haut niveau, dont Alibaba, Facebook, Netflix et Twitter.

Qu’est-ce que le chaos testing?

L’ingénierie du chaos est une pratique qui permet d’identifier les faiblesses dans les systèmes avant qu’elles n’impactent la production. En introduisant intentionnellement des problèmes dans un système, les ingénieurs peuvent mieux comprendre son comportement  lorsqu’il est confronté à des conditions inattendues. Les enseignements tirés peuvent ensuite être utilisés pour améliorer sa résilience.

Pourquoi avons-nous besoin du chaos testing ?

Tout ce qui est susceptible d’aller mal ira mal (loi de Murphy), C’est pourquoi il est important de se parer à toute éventualité.

La loi de Murphy est à l’origine du concept de « defensive design », qui consiste à envisager toutes les façons dont un produit pourrait mal fonctionner, et y remédier.

Les faiblesses les plus courantes généralement observées sur une application sont liées aux :

  • performances (CPU, mémoire, réseau)
  • plantages d’applications
  • dépendances à des services externes

Pour faire face à ces défaillances le système doit être suffisamment résilient de tel sorte que si l’une d’entre elle se produit, il doit être capable de se rétablir de manière automatique avec le minimum d’interruption.

Par exemple, si un élément matériel tombe en panne, le système doit être capable de se rétablir en utilisant un dispositif de remplacement (ex. changement de VM). Aussi, si un service est défaillant, le système doit être capable d’acheminer le trafic vers un autre service en état de marche.

Dans ce contexte, un dispositif de chaos testing sera chargé d’introduire des erreurs dans le système pour vérifier sa robustesse et sa capacité à gérer celles-ci. Cette approche est souvent utilisée dans les environnements distribués à haute disponibilité où il est clé de tester la tolérance aux pannes.

Comment mettre en place le chaos testing ?

Cinq étapes principales sont à suivre :

  • Définir un état stable de votre système et les scénarios à tester
  • Configurer le système pour qu’il puisse introduire les erreurs souhaitées
  • Lancer un test et analyser l’état de votre système
  • Remettre votre système dans son état initial
  • Améliorer votre système

Exemples de scénarios pour les tests chaos :

  • Simuler la défaillance d’une région ou d’un centre de données entier.
  • Injection de latence entre les services pour un pourcentage prédéfini du trafic et sur une période de temps déterminée.
  • Faire en sorte qu’un système renvoie des exceptions de manière aléatoire.
  • Insertion de code : ajouter des instructions au programme cible et permettre à l’injection d’erreurs de se produire avant certaines instructions.
  • Forcer les horloges du système à se désynchroniser les unes des autres.
  • Supprimer de la puissance CPU sur un cluster.

Sur quel environnement faire du chaos testing ?

Vos applications et vos infrastructures se comportent différemment en fonction de l’environnement et des modèles de trafic. La plupart du temps, il est impossible de simuler entièrement le logiciel réel et en direct dans un environnement de test. Avec toutes les dépendances présentes dans les systèmes de production modernes, le test en production est devenu un incontournable des tests logiciels. Pour garantir à la fois la conformité de la manière dont le système est réellement utilisé et la pertinence par rapport au système déployé actuel, le chaos testing privilégie d’expérimenter directement le trafic de production.

Pour minimiser les dommages causés aux environnements de production, vous pouvez néanmoins commencer dans un environnement hors production, puis étendre lentement vers la production de manière contrôlée. 

Outils pour les tests de chaos

Il existe de nombreux outils pour faire du chaos testing.Parmi les plus populaires figurent :

Gremlin :

Gremlin fournit une plateforme pour tester, mesurer et améliorer la résilience contre les défaillances de toutes sortes. Gremlin est conçu pour vous aider à éviter les temps d’arrêt, les problèmes de performance et les pertes de données.

La plateforme Gremlin vous permet d’injecter des défaillances dans vos systèmes de manière sûre et sécurisée afin de les tester et de les renforcer contre les pannes inattendues. Avec Gremlin, vous pouvez simuler des scénarios de défaillance courants tels que des pannes de serveur, des pannes de réseau et des coupures de courant. En testant vos systèmes contre ces types de défaillances, vous pouvez identifier et résoudre les problèmes potentiels avant qu’ils ne provoquent une panne.

En plus de vous aider à éviter les pannes, Gremlin peut également vous aider à améliorer les performances. En injectant des défaillances dans vos systèmes, vous pouvez identifier et corriger les goulots d’étranglement qui peuvent provoquer des ralentissements.

Gremlin est un service SaaS.Vous n’avez pas besoin d’installer ou de maintenir un quelconque logiciel. 

Litmus

Litmus est une plateforme open-source d’ingénierie du chaos conçue pour les infrastructures et les applications cloud native. Elle fournit un ensemble d’outils puissants pour exécuter des expériences de chaos dans un système distribué.

Litmus est construit au-dessus de Kubernetes et exploite ses primitives pour fournir une plateforme facile à utiliser, mais puissante, pour mener des expériences de chaos.

Litmus fournit un ensemble d’expériences de chaos prêtes à l’emploi qui peuvent être utilisées pour tester la résilience de votre système. Ces expériences peuvent être exécutées à l’aide d’une seule commande et peuvent être personnalisées pour répondre à vos besoins spécifiques.

Litmus propose également une interface utilisateur web et une interface CLI pour gérer et exécuter les expériences de chaos.

Litmus est open source et disponible sur GitHub.

ChaosBlade

ChaosBlade a été conçu comme un outil d’ingénierie du chaos open-source développé à l’origine par Alibaba Cloud. ChaosBlade vise à fournir des solutions en un clic pour les scénarios d’ingénierie du chaos dédiés aux microservices par le biais de simples fichiers de configuration. 

ChaosBlade est un outil polyvalent qui peut injecter du chaos dans des conteneurs, des JVM, des systèmes d’exploitation et des composants réseau. Il est facile à utiliser et offre une interface de ligne de commande (CLI) conviviale.

ChaosBlade est open source et disponible sur GitHub.

Chaos Monkey :

Cet outil logiciel a été développé par les ingénieurs de Netflix pour tester la résilience et la capacité de récupération de leurs déploiements Amazon Web Services (AWS). Il met fin de manière aléatoire à des machines virtuelles et à des services dans un environnement AWS pour s’assurer que le système peut se rétablir en cas de défaillance.

L’outil a été mis en libre accès et est disponible sur GitHub.

____________

Si vous souhaitez plus d’informations ou des conseils contactez nos experts Tech.

contactez nos experts

Partager
Faire suivre