¿A qué se refiere el concepto de Chaos Engineering?

El Chaos Engineering (ingeniería de caos) es un método para evaluar software, con el fin de detectar posibles fallas, donde el sistema se pone a prueba de forma controlada. Es una manera de adelantarse a eventos inesperados. Se usa para identificar debilidades, el objetivo es ser proactivos. Grandes empresas como LinkedIn o Netflix realizan esta práctica para anticiparse a problemas que pueden afectar a sus usuarios.

Se trata de detectar el punto débil, al integrar un evento nuevo o impredecible, esto permite hacer mejoras para evitar posibles errores futuros en sistemas distribuidos y, en consecuencia, poder mantener el funcionamiento de la compañía y evitar pérdidas económicas. 

Para poner en práctica el Chaos Engineering en principio se debe conocer a detalle el desempeño cotidiano del sistema. A muy grandes rasgos, primero hay que conocer su estado, cuál es su funcionamiento en condiciones óptimas. Después hay que plantear hipótesis de qué tipo de pruebas pueden realizarse para detectar posibles áreas de oportunidad; en caso de una eventualidad, prever cómo controlar los efectos, en especial para proteger a los usuarios; posteriormente realizar las evaluaciones necesarias y analizar los resultados para plantear y automatizar las soluciones.

En pocas palabras se trata de una prueba de resistencia, con ataques deliberados e intencionados, que ponen a prueba la calidad del sistema. Las complicaciones a las que se pueden enfrentar dependen de las dimensiones del software.

Algunas de las fallas que es posible detectar son: errores ocultos, aspectos que no se habían contemplado como vulnerables; cuellos de botella, puntos de saturación del sistema; puntos ciegos, se trata de aspectos que están fuera del monitoreo constante. Para esta técnica se pueden usar distintas herramientas que ponen a prueba el sistema como: Chaos ToolKit, de código abierto, que da la posibilidad de automatizar experimentos de ingeniería de caos; también está Chaos Monkey, que verifica la resistencia de los sistemas en la nube; Pumba, que realiza pruebas en contenedores de Docker; Kremlin, capaz de integrar fallas en hosts o contenedores; o Steadybit, que contribuye a disminuir el tiempo de inactividad.