Quelle est la manière la plus rapide de transférer des fichiers sur un réseau (FTP, HTTP, RSync, etc.) [fermé]
j'essaie de trouver le meilleur moyen de transférer de grandes quantités de données sur un réseau entre deux systèmes. Je suis actuellement à la recherche de FTP, HTTP, ou RSync, et je me demande lequel est le plus rapide. J'ai cherché des réponses en ligne et j'ai trouvé les sites suivants:
Le problème est que ceux-ci sont anciens, et en parler plus sur les différences théoriques entre la façon dont les protocoles communiquent. Je suis plus intéressé par les benchmarks réels, qui peuvent dire que pour une installation spécifique, lors du transfert de fichiers de tailles variables, un protocole est x% plus rapide que les autres.
quelqu'un A tester et publié les résultats quelque part?
5 réponses
Bon, j'ai installé le test suivant:
- Hardware: 2 desktops Intel Core Duo CPU @ 2.33 GHz, avec 4G de RAM.
- OS: Ubuntu 11.10 sur les deux machines
- Réseau: Commutateur dédié de 100 Mo, les deux machines y sont connectées.
- Logiciel:
- Python HTTP server (inspirées par cette).
- Python FTP server (inspirées par cette).
- client HTTP Python (inspirées par cette).
- Python FTP client (inspirées par cette).
j'ai téléchargé les groupes de fichiers suivants sur chaque serveur:
- 1 Fichier 100M.
- 10 10M fichiers.
- 100 fichiers 1M.
- 1 000 fichiers 100K.
- 10 000 fichiers 10K.
j'ai obtenu les résultats moyens suivants sur plusieurs passages (nombres en secondes):
|-----------+---------+----------|
| File Size | FTP (s) | HTTP (s) |
|-----------+---------+----------|
| 100M | 8 | 9 |
| 10M | 8 | 9 |
| 1M | 8 | 9 |
| 100K | 14 | 12 |
| 10K | 46 | 41 |
|-----------+---------+----------|
ainsi, il semble que FTP est légèrement plus rapide dans les gros fichiers, et HTTP est un peu plus rapide dans de nombreux petits fichiers. Dans l'ensemble, je pense qu'ils sont comparables, et l'implémentation du serveur est beaucoup plus importante que le protocole.
si les machines à chaque extrémité sont assez puissantes (c'est-à-dire pas des netbooks, des boîtes NAS, des toasters, etc.), alors je m'attendrais à ce que tous les protocoles qui fonctionnent sur TCP soient à peu près à la même vitesse au transfert de données en vrac. Le travail du protocole d'application est vraiment juste de remplir un tampon pour TCP à transférer, aussi longtemps qu'ils peuvent le garder plein, TCP va mettre le pas.
les protocoles qui font de la compression ou du cryptage peuvent causer des goulots d'étranglement au CPU sur les machines moins puissantes. Mon netbook fait beaucoup de FTP plus rapide que SCP.
rsync fait des choses intelligentes pour transmettre des changements incrémentiels rapidement, mais pour les transferts en masse, il n'a aucun avantage sur les protocoles Idiots.
un Autre utilitaire à considérer est bbcp : http://www.slac.stanford.edu/~abh/bbcp/.
Un bon, mais daté, tutoriel pour l'aide c'est ici: http://pcbunn.cithep.caltech.edu/bbcp/using_bbcp.htm . J'ai trouvé que bbcp est extrêmement bon pour le transfert de gros fichiers (plusieurs Go). Dans mon expérience, il est plus rapide que rsync en moyenne.
rsync compresse optionnellement ses données. Que fait généralement le transfert aller beaucoup plus vite. Voir rsync-z.
Vous n'avez pas mentionné scp, mais scp-c compresse également.
notez que la compression peut accélérer le transfert ou plus lent, dépendant de la vitesse de votre CPU et de votre liaison réseau. (Les liens plus lents et les CPU plus rapides font de la compression une bonne idée; les liens plus rapides et les CPU plus lents font de la compression une mauvaise idée.) Comme avec toute optimisation, de mesurer les résultats dans votre propre environnement.
j'ai peur que si vous voulez connaître la réponse à vos besoins et de la configuration, vous devez être plus précis, ou faire votre propre performance (fiabilité) des tests. Cela aide d'avoir une compréhension au moins rudimentaire des protocoles en question et de leur communication, donc je considérerais les articles que vous avez cités comme une ressource utile. Il est également utile de savoir quelles étaient les restrictions auxquelles les premiers inventeurs de ces protocoles ont dû faire face. sans mémoire, ou ont-ils dû compter leurs cycles cpu? Voici quelques choses à considérer ou à répondre si vous souhaitez obtenir une réponse adaptée à votre situation:
- système D'exploitation/système de fichiers:
- est-ce que vous copiez entre la même combinaison OS/FS ou avez-vous à vous soucier des incompatibilités, comme les types de fichiers sans équivalent à la réception?
- C'est-à-dire. avez-vous quelque chose de spécial à transporter? Métadonnées, fourchettes de ressources, étendue les attributs, les permissions de fichier peuvent tout simplement ne pas être transportés par le protocole/l'outil de votre choix, ou être sans signification à la fin de réception.
- il en va de même pour les fichiers épars, qui pourraient finir par être gonflés à la taille réelle à l'autre extrémité de la copie, ruinant tous les plans que vous avez pu avoir sur le dimensionnement.
- contraintes physiques:
- impact réseau
- charge cpu: de nos jours, la compression est beaucoup "moins chère", puisque les CPU modernes sont moins mis à l'épreuve par la compression que ceux de l'époque où la plupart des protocoles de transfert étaient conçus.
- tolérance à l'échec-avez-vous besoin de pouvoir reprendre là où un transfert interrompu vous a laissé, ou préférez-vous recommencer?
- transferts supplémentaires, ou transferts complets? Un transfert progressif poser de grosses économies pour vous, ou vous en avez plein les transferts par la conception de votre tâche de toute façon? Dans ce dernier cas, la latence ajoutée et l'impact mémoire à construire la liste des transferts avant le début du transfert serait un compromis moins souhaitable.
- dans quelle mesure le protocole d'utilisation du MTU est-il disponible par le protocole réseau sous-jacent?
- avez-vous besoin de maintenir un flux régulier de données, par exemple pour garder un streaming de lecteur de bande à l'extrémité de réception?
beaucoup de choses à considérer, et je suis sûr que la liste n'est même pas complète.