# Ingeniería del caos

La ingeniería del caos (en inglés: chaos engineering) es la disciplina de experimentar con un sistema con el fin de generar confianza en la capacidad del sistema para soportar condiciones turbulentas en la producción.

## Concepto

En el desarrollo de software, la capacidad de un sistema de software de tolerar fallos a la vez que asegura una calidad de servicio adecuada (lo que se generaliza habitualmente como «resiliencia») suele estar especificado como un requisito. Sin embargo, es habitual que los equipos de desarrollo no cumplan con este requisito debido a factores como plazos de entrega demasiado cortos o la falta de experiencia en el campo. La ingeniería del caos es una técnica para cumplir con el requisito de resiliencia.
La ingeniería del caos se puede usar para obtener resiliencia contra fallos en la infraestructura, fallos de red y fallos en la aplicación.

## Preparación operativa mediante la ingeniería del caos

Calcular la confianza que se puede tener en los complejos sistemas interconectados que se ponen en el entorno de producción requiere de métricas de preparación operativa. La preparación operativa se puede evaluar mediante simulaciones de ingeniería del caos respaldadas por la infraestructura de big data de Kubernetes. Las soluciones para la preparación operativa de una plataforma implican fortelecer las copias de seguridad, la restauración, la transferencia de ficheros por la red, la capacidad de conmutación por error y la seguridad en general. Gautam Siwach et al. evaluaron la inducción de caos en un entorno Kubernetes que cerraba pods aleatorios con datos de dispositivos de borde en centros de datos mientras se evaluaba la analítica de la red de big data e infirieron el tiempo de recuperación de los pods para calcular un tiempo de respuesta estimado.

## Historia
### Apple (1983)

Durante el desarrollo de MacWrite y MacPaint para la primera computadora Macintosh de Apple, Steve Capps creó Monkey («Mono»), un accesorio de escritorio que generaba aleatoriamente eventos de interfaz de usuario a alta velocidad, simulando el comportamiento de un mono frenético que se dedica a golpear el teclado y a mover y hacer clic con el ratón. Se empleó rápidamente para la depuración al generar errores que los programadores debían corregir, ya que no era posible la automatización de pruebas debido a que el primer Macintosh no disponía de suficiente memoria para nada más sofisticado.

### Amazon (2003)

Cuando Jesse Robbins trabajaba en Amazon para mejorar la fiabilidad del sitio web, creó GameDay, una iniciativa que genera errores importantes de manera regular. Robbins ha dicho que GameDay estuvo inspirado por el entrenamiento de los bomberos, al seguir principios similares de incidente-respuesta.

### Google (2006)

Mientras Kripa Krishnan trabajaba en Google, creó un programa similar a GameDay denominado DiRT (de dirt, «suciedad»).

### Netflix (2011)

Mientras supervisaban la migración de Netflix a la nube en 2011, Nora Jones, Casey Rosenthal y Greg Orzell ampliaron la disciplina al crear una herramienta que generara fallos en su entorno de producción, el entorno que usarían los clientes de Netflix. La intención era pasar de un modelo de desarrollo que presuponía que no habría fallos a uno en que los fallos eran asumidos como inevitables, lo que impulsó a los desarrolladores a considerar la resiliencia como una obligación más que como una opción.
Al «matar» regularmente instancias aleatorias de un servicio de software, se pudo someter a prueba una arquitectura redundante para verificar que un fallo de servidor no afectaba notablemente a los clientes.
El concepto de ingeniería de caos es cercano al de «servidores fénix» (phoenix servers), introducido por Martin Fowler en 2012.

## Herramientas de ingeniería del caos
### Chaos Monkey

Chaos Monkey («Mono del Caos») es una herramienta inventada en 2011 por Netflix para poner a prueba la resiliencia de su infraestructura TI. Su funcionamiento consiste en deshabilitar intencionadamente las computadoras en la red de producción de Netflix para comprobar cómo responden los sistemas restantes a la interrupción. Chaos Monkey en la actualidad forma parte de un conjunto mayor de herramientas denominado Simian Army («Ejército de Simios»), diseñado para simular y probar respuestas a diversos fallos del sistema y casos extremos.
El código de Chaos Monkey fue liberado por Netflix en 2012 bajo una licencia Apache 2.0.
Antonio García Martínez explica el nombre en su libro Chaos Monkeys:

#### Simian Army

Simian Army es un conjunto de herramientas desarrollado por Netflix para poner a prueba la fiabilidad, la seguridad y la resiliencia de su infraestructura Amazon Web Services (AWS).
En lo más alto de la jerarquía del «Ejército de Simios», Chaos Kong provoca la caída de una región entera de la infraestructura de AWS. Aunque no sea habitual la pérdida de una región entera, puede ocurrir, y Chaos Kong simula la respuesta y recuperación del sistema a este tipo de evento.
Por su parte, Chaos Gorilla interrumpe el servicio de una zona de disponibilidad (uno o más centros de datos que dan servicio a una región geográfica).

### Proofdock

Proofdock («Muelle de prueba») es una plataforma de ingeniería del caos que se centra en la plataforma Microsoft Azure y los Azure DevOps Services. Los usuarios pueden inyectar fallos en a nivel de infraestructura, plataforma y aplicación.

### Gremlin

Gremlin una plataforma de «fallo como servicio» (failure as a service).

### Facebook Storm

Para anticiparse a la pérdida de un centro de datos, Facebook pone a prueba regularmente sus infraestructuras ante eventos extremos. Conocido como Storm Project («Proyecto Tormenta»), el programa simula diversos fallos masivos en centros de datos.

### Days of Chaos

Voyages-sncf.com creó en 2017 un Day of Chaos («Día del Caos») en el que ludificó la simulación de fallos preproducción, y presentó sus resultados en la conferencia DevOps REX de 2017.