Pourquoi Dropbox peut-il être super rapide comparé au FTP?

36

J'aimerais savoir pourquoi techniquement Dropbox est beaucoup plus rapide que FTP? Quel type de technologie utilise-t-il?

Je ne parle pas de fichiers diff, je parle de transférer de nouveaux fichiers dans les deux cas, Dropbox est beaucoup plus rapide.

Je le pense vraiment beaucoup plus rapidement, peut-être 10 fois plus rapide que FTP pour les fichiers que j'ai téléchargés. Je vais expérimenter à nouveau pour des fichiers plus gros plus tard.

Peter Mortensen
la source
2
Quelle taille, type et nombre de fichiers avez-vous téléchargés? Combien de temps chacun a-t-il pris pour télécharger? Où avez-vous téléchargé les fichiers via FTP? Dropbox n’est pas magique, l’explication la plus simple est que le serveur FTP que vous avez téléchargé a aussi beaucoup moins de bande passante qu’Amazon.
user23307
2
s'ils l'ont déjà, ils ne le téléchargeront pas de nouveau.
Journeyman Geek
4
Vous dites «nouveaux fichiers», mais à moins que ces fichiers ne soient des données fraîches et aléatoires, vous voyez probablement les avantages de la synchronisation au niveau des blocs (comme dans rsync et d'autres outils).
Chris Johnsen
1
C’est plus une comparaison d’hébergement imo, je connais des serveurs FTP plus rapides que Dropbox et j’utilise également plusieurs connexions avec Filezilla, de sorte que les déclarations répertoriées dans cette réponse ne tiennent pas.
Tamara Wijsman
Dropbox utilise la déduplication pour économiser sur l’espace de stockage des fichiers communs, il n’a donc pas besoin de les télécharger si elle les a déjà.
Parroïde

Réponses:

31

Il pourrait y avoir un certain nombre de raisons à cela.
Le protocole FTP est loin d'être efficace.

  1. Un transfert FTP nécessite au moins deux connexions (une pour le contrôle et une pour les données), où DropBox utilise peut-être une seule connexion HTTP. De plus, la connexion de données pour une session FTP peut être ouverte du serveur vers votre client. Si vous êtes en mode NAT, cela peut échouer et votre client FTP peut essayer de se connecter de cette manière, en échouant de la sorte.

  2. Il y a beaucoup de va-et-vient sur une connexion FTP. Pour envoyer un fichier, le client doit envoyer un minimum de deux commandes (une pour ouvrir la connexion de données et une pour démarrer l'envoi) et chaque fois qu'il doit attendre que le serveur réponde, ce qui ajoute une latence supplémentaire. Outre ces deux allers-retours par fichier, il existe plusieurs allers-retours avec la commande pour la connexion initiale: un pour envoyer le nom d'utilisateur, un pour le mot de passe et au moins un pour définir les paramètres de transfert (afin de s'assurer que le serveur est correctement connecté). en attente de données binaires, pas ASCII). Le client peut également émettre quelques commandes supplémentaires pour obtenir des informations du serveur sur lui-même. Dropbox utilisera probablement cette requête HTTP, ou au plus deux (une pour s’authentifier, une pour envoyer les données).

  3. De plus, selon le client que vous utilisez pour les transferts FTP (ce que vous ne précisez pas, il serait judicieux de modifier votre question pour inclure cette information), il se peut que la connexion soit coupée après chaque opération d'envoi et qu'elle se reconnecte ensuite. temps. Il n'est pas improbable que DropBox maintienne une connexion ouverte pendant un certain temps aux fins de scrutation longue, afin de réagir dès que possible aux nouvelles données disponibles que ce client devrait télécharger, de manière à ce qu'il doive afficher une nouvelle Connexion HTTP pour envoyer un fichier qu'il n'a pas besoin de réauthentifier.

  4. Il n'est pas improbable que le client DropBox comprime les données avant de les envoyer (pour améliorer la vitesse et économiser la bande passante) là où votre client FTP ne sera pas. Ainsi, même pour des fichiers plus volumineux (à moins qu’ils ne soient précomprimés ou chiffrés), DropBox, et les utilitaires similaires, peuvent être plus rapides qu’un transfert FTP de base.

Pour les fichiers volumineux, les trois premiers points ci-dessus ne sont guère significatifs par rapport au temps nécessaire au transfert effectif des données, mais le point 4 peut néanmoins être très important. Pour les petits fichiers, le temps de configuration supplémentaire ajouté par le protocole FTP peut potentiellement être deux fois plus long que le temps nécessaire pour envoyer les données.

