Je voudrais 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.
Il pourrait y avoir un certain nombre de raisons à cela.
Le protocole FTP est loin efficace.
Un transfert FTP nécessite au moins deux connexions (une pour le contrôle et une pour les données) où DropBox peut utiliser 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 tenter de se connecter de cette manière, en échouant de la sorte.
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. En plus de 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).
De plus, selon le client que vous utilisez pour les transferts FTP (ce que vous ne spécifiez 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 ait à afficher une nouvelle Connexion HTTP pour envoyer un fichier qu'il n'aura pas besoin de réauthentifier.
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.
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 (celui que vous ou toute autre personne avez déjà téléchargé).
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 de n'importe quel utilisateur), 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 nison peuvent "ignorer des morceaux déjà présents de l'autre côté", mais sont généralement limités à la comparaison de morceaux dans des fichiers avec 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).
Je suppose que vous voulez dire plus rapidement en termes de transfert de fichiers. Lorsque vous enregistrez un fichier dans votre dossier Dropbox, Dropbox n’envoie que le delta (ou 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 depuis 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.
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.
Total (B/sec)
.Total (B/sec)
Pour moi, quand je télécharge un fichier sur Dropbox, il utilise 4 connexions pour envoyer 4 adresses IP différentes.
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 va simplement informer 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.
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.