La larga caída de Cloudflare resultó ser el resultado de un manejo incorrecto de errores

La empresa Cloudflare publicó un análisis de uno de los incidentes más grandes en su infraestructura, a causa del cual gran parte de su red de entrega de contenido estuvo inoperativa durante más de 3 horas. La falla ocurrió después de un cambio en la estructura de la base de datos alojada en el almacenamiento ClickHouse, tras lo cual el archivo con los parámetros para el sistema de mitigación de bots se duplicó en tamaño. Se formaron tablas duplicadas en la base de datos, mientras que la consulta SQL para generar el archivo simplemente extraía todos los datos de todas las tablas por clave, sin filtrar duplicados. SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;

La larga caída de Cloudflare resultó ser el resultado de un manejo incorrecto de errores

El archivo creado se propagó a todos los nodos del clúster que procesa las solicitudes entrantes. En el manejador que utiliza este archivo para verificar las solicitudes de bots, los parámetros especificados en el archivo se guardaban en la memoria RAM y, para protegerse contra el uso excesivo de memoria, se estableció un límite en el tamaño máximo permitido del archivo. En condiciones normales, el tamaño real del archivo era significativamente menor que el límite establecido, pero tras la duplicación de las tablas, superó el límite.

El problema fue que, en lugar de tratar correctamente el exceso del límite y continuar utilizando la versión anterior del archivo, informando al sistema de monitoreo sobre la situación anómala, el manejador se cerraba de manera inesperada, lo que bloqueaba el paso del tráfico. El error se debió al uso en el código en lenguaje Rust del método unwrap() con el tipo Result.

La larga caída de Cloudflare resultó ser el resultado de un manejo incorrecto de errores

Cuando el valor de Result tiene el estado «Ok», el método unwrap() devuelve el objeto asociado a ese estado, pero si el resultado no es exitoso, la llamada provoca un cierre inesperado (se invoca el macro «panic!»). Normalmente, unwrap() se utiliza en el proceso de depuración o al escribir código de prueba y no se recomienda su uso en proyectos en producción.

La larga caída de Cloudflare resultó ser el resultado de un manejo incorrecto de errores
La larga caída de Cloudflare resultó ser el resultado de un manejo incorrecto de errores


Fuente: opennet.ru
Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster