Marcio Cunha

Simulación de Condiciones de Red Degradadas y Pérdida de Paquetes en Pruebas de Integración Continua

Aprenda a simular fallas de red, alta latencia y pérdida de paquetes en pipelines de CI para validar la resiliencia de sistemas distribuidos antes del despliegue en producción.

Marcio Cunha•2 min
También disponible en:EnglishPortuguês
Resumen
  • Los entornos de prueba aislados frecuentemente enmascaran problemas reales de infraestructura que solo surgen bajo estrés de red.
  • Las herramientas de control de tráfico a nivel de kernel permiten inyectar latencia controlada y jitter sin alterar el código de la aplicación.
  • Los pipelines de integración continua ganan madurez al validar tiempos de espera y mecanismos automáticos de reintento de solicitudes.
  • El comportamiento de los sistemas asíncronos cambia drásticamente cuando los paquetes TCP se descartan aleatoriamente durante el transporte.
  • Garantizar la resiliencia contra fallas de conectividad previene interrupciones catastróficas y mejora la experiencia del usuario final.

El Desafío Silencioso de la Conectividad Inestable en Sistemas Modernos

Cuando desarrollamos software, solemos asumir que la infraestructura subyacente es perfecta. En la práctica, los paquetes de datos viajan por redes físicas complejas, enrutadores sobrecargados y conexiones móviles oscilantes, donde la pérdida de paquetes y la alta latencia son rutinarias. Probar aplicaciones solo en redes locales perfectas crea una falsa sensación de seguridad, ya que el sistema colapsa en cuanto se encuentra con el mundo real.

La integración continua (el proceso automatizado de probar cada cambio de código antes de unirlo al proyecto principal) suele ejecutarse en servidores potentes con conexiones ultrarrápidas. Para exponer fallas ocultas de arquitectura, necesitamos corromper artificialmente esta conexión durante las pruebas automatizadas, simulando el caos del mundo real dentro del propio pipeline.

Herramientas de Inyección de Fallas de Red en Contenedores

Para manipular el tráfico de red sin alterar la lógica del software, recurrimos a utilidades del sistema operativo que intercepcionan y modifican los paquetes de datos. El más famoso de ellos es el comando 'tc' (Traffic Control, una función del núcleo de Linux para gestionar el flujo de tráfico), frecuentemente combinado con el módulo 'netem' (Network Emulator), diseñado específicamente para añadir retrasos, corrupción, duplicación y pérdida de paquetes.

En entornos modernos basados en contenedores (unidades aisladas que empaquetan el código y sus dependencias), podemos aplicar estas reglas de red directamente en la interfaz virtual del contenedor antes de ejecutar las pruebas de integración. En la práctica, esto significa que podemos configurar el sistema para descartar aleatoriamente el diez por ciento de todos los paquetes enviados, obligando a la aplicación a demostrar si sabe lidiar con respuestas perdidas.

Implementando la Simulación de Pérdida de Paquetes con Docker y Netem

Para llevar la teoría a la práctica, podemos configurar un script de inicialización que utiliza 'tc' para inyectar degradación en la red del entorno de prueba. A continuación, vea cómo aplicar una regla que añade cien milisegundos de retraso y descarta el cinco por ciento de los paquetes en una interfaz de red específica.

#!/bin/bash
# Identifica la interfaz de red predeterminada del contenedor
INTERFACE=$(ip route show | awk '/default/ {print $5}')

# Aplica un retraso de 100ms con variación de 10ms y pérdida del 5% de paquetes
sudo tc qdisc add dev $INTERFACE root netem delay 100ms 10ms loss 5%

echo