# Chaos Monkey

Chaos Monkey est un logiciel conçu en 2011 par Netflix pour tester la résilience de ses infrastructures informatiques. Le but de cet outil est de provoquer des pannes en environnement réel et de vérifier que le système informatique continue à fonctionner.

## Concept

Depuis toujours, dans la conception des logiciels, la notion d'exigence non-fonctionnelle était incluse dans les spécifications. Ces exigences mentionnaient notamment la capacité du logiciel à tolérer les pannes, à être résilient pour garantir une qualité de service optimale. Souvent par manque de temps face au besoin de livrer rapidement un logiciel ou par méconnaissance du domaine, les équipes de développement faisaient l'impasse sur ces sujets.
En 2011, des ingénieurs de Netflix - Yury Izrailevsky, aujourd'hui directeur Cloud & Infrastructure et Ariel Tseitlin, aujourd'hui directeur des solutions Cloud, ont eu l'idée de changer le paradigme en mettant en place un outil en environnement de production, soit l'environnement réel utilisé par les clients de Netflix, un outil qui allait causer des pannes. Ils ont donc proposé de passer d'un modèle où les équipes construisent un logiciel en espérant qu'il n'y aura pas de pannes à un modèle où ils seront certains qu'il y a aura une panne - mais provoquée. Prendre en compte la résilience dans la conception des logiciels n'est donc plus une option, mais une obligation :
   « Chez Netflix, notre culture de liberté et de responsabilité nous a conduit à ne pas forcer les ingénieurs à concevoir leur code d’une manière spécifique. À la place, nous avons découvert que nous pouvions aligner nos équipes autour de la notion de résilience des infrastructures en isolant les problèmes créés par la neutralisation des serveurs et en les poussant à l’extrême. Nous avons créé Chaos Monkey, un programme qui choisit un serveur au hasard et le neutralise pendant ses heures habituelles d’activité. Certains trouveront cela dingue, mais nous ne pouvions dépendre de l’occurrence aléatoire d’un évènement pour tester notre comportement face aux conséquences mêmes de cet évènement. Savoir que cela allait arriver fréquemment a créé un solide alignement parmi les ingénieurs pour construire la redondance et l’automatisation des process pour survivre à ce type d’incidents, sans que cela ait d’impact sur les millions d’utilisateurs de Netflix. Chaos Monkey est un de nos outils les plus efficaces pour améliorer la qualité de nos services ».
Le concept de Chaos Monkey consiste à régulièrement choisir au hasard des instances dans l’environnement de production et de les mettre délibérément hors service. En « tuant » régulièrement des instances au hasard, on s'assure avoir anticipé correctement la survenue de ce type d’incidents en mettant en place une architecture suffisamment redondante pour qu’une panne de serveurs n’affecte d’aucune façon les millions de membres de Netflix dans le monde.
Le nom de Chaos monkey est expliqué dans le livre Chaos Monkeys d’Antonio Garcia Martinez :
   Imaginez un singe s’introduisant dans un centre de données, ces « fermes » de serveurs qui hébergent toutes les fonctions critiques de nos activités en ligne. Le singe arrache au hasard des câbles, détruit des appareils et retourne tout ce qui lui passe par la main. Le défi 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 arrivent et ce qu’ils vont détruire.
Netflix a rendu public le code source de cet outil en 2012$^,$.

## Différentes variantes de la Simian Army

La Simian Army (litt. « l’armée simiesque ») est une suite d’outils développés par Netflix pour tester la fiabilité, la sécurité ou la résilience de ses infrastructures Amazon Web Services. Elle a été initiée par Greg Orzell, alors Ingénieur système senior chez Netflix.
* Chaos Monkey
Premier outil développé par Greg Orzell, Netflix, il permet de choisir au hasard des instances dans l’environnement de production et de les mettre délibérément hors service.
* Chaos Gorilla
Grand frère du monkey, Chaos Gorilla, fait tomber une zone complète de disponibilité Amazon.
* Chaos Kong
Tout en haut de la pyramide hiérarchique de la Simian Army, Chaos Kong, fait tomber une région complète Amazon, créé par Luke Koweski.
* Latency Monkey
En introduisant des délais dans les échanges au niveau des couches de communication, outil qui permet de tester la tolérance à la perte de performance d'un composant externe dont le système est dépendant, jusqu'à simulation d'une coupure complète par - un délai infini, sans avoir besoin de demander au partenaire concerné de couper son service.
* Doctor Monkey
Outil qui détecte toutes instances qui présentent des risques de santé - surcharge CPU par exemple - et les écarte du système pour analyse des causes racines voire pour extinction.
* Janitor Monkey
Outil qui met hors service toutes instances non utilisées afin d'éviter de surconsommer, créé également par Greg Orzell.
* Conformity Monkey
Outil qui met hors service toutes instances non conformes afin de permettre au système de la recréer correctement par Greg Orzell.
* Security Monkey
Dérivé du Conformity Monkey, outil qui met hors service toutes instances qui présentent des vulnérabilités.
* 10–18 Monkey
Outil qui détecte des problèmes de localisation, de langage (l10n-i18n) sur les instances.

## Chaos Monkey et Devops

Dans le cadre du mouvement Devops, une attention particulière est portée à la sûreté de fonctionnement des systèmes informatiques permettant ainsi d'apporter un niveau de confiance suffisant malgré les mises en production fréquentes. En contribuant à la Chaîne d'outils Devops, les Chaos Monkey répondent au besoin de tests continus.
Ils s'inscrivent dans le modèle Design for failure, « conçu pour supporter la défaillance » : une application informatique doit être capable de supporter la panne de n’importe quel composant logiciel ou matériel sous-jacent.

## Projets connexes
### Chaos Engineering

   Chaos Engineering est la discipline de l'expérimentation sur un système distribué afin de renforcer la confiance dans la capacité du système à résister à des conditions turbulentes en production.
Il s'agit d'une communauté construite autour des principes définis sur le site Principlesofchaos.org, initiée par Netflix.

### Facebook Storm

Pour se préparer à la perte d’un centre de données, Facebook teste régulièrement la résistance de ses infrastructures aux événements extrêmes. Connu sous l’appellation projet Storm, le programme simule des pannes massives dans les datacenters.

### Days of Chaos

Voyages-sncf.com a créé un "Day of Chaos" en 2017, qui gamifie la simulation des pannes en pré-production. Ils ont présenté leurs résultats à la conférence Devops REX 2017.

### Chaos Toolkit

Le Chaos Toolkit est né de la volonté de simplifier l'accès à la discipline du Chaos Engineering et démontrer que l'approche par expérimentation peut se faire à différents niveaux : infrastructure, plateforme mais aussi applicatif. Le Chaos Toolkit est un outil open source, sous licence Apache 2, publié en octobre 2017.