Tu aplicación funciona perfectamente, hasta que… todo se rompe
¿Alguna vez has notado que en producción todo funciona perfectamente justo hasta que ocurre algo fuera de lo común? La base de datos se congela por un segundo — y todo el frontend se convierte en una pantalla blanca. La API de un servicio externo responde con un error 500 — y los usuarios ven «Algo salió mal». ¿Te suena familiar?
En las pruebas clásicas verificamos: «¿Todo funciona? Ok, lanzamos». Pero el mundo de los sistemas distribuidos y los microservicios (y JavaScript hoy domina tanto el backend como el frontend) es cruel. Exige cinismo ingenieril. Aquí es donde entra en escena Chaos Engineering — una disciplina que nos enseña a romper el sistema intencionalmente para hacerlo más fuerte.
Analicemos cómo aplicar Chaos Engineering en aplicaciones JS (ya sea un backend Node.js, un frontend React o un sitio Next.js) y escribamos código que puedas ejecutar hoy mismo.
¿Qué es Chaos Engineering en palabras sencillas?
Chaos Engineering (ingeniería del caos) es la práctica de realizar experimentos en un sistema distribuido para identificar sus puntos débiles antes de que lo hagan los usuarios reales. Netflix, por ejemplo, creó Chaos Monkey — un servicio que mata aleatoriamente servidores de producción en horario laboral. ¿Suena una locura? Sí. ¿Funciona? Y cómo.
La idea principal: en lugar de temer a los fallos, los provocamos en un entorno controlado. Esto permite:
- Encontrar errores ocultos en la lógica de manejo de errores
- Verificar que la aplicación se recupere correctamente tras una caída
- Asegurarse de que la monitorización y las alertas funcionan
- Mejorar la cultura de resilience (tolerancia a fallos) en el equipo
Para el desarrollador de JavaScript esto es especialmente relevante: las aplicaciones frontend dependen de cientos de APIs, y los servicios Node.js a menudo funcionan en la nube, donde las máquinas virtuales pueden morir en cualquier momento.
Herramientas para Chaos Engineering en JavaScript
No es necesario lanzar Gremlin en producción de inmediato. Empieza con algo pequeño — con experimentos locales. Esto es lo que nos será útil:
- Gremlin — una potente plataforma con SDK para Node.js. Permite emular retrasos, fallos de CPU, y matar procesos.
- Chaos Monkey de Netflix (parte de Spinnaker) — para quienes ya viven en una arquitectura de microservicios.
- node-chaos — una biblioteca ligera para introducir caos en aplicaciones Node.js.
- Scripts propios — a veces es más fácil escribir 20 líneas de código que desplegar una herramienta pesada.
Tomaremos un tercer camino y escribiremos nuestro propio pequeño «ingeniero del caos» en JavaScript puro.
Práctica: escribimos un Chaos Experiment para Node.js
Paso 1. Escenario: «Retraso repentino de la API»
Imaginemos que tenemos un servidor Express que consulta una base de datos. De repente, la BD comienza a responder con un retraso de 5 segundos. ¿Cómo se comportará el código del cliente?
Crearemos un middleware para Express que, con un 30% de probabilidad, añada un retraso aleatorio (de 1 a 10 segundos):
// chaos-middleware.jsconst chaosMiddleware = (req, res, next) => { // Probabilidad de fallo: 30% const shouldFail = Math.random() < 0.3;
if (shouldFail) { // Retraso aleatorio de 1000 a 10000 ms const delay = Math.floor(Math.random() * 9000) + 1000; console.warn(`[CHAOS] Inyectando latencia: ${delay}ms para ${req.path}`);
setTimeout(() => { // Con un 10% de probabilidad — matamos la solicitud con un error 500 if (Math.random() < 0.1) { return res.status(500).json({ error: 'Fallo inducido por Chaos' }); } next(); }, delay); } else { next(); }};
module.exports = chaosMiddleware;Conectamos el middleware a la aplicación:
// app.jsconst express = require('expres