Por qué la transferencia de archivos pequeños puede ser tan lenta y cómo optimizarla

Por qué la transferencia de archivos pequeños puede ser tan lenta y cómo optimizarla
Horror
Le pedimos al nuevo que hiciera el respado de un servidor de un cliente antes de hacerle el mantenimiento. Le dijimos, el jueves nos llevaremos el servidor(Hoy es martes). (Le dimos las credenciales de Rclone y del propio servidor). Esto pasa por mentir en tu carta de presentación.

Si alguna vez has transferido un gran volumen de archivos a través de una red local o internet, seguramente te habrás preguntado por qué, a pesar de tener conexiones rápidas y hardware potente, el tiempo de transferencia puede variar tanto. Especialmente cuando los archivos son pequeños, los tiempos pueden ser frustrantemente lentos.

A continuación, exploraremos las razones técnicas de este fenómeno y las posibles soluciones para optimizar tus transferencias.

Escenario:

Supongamos que tienes que transferir 15,000 archivos pequeños que ocupan unos 150 GB en total:

  1. En una red local Gigabit: La transferencia puede completarse en un par de horas.
  2. Hacia un servidor remoto por internet: Aunque tengas una conexión de 1 Gbps y el servidor cuente con hardware de alto rendimiento (discos NVMe, procesadores Xeon, RAM abundante y ancho de banda de 2.5 Gbps), la misma transferencia podría tardar días.

Curiosamente, si en lugar de archivos pequeños transfieres unos pocos archivos grandes (de 15 GB cada uno, por ejemplo), el tiempo total se reduce drásticamente. ¿Qué está pasando aquí?

Factores que afectan las transferencias

1. Latencia de la red

La latencia es el tiempo que tarda un paquete de datos en viajar desde el origen hasta el destino. En redes locales, la latencia es muy baja, pero cuando trabajas con un servidor remoto, esta puede ser considerablemente mayor debido a la distancia geográfica y el número de saltos (hops) que los datos atraviesan.

Cada archivo pequeño genera una serie de operaciones: establecer la conexión, enviar metadatos, transferir los datos y cerrar la conexión. Estas operaciones repetitivas se ven más afectadas por la latencia que las transferencias continuas de archivos grandes.

2. Overhead del protocolo de transferencia

Protocolos como TCP, SFTP o FTP necesitan confirmar constantemente que los datos han sido enviados y recibidos correctamente. Con archivos pequeños, el tiempo dedicado a esta comunicación puede superar al tiempo efectivo de transferencia.

3. Control de congestión TCP

TCP ajusta la velocidad de transferencia dependiendo de las condiciones de la red. En conexiones de alta latencia, puede tardar más en alcanzar velocidades óptimas, sobre todo cuando se transfieren muchos archivos pequeños que interrumpen el flujo.

4. Rendimiento de los discos

Aunque los discos NVMe tienen un rendimiento excepcional, transferir miles de archivos pequeños implica muchas operaciones de entrada/salida por segundo (IOPS). Estas operaciones generan una carga extra que no ocurre al transferir archivos grandes, donde el acceso es mayoritariamente secuencial.

5. Segmentación del ancho de banda

En redes compartidas, otros usuarios o procesos pueden consumir parte del ancho de banda disponible, reduciendo la velocidad efectiva de tus transferencias.

Soluciones para optimizar la transferencia de archivos

1. Agrupa los archivos pequeños

Antes de transferir, comprime los archivos pequeños en un contenedor único (como un archivo ZIP o TAR). Esto reduce el número de conexiones necesarias y permite que la transferencia sea más eficiente.

2. Ajusta los parámetros de TCP

Modifica configuraciones como el TCP window size y los buffers en tu sistema y servidor. Esto ayuda a mejorar la velocidad en conexiones de alta latencia.

3. Usa herramientas optimizadas

Herramientas como rsync (con compresión activada) o software especializado como Aspera o Rclone pueden acelerar las transferencias gracias a sus optimizaciones para redes WAN.

4. Realiza transferencias concurrentes

Divide las transferencias en varias sesiones simultáneas. Esto puede reducir el impacto de la latencia y aprovechar mejor el ancho de banda disponible.

5. Verifica la calidad de la conexión

Asegúrate de que no haya pérdida de paquetes o congestión en la red. Utiliza herramientas como MTR o PingPlotter para identificar problemas.