Me gustaría saber por qué técnicamente Dropbox es mucho más rápido que FTP. ¿Qué tipo de tecnología utiliza?
No estoy hablando de archivos diff, estoy hablando de transferir archivos nuevos en ambos casos, Dropbox es mucho más rápido.
Lo digo en serio, mucho más rápido, tal vez 10 veces más rápido que FTP para los archivos que cargué. Experimentaré nuevamente para archivos más grandes más tarde.
Respuestas:
Podría haber varias razones para esto.
El protocolo FTP está lejos de ser eficiente.
Una transferencia FTP necesita al menos dos conexiones (una para control y otra para datos) donde DropBox puede estar usando solo una conexión HTTP. Además, la conexión de datos para una sesión FTP puede abrirse desde el servidor a su cliente y si tiene NAT esto puede fallar, por lo que su cliente FTP puede estar intentando conectarse de esa manera, fallando y luego intentando lo contrario.
Hay muchas cosas que hacer en una conexión FTP. Para enviar un archivo, el cliente debe enviar un mínimo de dos comandos (uno para abrir la conexión de datos y otro para iniciar el envío) y cada vez que necesita esperar a que el servidor responda, agregando latencia adicional. Además de estos dos viajes de ida y vuelta por archivo, hay varios viajes de ida y vuelta de comando para la conexión inicial: uno para enviar el nombre de usuario, otro para la contraseña y al menos uno para establecer los parámetros de transferencia (para asegurarse de que el servidor esté esperando datos binarios, no ASCII). El cliente también puede emitir un par de comandos adicionales para recuperar información del servidor sobre sí mismo. Es probable que Dropbox esté usando solo esa solicitud HTTP, o como máximo dos (una para autenticar, otra para enviar los datos).
Además de esto, dependiendo del cliente que esté utilizando para las transferencias FTP (que no especifique, sería una buena idea editar su pregunta para incluir esa información), puede estar desconectando la conexión después de cada operación de envío y volviendo a conectarse. hora. No es improbable que DropBox mantenga una conexión abierta por un tiempo con fines de sondeo largo, para reaccionar tan pronto como sea posible a los nuevos datos disponibles que este cliente debe descargar, por lo que necesitará abrir un nuevo Conexión HTTP para enviar un archivo que no necesitará volver a autenticar.
No es improbable que el cliente DropBox esté comprimiendo datos antes de enviarlos (para mejorar la velocidad y ahorrar ancho de banda) donde su cliente FTP no estará. Entonces, incluso para archivos más grandes (a menos que estén precomprimidos o encriptados) DropBox, y las utilidades similares, pueden ser más rápidas que una transferencia FTP básica por algún margen.
Para archivos grandes, los primeros tres puntos anteriores palidecerán en insignificancia en comparación con el tiempo necesario para transferir los datos, pero el punto 4 aún puede ser bastante importante. Para archivos pequeños, todo el tiempo de configuración adicional agregado por el protocolo FTP puede ser potencialmente un par de veces más largo que el tiempo necesario para enviar los datos.
fuente
Como otros han mencionado, Dropbox puede omitir partes de archivos que no han cambiado . Pero también, Dropbox omitirá la carga de archivos si ya tiene una copia en el lado del servidor (una que usted o cualquier otra persona ya haya subido).
Entonces, si está intentando cargar un archivo que es idéntico a un archivo que Dropbox ya tiene, la carga se omite (y las otras máquinas vinculadas pueden comenzar a descargarlo desde los servidores de Dropbox). Si está cargando un archivo que es casi idéntico a otro archivo ya cargado (no está claro si el archivo ya cargado debe ser 'suyo' o podría provenir de algún usuario), simplemente enviará suficientes partes del para recrearlo en el servidor cuando se combina con el archivo que ya se cargó.
FTP no puede hacer ninguna de estas cosas (es un protocolo simple para enviar y recibir flujos de datos sin referencia a ningún otro dato disponible en el extremo remoto). Las herramientas como rsync y Unison pueden "omitir fragmentos que el otro lado ya tiene", pero generalmente se limitan a comparar fragmentos dentro de archivos en una ruta idéntica en la jerarquía sincronizada. Dropbox parece extender esta idea a colecciones de archivos (por lo que si 'carga' dos archivos casi idénticos, presumiblemente podría hacer arreglos para enviar solo uno más suficiente 'diff' para volver a crear el otro).
fuente
Supongo que quieres decir más rápido en términos de transferencia de archivos. Cuando guarda un archivo en su carpeta de Dropbox, Dropbox solo envía el delta (o diff) de los datos al servidor de almacenamiento remoto. FTP (muy probablemente) envía el archivo byte a byte (en lugar de enviar los cambios), lo que potencialmente demora mucho más en transferirse a través de una red. Del mismo modo, al sincronizar desde el servidor remoto, los clientes locales descargarán solo los cambios.
La función de sincronización LAN también puede acelerar las sincronizaciones y reducir el tráfico de red necesario.
fuente
Dropbox puede ser más rápido cuando envía una mayor cantidad de archivos. FTP es lo más rápido que puede obtener cuando hablamos de velocidad, pero se necesita demasiada "conversación" entre el servidor y la computadora del cliente para cada archivo, por lo que el ftp parece ser más lento. Si está cargando alguna aplicación de código abierto con miles de archivos, es más conveniente comprimir todos los archivos, cargarlos a través de FTP y descomprimirlos en el servidor.
fuente
Supongo que usan técnicas de hashing simples similares a md5 / sha
Cada vez que suelta un archivo dentro de "dropbox" local, dropbox-client calcula el hash de ese archivo y debe enviar algunos datos adicionales como tamaño de archivo, nombre de archivo al servidor de dropbox.
Si dropbox-server encuentra archivos similares (deben mantener un índice de hashes y datos de archivo en su servidor) , simplemente informará al cliente que el archivo se ha "cargado" con éxito. ;-)
De esta manera, terminas "cargando" el archivo lógicamente. Como no hay una transferencia real de contenido de archivos, esto tiene que ser más rápido que cualquier otra cosa.
No estoy seguro de qué algoritmo de hashing utiliza Dropbox, pero estoy 100% seguro de que su principio de funcionamiento es similar al que describí anteriormente.
fuente
Aunque Dropbox está utilizando otros servicios, históricamente han estado utilizando Amazon AWS (Amazon Web Services). Parece que su transferencia desde el origen al destino tiene una tubería de transferencia muy grande. En mi experiencia, Dropbox está utilizando un destino que puede aceptar grandes cantidades de datos a la vez. Dropbox también distribuye la carga a diferentes direcciones IP. El sitio al que está enviando FTP probablemente tenga una tubería de transferencia mucho más pequeña y no tenga la capacidad de distribuir cargas tan eficientemente.
Si ejecuta el Monitor de recursos (resmon) y va a la pestaña Red, notará los diferentes procesos que utilizan el ancho de banda de la red.
Total (B/sec)
Total (B/sec)
Para mí, cuando estoy cargando un archivo en Dropbox, está usando 4 conexiones para enviar 4 direcciones IP diferentes.
fuente