Blog AI/ML Azure Azure

Validar resiliencia en Azure con Chaos Studio: de la hipótesis al experimento controlado

Arquitectura en Azure sometida a experimentos controlados de caos para validar resiliencia

La resiliencia de una aplicación no se demuestra en una diapositiva de arquitectura. Se demuestra cuando una dependencia falla, una zona deja de responder, la latencia aumenta, una máquina se reinicia en mitad de una operación crítica o una ruta de red empieza a descartar paquetes. Azure Chaos Studio existe precisamente para convertir esas preguntas incómodas en experimentos controlados, observables y repetibles dentro de Azure.

El enfoque no consiste en “romper producción” por deporte. Consiste en formular hipótesis sobre cómo debería comportarse un sistema ante fallos concretos y validarlas con impacto acotado. Si la aplicación depende de réplicas, balanceadores, colas, mecanismos de retry, circuit breakers, escalado automático o failover regional, Chaos Studio permite comprobar si esas piezas trabajan juntas como se espera antes de que el incidente lo haga por nosotros.

En arquitecturas modernas, esta validación es especialmente relevante porque la complejidad no está solo en la infraestructura. También aparece en pipelines de despliegue, dependencias SaaS, servicios gestionados, modelos de IA, sistemas RAG y agentes que encadenan múltiples llamadas. En un sistema de recuperación aumentada, por ejemplo, la indisponibilidad parcial del índice, del modelo o de una fuente documental puede degradar la experiencia de forma silenciosa. Esa misma lógica de validar degradación y recuperación aplica tanto a una API transaccional como a un flujo de conocimiento como los que se describen en Foundry IQ como capa de conocimiento para agentes.

Qué es Azure Chaos Studio

Azure Chaos Studio es un servicio gestionado de Azure para ejecutar experimentos de ingeniería del caos sobre recursos cloud. Un experimento define qué fallo se quiere introducir, sobre qué recursos, durante cuánto tiempo y bajo qué condiciones. El objetivo es observar la respuesta del sistema y confirmar si cumple la expectativa definida.

La ingeniería del caos parte de una idea simple: los fallos ocurrirán, pero es mejor aprender de ellos en condiciones controladas que durante una incidencia real. Chaos Studio lleva esa práctica al entorno Azure con integración nativa con identidades administradas, permisos RBAC, recursos de Azure y telemetría.

Un experimento puede simular interrupciones de red, presión sobre CPU, reinicios de máquinas virtuales, apagados controlados, latencia, pérdida de paquetes o fallos específicos sobre servicios compatibles. La lista exacta de fallos disponibles depende del tipo de recurso y de la modalidad del experimento, por lo que conviene revisar siempre la documentación oficial del proveedor antes de diseñar una prueba crítica.

Note: Chaos Studio no sustituye las pruebas de carga, las pruebas funcionales ni los planes de continuidad. Complementa esas prácticas validando cómo se comporta el sistema cuando una o varias dependencias dejan de cumplir sus condiciones normales.

Por qué probar resiliencia antes del incidente

Muchas arquitecturas en Azure se diseñan con componentes resilientes: Availability Zones, Azure Front Door, Azure Load Balancer, App Service con escalado, Azure Kubernetes Service, bases de datos con réplicas, colas para desacoplar procesos y observabilidad con Azure Monitor. Sin embargo, tener componentes resilientes no garantiza que el sistema completo lo sea.

La diferencia está en la integración. Una aplicación puede estar desplegada en varias zonas, pero seguir dependiendo de una configuración centralizada que no está replicada. Puede tener retries, pero con intervalos tan agresivos que amplifican la carga durante una degradación. Puede disponer de failover, pero no haber probado nunca si la sesión de usuario, la caché o la capa de datos toleran el cambio.

Chaos Studio ayuda a pasar de una resiliencia declarativa a una resiliencia probada. La pregunta deja de ser “¿tenemos alta disponibilidad?” y pasa a ser “si una instancia desaparece durante tres minutos, ¿la aplicación mantiene el SLO, degrada correctamente y se recupera sin intervención manual?”.

Este cambio de mentalidad es parecido al que ocurre en seguridad de software: no basta con confiar en que una cadena de suministro es segura, hay que verificarla de forma continua. En sistemas de IA y aplicaciones cloud, esa verificación se extiende a dependencias, artefactos, identidades y comportamiento en fallo, especialmente cuando el entorno operativo cambia con frecuencia.

Conceptos base de Chaos Studio

Antes de ejecutar el primer experimento conviene separar cuatro conceptos: objetivo, fallo, experimento y guardrail. Esta distinción evita que la ingeniería del caos se convierta en una colección de pruebas destructivas sin criterio.