David Spillett
la source
+1 pour la réponse détaillée. Moi aussi, je me demandais comment Dropbox était si rapide.
Grant Palin
1
J'ai lu quelque part que les données de la boîte de dépôt sont cryptées avant le transfert - il serait donc logique que ce soit aussi (au moins un peu) compressé.
Dean Rather
Un fichier crypté ne devrait pas être compressible - je ne laisse pas tomber la boîte qui crypte les fichiers pendant le transfert
Martin Beckett le
@ mgb: vous avez raison de dire que les techniques de compression de fichier ne doivent pas trouver assez de redondance dans les données chiffrées pour être utiles. Ainsi, l'envoi initial d'un fichier n'entraînera aucune aide de la part de la compression. Mais si Dropbox a déjà le fichier et que vous venez de le mettre à jour (et que la clé est toujours la même), il est probable qu'il n'aura pas besoin de transférer le fichier entier pour mettre à jour la copie distante. Bien que les données ne puissent pas être compressées, la quantité que vous devez envoyer pour la maintenir à jour peut toujours être réduite (considérablement pour les gros fichiers qui voient de petites mises à jour).
David Spillett le
1
Je suis presque sûr qu'ils utilisent HTTPS pour le transfert (HTTP sur SSL) plutôt que d'envoyer des données en clair. Je ne sais pas quel cryptage (s'il en existe un) est utilisé pour le stockage réel, mais si vos données sont sensibles, vous devriez le crypter de toute façon pour que vous disposiez d'une copie des clés correspondantes.
David Spillett
15

Comme d'autres l'ont mentionné, Dropbox peut ignorer des parties de fichiers qui n'ont pas changé . Mais aussi, Dropbox ignorera le téléchargement de fichiers s'il en a déjà une copie côté serveur ( une copie déjà téléchargée par vous-même ou une autre personne).

Ainsi, si vous essayez de télécharger un fichier identique à un fichier déjà présent dans Dropbox, le téléchargement est ignoré (et les autres machines liées peuvent commencer à le télécharger à partir des serveurs Dropbox). Si vous téléchargez un fichier presque identique à un autre fichier déjà téléchargé (vous ne pouvez pas savoir si le fichier déjà chargé doit être "le vôtre" ou s'il peut provenir d'un utilisateur quelconque), il n'enverra alors qu'un nombre suffisant de parties du fichier. fichier pour le recréer sur le serveur une fois combiné avec le fichier déjà téléchargé.

FTP ne peut faire aucune de ces choses (c'est un protocole simple pour envoyer et recevoir des flux de données sans référence à aucune autre donnée disponible sur l'extrémité distante). Des outils tels que rsync et Unison peuvent «ignorer les morceaux que l'autre côté possède déjà», mais se limitent généralement à comparer des morceaux dans des fichiers à un chemin identique dans la hiérarchie synchronisée. Dropbox semble étendre cette idée aux collections de fichiers (donc, si vous «téléchargez» deux fichiers presque identiques, il est probable qu’il pourrait s’arranger pour n’en envoyer qu’un plus suffisamment de «diff» pour recréer l’autre).

Chris Johnsen
la source
11

Je suppose que vous voulez dire plus rapidement en termes de transfert de fichiers. Lorsque vous enregistrez un fichier dans votre dossier Dropbox, Dropbox envoie uniquement le delta (ou le diff) des données au serveur de stockage distant. FTP (le plus probable) envoie le fichier octet par octet (plutôt que d'envoyer simplement les modifications), ce qui prend potentiellement beaucoup plus de temps à transférer sur un réseau. De même, lors de la synchronisation à partir du serveur distant, les clients locaux ne téléchargeront que les modifications.

La fonction de synchronisation LAN peut également potentiellement accélérer les synchronisations et réduire le trafic réseau nécessaire.

sblair
la source
En effet, je parle de nouveaux fichiers pour les deux cas.
0

Dropbox peut être plus rapide lorsque vous envoyez une plus grande quantité de fichiers. FTP est aussi rapide que vous pouvez obtenir lorsque nous parlons vitesse, mais il faut trop de "conversation" entre le serveur et l'ordinateur client pour chaque fichier, de sorte que le ftp semble être plus lent. Si vous téléchargez une application open source contenant des milliers de fichiers, il est plus pratique de compresser tous les fichiers, de les télécharger via FTP et de les décompresser sur le serveur.

Greenleader
la source
0

Je suppose qu'ils utilisent des techniques de hachage simples similaires à md5 / sha

Chaque fois que vous déposez un fichier dans une "dropbox" locale, dropbox-client calcule le hachage de ce fichier et doit envoyer des données supplémentaires, telles que la taille du fichier, nom de fichier au serveur de dropbox.

Si dropbox-server trouve des fichiers similaires (ils doivent conserver un index des hachages et des données de fichier sur leur serveur), il informera simplement le client que le fichier a été "téléchargé" avec succès. ;-)

De cette façon, vous finissez par "télécharger" le fichier de manière logique. Comme il n’ya pas de véritable transfert de contenu de fichier, cela doit être plus rapide qu’autre chose.

Je ne sais pas quel algorithme de hachage est utilisé par Dropbox, mais je suis sûr à 100% que leur principe de fonctionnement est similaire à celui que j'ai décrit ci-dessus.

rahul286
la source
0

Bien que Dropbox utilise d'autres services, ils utilisaient auparavant Amazon AWS (Amazon Web Services). Il semble que votre transfert de la source à la destination comporte un très gros tuyau de transfert. D'après mon expérience, Dropbox utilise une destination capable d'accepter de grandes quantités de données à la fois. Dropbox distribue également le téléchargement vers différentes adresses IP. Le site sur lequel vous effectuez un FTP a probablement un tuyau de transfert beaucoup plus petit et n’a pas la capacité de distribuer les téléchargements aussi efficacement.

Si vous exécutez Resource Monitor (resmon) et accédez à l'onglet Réseau, vous remarquerez les différents processus utilisant la bande passante réseau.

  • Sous Processus avec activité réseau, sélectionnez la colonne correspondant à Total (B/sec)
  • Sous Connexions TCP, sélectionnez la colonne pour Total (B/sec)

Pour moi, lorsque je télécharge un fichier sur Dropbox, il utilise 4 connexions pour envoyer 4 adresses IP différentes.

entrez la description de l'image ici

Soleil
la source