Principios de la ingeniería del caos

El proyecto de Netflix, Chaos Monkey, el chango del caos.

No había escuchado de esto, la verdad no lo tenia en el radar, pero bueno en la ingeniería de software, hay miles de cosas que se inventan o evolucionan todos los días.

Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system’s capability to withstand turbulent conditions in production.

La ingeniería del caos es la disciplina de experimentar en un sistema para construir confianza en las capacidades del sistema para resistir a las turbulentas condiciones en producción.

Las avances en los sistemas de software a gran escala, distribuido están cambiando las reglas del juego en la ingeniera de software. Como industria, debemos adoptar rápidamente practicas que incrementen flexibilidad en el desarrollo y velocidad en las entregas. Es así que una pregunta urgente nos surge de frente a estos beneficios: ¿cuanta confianza podemos tener en los sistemas complejos que ponemos en producción?.

Aún cuando todos los servicios de manera individual en un sistema distribuido estén funcionando adecuadamente, las interacciones entre estos servicios pueden arrojar resultados impredecibles. Resultados impredecibles, agravados por un raro pero los eventos de un disruptivo mundo real que afectan los ambientes de producción, hacen estos sistemas distribuidos inherentemente caóticos.

Necesitamos identificar las debilidades antes de que se manifiesten a lo largo y ancho del sistema en comportamientos erróneos.

Debilidades sistémicas pueden tomar la forma de ajustes de respaldos incorrectos cuando un servicio no esta disponible, reintentar tormentas en tiempos de espera incorrectamente ajustados, apagones cuando dependencias de servicios de descarga reciben mucho tráfico, fallas en cascada cuando un solo punto de falla bloquea todo, etc, Debemos tener en cuenta las debilidades mas importantes pro activamente, antes e que afecten a nuestros usuarios en producción. Necesitaos una manera de manejar el caos inherente en estos sistemas, tomar ventaja de la creciente flexibilidad y velocidad, y tener confianza en nuestras entregas a producción a pesar de la complejidad que representan.

Un sistema empírico, basado en estas en aproximaciones de casos en sistemas distribuidos que escalan construyen confianza en la habilidad de esos sistemas para soportar condiciones realistas. Aprendemos acerca de comportamiento de los sistemas distribuidos observándolos durante un experimento controlado. Esto lo la llamamos Ingeniería del Caos.

El caos en práctica

Avanzando hacia la parte específicamente para cubrir la incertidumbre de los sistemas distribuidos a escala, la ingeniería del caos puede ser contemplada como la facilitación de experimentos para revelar las debilidad del sistema. Estos experimentos siguen 4 pasos:

  1. Comenzamos definiendo un estado de quietud — ‘steady state’ como una salida o punto de partida medible del sistema que indica un comportamiento normal.
  2. Plantear la hipotesis de que este steady state continuará en ambos grupos, el grupo controlado y el el grupo experimental.
  3. Introducir las variables que reflejen eventos del mundo real como pudiesen ser servidores que se caen, discos duros que se descomponen, conexiones de red que se interrumpen, etc, etc.
  4. Intentar refutar la hipotesis buscando una diferencia en el steady state entre el grupo controlado y el grupo experimental.

Entre más difícil sea interrumpir el steady state, más confianza tendremos en el comportamiento del sistema. Si una debilidad es descubierta, ahora tendremos un objetivo o punto para mejorar antes de que ese comportamiento se manifieste en el sistema en general.

Chaos Monkey es una pieza de software realizada por los ingenieros de Netflix responsable de determinar de manera aleatoria instancias en producción para asegurar que los ingenieros implemente sus servicios para que sean resilientes a la fallas en sus instancias.

Herramientas como Eureka, Hydrix, Turbine, Ribbon, Zuul, y por supuesto Chaos Monkey son parte de una variedad de herramientas que Netflix ha desarrollado bajo la denominación de Netflix OSS (Netflix Open Source Software).

El objetivo de Chaos Monkey es sabotear el ambiente productivo de forma aleatoria, con la finalidad de que el equipo de ingeniería no sea capaz de predecir como ni cuando fue saboteado.

Para utilizar Chaos Monkey debemos instalar Spinnaker, Spinnaker es la plataforma de entrega continua que se usa en Netflix.

Spinnnaker: Fast, safe, repeatable deployments for every Enterprise
Spinnnaker: Fast, safe, repeatable deployments for every Enterprise

Requisitos

Esta es la referencia a la página oficial de Chaos Monkey.

Y Aquí les dejamos la referencia de instalación.

Y les recomiendo este video explicativo esta enfocado en Spring Boot.

Conclusión

La ingeniería del caos es la disciplina de experimentar con un sistema de software en production con la finalidad de construir confianza en las capacidades del sistema para solventar turbulencias y/o condiciones inesperadas, siempre sera mejorar eso a que una verdaderas falla catastrófica ocurra en nuestros ambientes y no sepamos que hacer.

Cheerleader in chief for KMMX, RPA Enthusiast, DevOps, Technical Writer & International Speaker, Dad & 2 cats.

Cheerleader in chief for KMMX, RPA Enthusiast, DevOps, Technical Writer & International Speaker, Dad & 2 cats.