El objetivo es el recurso o conjunto de recursos sobre los que se permite ejecutar acciones de caos. Puede ser una máquina virtual, un conjunto de escalado, un clúster o un recurso compatible. Habilitar un objetivo no ejecuta ningún fallo por sí mismo; solo declara que ese recurso puede participar en experimentos bajo determinadas capacidades.

El fallo es la perturbación concreta que se aplicará. Puede ser una presión de CPU, una pérdida de conectividad, una latencia inducida o una parada de proceso, entre otros. La granularidad del fallo importa porque no es lo mismo validar la tolerancia ante un reinicio de nodo que probar la experiencia de usuario con 500 ms adicionales de latencia en una dependencia.

El experimento organiza uno o varios fallos en pasos. Estos pasos pueden ejecutarse secuencialmente o con cierto paralelismo, dependiendo del escenario. Un experimento bien diseñado suele empezar por una perturbación pequeña y observable, no por el peor caso posible.

Los guardrails son las condiciones que limitan el riesgo. Pueden ser ventanas horarias, entornos no productivos, límites de duración, alertas, aprobación manual, métricas de salud o procedimientos de parada. En ingeniería del caos, el control es tan importante como el fallo.

Modalidades de fallos: agente y servicio

Chaos Studio trabaja con dos grandes familias de fallos. La primera se basa en agente instalado dentro del sistema operativo invitado, normalmente para introducir estrés o condiciones específicas desde dentro de una máquina. La segunda se basa en acciones de servicio, ejecutadas desde Azure sobre el plano de control o sobre capacidades gestionadas del recurso.

Los fallos basados en agente son útiles cuando se necesita simular presión interna: CPU elevada, consumo de memoria, estrés de disco o condiciones similares. Requieren instalar y configurar el agente correspondiente en el recurso objetivo. Esta modalidad permite observar si la aplicación soporta degradaciones locales sin que el recurso desaparezca por completo.

Los fallos basados en servicio son más apropiados cuando se quiere actuar sobre recursos Azure desde fuera del sistema operativo. Por ejemplo, reiniciar una máquina virtual, apagar un recurso o modificar condiciones de red si el tipo de objetivo lo permite. En este caso, el experimento utiliza permisos de Azure para ejecutar la acción sobre el recurso.

Warning: La disponibilidad de cada fallo cambia según el tipo de recurso, región y estado del servicio. Antes de diseñar un procedimiento operativo, valida la matriz actual de capacidades de Chaos Studio en la documentación oficial de Azure.

Diseñar un experimento: empezar por la hipótesis

Un buen experimento de caos no empieza por el fallo, sino por la hipótesis. La hipótesis describe el comportamiento esperado del sistema cuando ocurre una perturbación concreta. Debe poder medirse con telemetría real.

Una hipótesis débil sería: “la aplicación debería seguir funcionando si falla un nodo”. Es demasiado ambigua. Una hipótesis más útil sería: “si se reinicia una instancia de backend durante cinco minutos, el percentil 95 de latencia de la API pública se mantiene por debajo de 800 ms, la tasa de errores 5xx no supera el 1 % y no se pierden mensajes de la cola”.

Esa hipótesis conecta el fallo con métricas observables. También obliga a definir qué significa “funcionar” para el usuario y para el negocio. En sistemas que dependen de recuperación de conocimiento, la hipótesis puede incluir calidad de respuesta, latencia de búsqueda o degradación controlada cuando una fuente no está disponible. Ese razonamiento es importante en arquitecturas RAG, donde la robustez no depende solo del modelo, sino también de la recuperación, el reranking y la disponibilidad de documentos, como se explica en Microsoft GraphRAG y relaciones entre documentos.

Ejemplo práctico: validar una API desplegada en máquinas virtuales

Supongamos una API interna desplegada en dos máquinas virtuales detrás de un balanceador. La aplicación escribe trabajos en una cola y utiliza una base de datos gestionada. La arquitectura declara alta disponibilidad porque hay dos instancias, pero todavía no se ha probado qué ocurre si una de ellas desaparece en horario de carga.

La hipótesis podría ser: “si una máquina virtual de la capa API se reinicia, el balanceador deja de enviarle tráfico, la segunda instancia absorbe las peticiones, la cola evita pérdida de trabajos y la API vuelve a su capacidad nominal cuando la máquina se recupera”.

Antes de usar Chaos Studio, se necesitan tres elementos mínimos:

  1. Telemetría de salud de la aplicación, incluyendo latencia, errores HTTP, throughput y profundidad de cola.
  2. Una ventana de ejecución controlada, idealmente fuera de un pico de tráfico si es la primera prueba.
  3. Permisos RBAC suficientes para habilitar el recurso como objetivo y ejecutar el experimento.

La preparación puede automatizarse con Azure CLI. El siguiente ejemplo muestra una estructura típica para crear un grupo de recursos de laboratorio y consultar una máquina virtual existente. No crea el experimento completo, porque los tipos exactos de fallo y parámetros dependen del recurso y de las capacidades disponibles en la suscripción.

# Variables de ejemplo para un entorno de laboratorio.
# Sustituye los valores por nombres reales de tu suscripción.
RESOURCE_GROUP="rg-chaos-lab"
LOCATION="westeurope"
VM_NAME="vm-api-01"

# Crear un grupo de recursos para pruebas controladas.
az group create \
  --name "$RESOURCE_GROUP" \
  --location "$LOCATION"

# Comprobar que la máquina virtual existe y obtener su identificador de recurso.
VM_ID=$(az vm show \
  --resource-group "$RESOURCE_GROUP" \
  --name "$VM_NAME" \
  --query id \
  --output tsv)

echo "Máquina virtual objetivo: $VM_ID"

Lo importante de este bloque no es el grupo de recursos en sí, sino el patrón: trabajar con identificadores explícitos y variables controladas. En experimentos de caos no conviene depender de nombres ambiguos ni de selecciones manuales de último minuto. Un error de alcance puede convertir una prueba razonable en una interrupción innecesaria.

Una vez identificado el recurso, el experimento debe habilitar ese recurso como target de Chaos Studio y asociar las capacidades de fallo permitidas. En muchos equipos, esta parte se gestiona como infraestructura como código para que el alcance quede revisado en pull request, igual que cualquier cambio de plataforma.

Observabilidad: sin métricas no hay aprendizaje

La ingeniería del caos no tiene valor si el equipo no puede observar el efecto del fallo. Azure Monitor, Application Insights, Log Analytics y los dashboards operativos deben estar preparados antes de ejecutar el experimento. La ejecución del caos es el estímulo; la telemetría es la evidencia.

Las métricas técnicas habituales incluyen latencia, tasa de error, saturación de CPU, memoria, conexiones, reinicios, health probes fallidos, profundidad de cola, tiempos de procesamiento y eventos de escalado. Pero también conviene capturar señales más cercanas al usuario: sesiones afectadas, operaciones incompletas, respuestas degradadas o tiempos de recuperación percibidos.

En aplicaciones con componentes de IA, la observabilidad debe ir más allá de la infraestructura. Un sistema conversacional puede seguir respondiendo HTTP 200 mientras entrega respuestas incompletas porque una fuente de conocimiento está degradada. En escenarios de comprensión conversacional y minería de conocimiento, como los descritos en Conversational language understanding con Foundry IQ, la resiliencia también implica medir calidad funcional, no solo disponibilidad técnica.

Un experimento bien instrumentado debería responder tres preguntas al terminar:

  1. ¿El sistema se comportó como esperábamos durante el fallo?
  2. ¿Las alertas detectaron la degradación con suficiente precisión y sin ruido excesivo?
  3. ¿La recuperación fue automática, manual o parcial?

Si alguna de esas respuestas no es clara, el siguiente trabajo no es ejecutar más caos, sino mejorar telemetría, documentación o diseño.

Seguridad y permisos en Chaos Studio

Chaos Studio introduce capacidad deliberada de degradar recursos, por lo que su modelo de permisos debe tratarse con el mismo rigor que una operación privilegiada. No todos los operadores necesitan poder crear experimentos, habilitar targets o ejecutarlos en producción.

Una separación práctica consiste en distinguir entre quienes diseñan experimentos, quienes aprueban su ejecución y quienes pueden ejecutarlos. En entornos regulados, además, puede ser necesario registrar la aprobación, la ventana de cambio, el alcance y los resultados.

La identidad administrada del experimento debe tener permisos mínimos sobre los recursos objetivo. Si un experimento solo necesita reiniciar una máquina virtual concreta en un entorno de pruebas, no debería recibir permisos amplios sobre toda la suscripción. La granularidad de RBAC es una herramienta de seguridad, pero también de control operativo.

Warning: Nunca ejecutes un experimento de caos en producción sin una ventana acordada, métricas de salud visibles, plan de parada y responsables disponibles. La ingeniería del caos reduce riesgo cuando se practica con disciplina; sin ella, solo añade incertidumbre.

Ejecutar en no producción no siempre es suficiente

Empezar en desarrollo, test o preproducción es lo correcto. Permite validar permisos, configuración, telemetría y procedimientos sin exponer usuarios reales. Sin embargo, muchos fallos de resiliencia solo aparecen con tráfico real, datos reales, patrones de uso reales o límites reales de cuota.

La transición hacia producción debe ser gradual. Primero se ejecutan experimentos de baja intensidad sobre componentes no críticos. Después se amplía el alcance a horarios controlados y con guardrails más estrictos. Finalmente, si la madurez operativa lo permite, algunos experimentos pueden incorporarse a rutinas periódicas.

