Hace ya un bien tiempo le hable sobre pasar archivos de un servidor a otro, hoy le digo como agilizar ese proceso.
Usando rsync
A menos que usen el protocolo rsync, una transferencia rsync entre 2 equipos utiliza como capa de transporte a SSH, SSH por lo general va cifrado (y sin compresión) y siempre en el cifrado de mayor complejidad posible, lo cual, si tu CPU es lento, hará que las transferencias duren mucho.
¿cómo solucionarlo? fácil!, cambiando el cifrado.
El cifrado SSH
SSH utiliza diversos algoritmos de cifrado (como 3DES o AES), a menos que tengas un CPU que soporte aceleración por hardware del cifrado AES (modernos CPU core i7 ó Xeon), usar un alto cifrado tiene un gran penalty en la velocidad de transferencia, en cambio, si es una conexión relativamente segura (desde tu portátil a otro equipo, ejemplo, una NAS en tu casa) usar un algoritmo inseguro puede ayudar a mejorar la velocidad de transferencia.
¿Cómo?, veamos.
RSYNC con ¿blowfish, arcfour?
Hay 2 cifrados bastante inseguros, pero muy rápidos de computar con hardware decente, uno es blowfish y el otro es arcfour (versiones de 128 y 256), mi equipo de pruebas es un:
- Equipo Intel Atom J1900U con red Ethernet Gigabit, pero
- Conectado a un swith 100Mbps
- Y mi portátil está en una red LAN 802.11g (54Mbps)
En estas condiciones “promedio” ejecutamos el rsync:
He movilizado 1GB de información (un backup del sistema raíz) con el siguiente comando:
rsync -viHaAXv -S --recursive --progress --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* [email protected]:/opt/installer/appliance
Y este es el tiempo:
sent 1,137,165,129 bytes received 830,145 bytes 2,661,977.25 bytes/sec total size is 1,134,756,293 speedup is 1.00
real 7m6.843s user 0m28.400s sys 0m10.204s
2.6MBps fueron transferidos en 7 minutos.
Ahora, usando arcfour128:
rsync -viHaAXv -S --recursive --progress -e "ssh -T -c arcfour128 -o Compression=yes -x" --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* [email protected]:/opt/installer/appliance
sent 1,137,202,567 bytes received 830,277 bytes 4,832,411.23 bytes/sec total size is 1,134,794,587 speedup is 1.00
real 3m55.097s user 2m16.032s sys 0m14.868s
Esto es una tasa de transferencia de 4.8Mbps, que movieron 1GB de datos en 3,55 minutos, esto es un 90% de mejora en la velocidad!
Haciendo benchmark
Mis condiciones, no son tus condiciones, por lo que hacer un juicio “objetivo” sobre usar arcfour128, o blowfish, o AES si tu CPU lo soporta, lo mejor es que pruebes “tú mismo”, para ello tienes este pequeño script bash que te ayudará:
Crea un archivo de 50MB:
dd if=/dev/zero of=/opt/test-file bs=1M count=50
Y ejecutas este script:
#!/bin/sh for cipher in aes128-ctr aes192-ctr aes256-ctr arcfour256 arcfour128 aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc arcfour ; do echo "$cipher" for try in 1 2 ; do time rsync -viHaAXS -e "ssh -T -c $cipher -o Compression=yes -x" /opt/test-file USER@IP-DESTINATION done done
Y podrás obtener cuánto dura una transferencia de uno destino a otro con los cifrados soportados por openSSH.
Dejar una contestacion