Jonatan Matajonmatum.com
conceptosnotasexperimentosensayos
© 2026 Jonatan Mata. All rights reserved.v2.1.1
Conceptos

Ingeniería del Caos

Disciplina de experimentar en sistemas de producción para descubrir debilidades antes de que causen incidentes, inyectando fallos controlados.

evergreen#chaos-engineering#resilience#fault-injection#testing#reliability

¿Qué es?

Chaos Engineering es la disciplina de experimentar en sistemas distribuidos para construir confianza en su capacidad de resistir condiciones turbulentas en producción. A diferencia del testing tradicional que valida comportamientos conocidos, chaos engineering busca descubrir propiedades emergentes del sistema mediante la inyección controlada de fallos.

La práctica se basa en el principio de que los sistemas complejos fallan de maneras impredecibles. En lugar de esperar a que estos fallos ocurran naturalmente, chaos engineering los provoca de manera controlada para identificar debilidades antes de que se conviertan en incidentes críticos. Esta aproximación proactiva permite a los equipos mejorar la resiliencia del sistema basándose en evidencia empírica.

Netflix popularizó esta disciplina con Chaos Monkey en 2010, pero el concepto ha evolucionado hacia una metodología estructurada que abarca desde experimentos simples hasta game days complejos que involucran múltiples equipos y sistemas.

Principios fundamentales

Los cuatro principios de chaos engineering establecen una metodología científica para los experimentos:

  1. Definir el estado estable: Identificar métricas que representen el comportamiento normal del sistema (latencia, throughput, tasa de error)
  2. Hipotetizar continuidad: Formular la hipótesis de que el estado estable se mantendrá durante el experimento
  3. Introducir variables del mundo real: Inyectar fallos que reflejen eventos reales (crashes de servidores, particiones de red, picos de latencia)
  4. Refutar la hipótesis: Buscar evidencia que contradiga la hipótesis inicial para descubrir debilidades

Tipos de experimentos

Tipo de falloQué simulaQué validaBlast radius
Terminar instanciasHardware failure, deployment issuesAuto-healing, redundanciaInstancia/AZ
Inyectar latenciaRed degradada, sobrecargaTimeouts, circuit breakersConexión específica
Fallo de dependenciasServicio externo caídoFallbacks, graceful degradationServicio downstream
Agotar recursosCPU/memoria/disco al límiteAutoscaling, alertingNodo/cluster
Corrupción de datosInconsistencias, bugsValidación, reconciliaciónDataset específico
Partición de redSplit-brain, CAP theoremConsensus algorithms, data consistencySegmento de red

Ejemplo práctico: Experimento con Litmus

apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
  name: pod-delete-experiment
  namespace: production
spec:
  # Hipótesis: El sistema mantiene 99.9% uptime con pods eliminados
  appinfo:
    appns: ecommerce
    applabel: "app=checkout-service"
  chaosServiceAccount: litmus-admin
  experiments:
  - name: pod-delete
    spec:
      components:
        env:
        # Eliminar 1 pod cada 30 segundos durante 5 minutos
        - name: TOTAL_CHAOS_DURATION
          value: "300"
        - name: CHAOS_INTERVAL
          value: "30"
        - name: FORCE
          value: "false"
      probe:
      # Validar que el endpoint responde correctamente
      - name: checkout-availability
        type: httpProbe
        httpProbe/inputs:
          url: "https://api.example.com/health"
          insecureSkipTLS: false
          method:
            get:
              criteria: ==
              responseCode: "200"
        mode: Continuous
        runProperties:
          probeTimeout: 5s
          interval: 10s

Steady-state hypothesis examples

E-commerce checkout service

Hipótesis: Durante condiciones normales, el servicio de checkout mantiene:
- Latencia P95 < 500ms
- Tasa de éxito > 99.5%
- Throughput > 1000 transacciones/minuto
- CPU utilization < 70%

Experimento: Eliminar 2 de 10 pods del servicio durante 10 minutos
Métrica de éxito: Todas las métricas se mantienen dentro de los umbrales

API Gateway

Hipótesis: El API Gateway maneja gracefully la pérdida de backend services:
- Respuestas de fallback en < 200ms
- Circuit breaker activa después de 5 fallos consecutivos
- Logs de error estructurados generados

Experimento: Simular fallo completo de un microservicio durante 5 minutos
Validación: Verificar activación de circuit breaker y respuestas de fallback

Control de blast radius

El blast radius define el alcance potencial de impacto de un experimento. Estrategias de control:

Por infraestructura

  • Canary deployments: Experimentos en 1-5% del tráfico
  • Blue/green environments: Experimentos en ambiente paralelo
  • Availability zones: Limitar a una AZ específica
  • Kubernetes namespaces: Aislar por namespace/cluster

Por tiempo

  • Duración limitada: Experimentos de 5-15 minutos máximo
  • Horarios específicos: Evitar horas pico o maintenance windows
  • Rollback automático: Triggers basados en métricas de salud

Por alcance funcional

  • Feature flags: Habilitar/deshabilitar funcionalidades específicas
  • User cohorts: Limitar a usuarios beta o internos
  • Geographic regions: Experimentos por región geográfica

Game day planning

Los game days son ejercicios coordinados que simulan incidentes mayores:

Preparación (2-4 semanas antes)

  1. Definir escenarios: Multi-AZ failure, database corruption, DDoS attack
  2. Formar equipos: Incident commander, communications lead, technical leads
  3. Preparar runbooks: Procedimientos de respuesta y rollback
  4. Configurar observabilidad: Dashboards, alertas, logs centralizados

Ejecución (2-4 horas)

  1. Briefing inicial: Objetivos, roles, canales de comunicación
  2. Inyección gradual: Comenzar con fallos menores, escalar progresivamente
  3. Documentación en tiempo real: Decisiones, tiempos de respuesta, lecciones
  4. Debrief inmediato: Qué funcionó, qué falló, próximos pasos

Post-game (1-2 semanas después)

  1. Análisis detallado: Métricas de MTTR, efectividad de runbooks
  2. Action items: Mejoras en monitoring, alerting, procedures
  3. Actualización de runbooks: Incorporar lecciones aprendidas
  4. Planificación del siguiente game day: Nuevos escenarios, mayor complejidad

Herramientas y plataformas

Loading diagram...

Anti-patrones comunes

Experimentos sin hipótesis clara

❌ Malo: "Vamos a ver qué pasa si eliminamos pods"
✅ Bueno: "Hipótesis: El sistema mantiene 99.9% uptime cuando se eliminan 
          2 de 10 pods del servicio de checkout durante 5 minutos"

Blast radius descontrolado

❌ Malo: Experimentos en producción sin límites de alcance
✅ Bueno: Experimentos limitados por tiempo, geografía, y porcentaje de tráfico

Falta de observabilidad

❌ Malo: Ejecutar experimentos sin métricas de validación
✅ Bueno: Dashboards en tiempo real con métricas de steady-state

¿Por qué importa?

En sistemas distribuidos modernos, la complejidad emergente hace que los fallos sean inevitables e impredecibles. Chaos engineering transforma esta realidad de reactiva a proactiva: en lugar de esperar que los sistemas fallen en el peor momento posible, los hacemos fallar cuando estamos preparados para aprender de ello.

Para equipos de staff+ engineering, chaos engineering proporciona evidencia empírica sobre trade-offs de arquitectura. ¿Realmente necesitamos esa redundancia multi-región? ¿Los circuit breakers están configurados correctamente? ¿El auto-scaling responde lo suficientemente rápido? Solo los experimentos controlados pueden responder estas preguntas con datos reales.

La práctica también acelera el desarrollo de expertise en incident management. Los equipos que practican chaos engineering regularmente responden más rápido y efectivamente a incidentes reales, porque ya han experimentado escenarios similares en condiciones controladas. Es la diferencia entre entrenar en simuladores de vuelo versus aprender durante una emergencia real.

Referencias

  • PRINCIPLES OF CHAOS ENGINEERING - Principles of chaos engineering — Community, 2019. Manifiesto y principios fundamentales de chaos engineering.
  • Home - Chaos Monkey — Netflix, 2024. Documentación oficial de la herramienta original de chaos engineering.
  • LitmusChaos - Open Source Chaos Engineering Platform — CNCF, 2024. Plataforma cloud-native para experimentos de chaos engineering.
  • What is AWS Fault Injection Service? - AWS Fault Injection Service — AWS, 2024. Servicio managed para fault injection en AWS.
  • Chaos Engineering — Gremlin, 2024. Guía completa de chaos engineering y mejores prácticas.
  • Resilience Engineering at LinkedIn with Project Waterbear — LinkedIn Engineering, 2017. Implementación de chaos engineering a escala empresarial.
  • GitHub - dastergon/awesome-chaos-engineering: A curated list of Chaos Engineering resources. · GitHub — Community, 2024. Lista curada de recursos y herramientas de chaos engineering.

Contenido relacionado

  • Ingeniería de Confiabilidad del Sitio

    Disciplina que aplica principios de ingeniería de software a operaciones de infraestructura, enfocándose en crear sistemas escalables y altamente confiables.

  • Estrategias de Testing

    Enfoques y niveles de testing para validar que el software funciona correctamente, desde unit tests hasta tests end-to-end y testing en producción.

  • Observabilidad

    Capacidad de entender el estado interno de un sistema a partir de sus outputs externos: logs, métricas y traces, permitiendo diagnosticar problemas sin acceso directo al sistema.

  • Gestión de Incidentes

    Procesos y prácticas para detectar, responder, resolver y aprender de incidentes de producción de forma estructurada y efectiva.

Conceptos