La clave está en evitar dos extremos. El primero es no probar nunca producción y descubrir en un incidente que los supuestos eran falsos. El segundo es ejecutar fallos agresivos sin haber construido confianza previa. Chaos Studio permite avanzar por pasos, pero la estrategia debe definirlos el equipo.

Integración con prácticas de plataforma

Chaos Studio encaja especialmente bien en equipos que ya trabajan con plataforma interna, infraestructura como código y revisiones automatizadas. Un experimento puede versionarse, revisarse y evolucionar igual que una plantilla de despliegue. Esto aporta trazabilidad: se sabe qué fallo se ejecutó, sobre qué recursos, con qué parámetros y con qué resultado.

En una organización madura, los experimentos de caos pueden asociarse a objetivos de resiliencia. Por ejemplo, cada servicio crítico debe demostrar tolerancia a reinicio de instancia, pérdida temporal de conectividad con una dependencia secundaria y recuperación automática tras saturación moderada. Estos objetivos pueden convertirse en parte de la definición de “listo para producción”.

No todos los experimentos tienen que ser complejos. Algunos de los más valiosos son simples: reiniciar una instancia, bloquear temporalmente una dependencia no crítica o introducir latencia en una llamada externa. Lo relevante es que el aprendizaje sea accionable. Si el resultado del experimento no cambia una configuración, una alerta, una guía operativa o una decisión de arquitectura, probablemente la hipótesis no estaba bien elegida.

Patrón recomendado para el primer experimento

Para un equipo que empieza con Chaos Studio, el primer experimento debería tener alcance pequeño, duración limitada y métricas claras. Una secuencia razonable sería seleccionar un servicio no crítico, identificar una dependencia redundante, formular una hipótesis medible, ejecutar el fallo en una ventana controlada y revisar los resultados con el equipo de aplicación y plataforma.

El objetivo no es demostrar que “todo aguanta”, sino descubrir una mejora concreta. Quizá el balanceador tarda más de lo esperado en retirar una instancia no saludable. Quizá la aplicación no expone bien su endpoint de health. Quizá las alertas detectan CPU, pero no impacto de usuario. Quizá el mecanismo de retry funciona en pruebas unitarias, pero genera tormenta de peticiones bajo latencia real.

Ese aprendizaje temprano es la base de una práctica sostenible. La ingeniería del caos no debería ser un evento anual espectacular, sino una forma continua de validar supuestos.

Antipatrones habituales

El primer antipatrón es ejecutar caos sin hipótesis. Si el experimento se define como “vamos a tirar una máquina a ver qué pasa”, el resultado suele ser confuso. Puede haber una incidencia, pero no necesariamente aprendizaje.

El segundo antipatrón es medir solo infraestructura. Una CPU estable no significa que el usuario esté recibiendo buen servicio. Una API con respuestas 200 puede estar entregando contenido incorrecto, incompleto o degradado. Esto es especialmente importante en sistemas con capas de conocimiento y agentes, donde la respuesta final depende de varias piezas coordinadas.

El tercer antipatrón es usar Chaos Studio como sustituto de arquitectura resiliente. Si una aplicación no tiene timeouts, retries controlados, idempotencia, colas, límites de concurrencia o health checks útiles, el caos solo confirmará problemas conocidos. Primero se diseña para fallar de forma segura; después se valida.

El cuarto antipatrón es no documentar los resultados. Cada experimento debería dejar una evidencia mínima: hipótesis, fecha, alcance, fallo aplicado, métricas observadas, conclusión y acciones. Sin esa memoria, el equipo repetirá discusiones y perderá confianza.

Qué aporta Chaos Studio a una estrategia de resiliencia en Azure

Chaos Studio aporta una pieza que muchas arquitecturas cloud necesitan: la capacidad de convertir la resiliencia en una práctica verificable. Azure ya ofrece servicios con alta disponibilidad, replicación, balanceo, automatización y observabilidad. Pero el ensamblaje concreto de esos servicios en una aplicación real siempre contiene supuestos.

Al ejecutar experimentos controlados, esos supuestos se vuelven visibles. El equipo descubre si sus health probes representan salud real, si sus alertas avisan antes que los usuarios, si sus dependencias tienen timeouts razonables, si sus mecanismos de recuperación son automáticos y si sus runbooks sirven bajo presión.

La adopción debería empezar con experimentos pequeños y crecer hacia escenarios más representativos. Primero una instancia, después una zona, después una dependencia, después una ruta completa de usuario. Con cada paso, el sistema no solo se vuelve más resistente; el equipo gana confianza operativa.

Azure Chaos Studio no promete que una aplicación nunca falle. Promete algo más útil: una forma estructurada de aprender cómo falla, cuánto impacto produce y qué hay que mejorar antes de que el fallo llegue sin avisar.