¿Qué es la Ingeniería del Caos?

La ingeniería del caos es la disciplina de experimentar en un sistema distribuido para construir confianza en su capacidad de resistir condiciones turbulentas en producción. Fue pionera de Netflix, que creó Chaos Monkey para terminar instancias de producción aleatoriamente.

La idea central: en lugar de esperar a que los fallos ocurran inesperadamente, inyectar fallos proactivamente y observar cómo responde el sistema.

Principios

  1. Construye una hipótesis sobre el estado estable. Define qué es “normal”: error rate, latencia, throughput.
  2. Varía eventos del mundo real. Inyecta fallos que realmente ocurren: crashes, particiones de red, disco lleno.
  3. Ejecuta experimentos en producción. Comienza en staging, avanza a producción.
  4. Automatiza para ejecución continua.
  5. Minimiza el radio de impacto. Comienza pequeño.

Ciclo de Vida del Experimento

Paso 1: Definir Estado Estable

Error rate < 0.1%, P95 < 200ms, health checks pasando, tasa de completación de ordenes > 99%.

Paso 2: Hipótesis

“Si terminamos una instancia del servicio de pagos, el sistema continúa procesando pagos sin aumento en error rate.”

Paso 3: Diseñar el Experimento

  • Objetivo: Servicio de pagos, una instancia
  • Tipo de fallo: Terminación de proceso
  • Duración: 5 minutos
  • Criterios de aborto: Error rate > 1% o P95 > 1 segundo

Paso 4: Ejecutar

Con monitoreo activo y kill switch listo.

Paso 5: Analizar

Comparar métricas durante y después del experimento con el estado estable.

Paso 6: Corregir y Repetir

Tipos de Experimentos

ExperimentoQué TesteaEjemplo
Terminación de instanciaAuto-scaling, balanceoMatar un pod/VM aleatorio
Latencia de redManejo de timeouts, reintentosAgregar 500ms de latencia
Partición de redConsistencia, split-brainBloquear tráfico entre servicios
Disco llenoLogging, manejo de datosLlenar disco al 100%
Estrés CPU/MemoriaThrottling, límitesConsumir 90% CPU
Fallo de dependenciaCircuit breakers, fallbacksAPI tercera no disponible

Herramientas

HerramientaTipoMejor Para
Chaos MonkeyOpen source (Netflix)Terminación aleatoria de instancias
LitmusOpen source (CNCF)Experimentos nativos de Kubernetes
GremlinSaaSChaos-as-a-service enterprise
ToxiproxyOpen source (Shopify)Simulación de condiciones de red

Ejercicio: Diseña un Experimento de Caos

Tu aplicación e-commerce tiene: API gateway, servicio de productos, carrito, pagos, notificaciones, PostgreSQL, Redis. Diseña tres experimentos de riesgo creciente.

Solución

Experimento 1: Fallo de Caché Redis (Bajo Riesgo)

Hipótesis: Si Redis no está disponible, la aplicación continúa sirviendo con fallback a BD. Inyección: Detener contenedor Redis por 5 minutos. Esperado: Tiempo de respuesta sube a 500-800ms, sin errores.

Experimento 2: Fallo de Instancia de Pagos (Riesgo Medio)

Hipótesis: Si una de tres instancias muere, el balanceador enruta a instancias saludables. Inyección: Matar un pod del servicio de pagos. Esperado: Kubernetes reinicia en 30s. Sin pagos fallidos.

Experimento 3: Partición de Red (Riesgo Mayor)

Hipótesis: Si el servicio de productos no alcanza inventario, sirve datos cacheados. Inyección: Bloquear red entre product-service e inventory-service por 3 minutos.

Conclusiones Clave

  1. La ingeniería del caos es testing proactivo de resiliencia
  2. Siempre define estado estable primero
  3. Comienza pequeño y escala
  4. Automatiza y repite
  5. QA aporta valor único — habilidades de diseño de tests y conocimiento de monitoreo