web-dev-qa-db-fra.com

Quelle est la meilleure façon de transférer un seul gros fichier sur un lien à haut débit et à latence élevée WAN link?

Cela semble lié à celui-ci , mais c'est quelque peu différent.

Il existe ce lien WAN entre deux sites de l'entreprise, et nous devons transférer un seul fichier très volumineux (vidage Oracle, ~ 160 Go).

Nous avons une bande passante complète de 100 Mbps (testée), mais on dirait qu'une seule connexion TCP ne peut tout simplement pas la maximiser en raison de la façon dont TCP fonctionne ( ACK, etc.). Nous avons testé le lien avec iperf , et les résultats changent considérablement lorsque nous augmentons la taille de la fenêtre TCP: avec les paramètres de base, nous obtenons un débit de ~ 5 Mbps, avec un WS plus grand, nous pouvons obtenir jusqu'à ~ 45 Mbps, mais pas plus que cela. La latence du réseau est d'environ 10 ms.

Par curiosité, nous avons exécuté iperf en utilisant plusieurs connexions, et nous avons constaté qu'en exécutant quatre d'entre elles, elles atteindraient en effet une vitesse de ~ 25 Mbps chacune, remplissant toute la bande passante disponible; la clé semble donc être l'exécution de plusieurs transferts simultanés.

Avec FTP, les choses empirent: même avec des paramètres optimisés TCP (taille de fenêtre élevée, MTU max, etc.), nous ne pouvons pas obtenir plus de 20 Mbps sur un seul transfert. Nous avons essayé gros fichiers en même temps, et en effet les choses se sont beaucoup améliorées que lors du transfert d'un seul; mais alors le coupable est devenu E/S disque, car la lecture et l'écriture de quatre gros fichiers à partir des mêmes goulots d'étranglement de disque très bientôt; aussi, nous ne semble pas être en mesure de diviser ce grand fichier unique en plus petits, puis de le fusionner à nouveau, du moins pas dans des délais acceptables (évidemment, nous ne pouvons pas dépenser l'épissage/la fusion du fichier à un moment comparable à celui du transfert).

La solution idéale ici serait un outil multithread qui pourrait transférer plusieurs morceaux du fichier en même temps; un peu comme des programmes peer-to-peer comme eMule ou BitTorrent le font déjà, mais d'une seule source à une seule destination. Idéalement, l'outil nous permettrait de choisir le nombre de connexions parallèles à utiliser, et bien sûr d'optimiser les E/S disque pour ne pas (trop) sauter follement entre les différentes sections du fichier.

Quelqu'un connaît-il un tel outil?

Ou, quelqu'un peut-il suggérer une meilleure solution et/ou quelque chose que nous n'avons pas déjà essayé?

P.S. Nous avons déjà pensé à sauvegarder cela sur bande/disque et à l'envoyer physiquement à destination; ce serait notre mesure extrême si WAN ne suffit pas, mais, comme l'a dit A.S. Tanenbaum, "Ne sous-estimez jamais la bande passante d'un break rempli de bandes qui dévalent l'autoroute."

21
Massimo

La recherche de "transfert de fichiers à latence élevée" fait apparaître de nombreux résultats intéressants. De toute évidence, c'est un problème dans lequel la communauté CompSci et la communauté commerciale se sont penchées.

Quelques offres commerciales qui semblent correspondre à la facture:

  • FileCatalyst propose des produits qui peuvent diffuser des données sur des réseaux à latence élevée en utilisant UDP ou plusieurs flux TCP. Ils ont également de nombreuses autres fonctionnalités (on- compression à la volée, transferts delta, etc.).

  • La "technologie" de transfert de fichiers fasp d'Aspera semble également convenir à ce que vous recherchez.

Dans le monde open-source, le projet ftp semble prometteur. Vous n'avez pas particulièrement besoin de ses capacités de multidiffusion, mais l'idée de base de dynamiter un fichier vers les récepteurs, de recevoir des NAK pour les blocs manqués à la fin du transfert, puis de dynamiter les blocs NAK (mousser, rincer, répéter) semble qu'il ferait ce dont vous avez besoin, car il n'y a pas d'accusé de réception (ou de NAK) du récepteur tant que le transfert de fichier n'est pas terminé une fois. En supposant que le réseau est juste latent et non avec perte, cela pourrait aussi faire ce dont vous avez besoin.

15
Evan Anderson

Suggestion vraiment étrange celle-ci .. Mettre en place un simple serveur Web pour héberger le fichier sur votre réseau (je suggère nginx, soit dit en passant), puis configurer un PC avec Firefox à l'autre extrémité, et installer le DownThemAll = extension.

Il s'agit d'un accélérateur de téléchargement qui prend en charge la segmentation et le réassemblage.
Vous pouvez diviser chaque téléchargement en 10 morceaux pour le réassemblage, et cela rend les choses plus rapides!

(mise en garde: je ne l'ai jamais essayé sur quelque chose d'aussi gros que 160 Go, mais cela fonctionne bien avec des fichiers iso de 20 Go)

9
Tom O'Connor

Le transport UDT est probablement le transport le plus populaire pour les communications à latence élevée. Cela conduit à leur autre logiciel appelé Sector/Sphere un "système de fichiers distribués haute performance et moteur de traitement de données parallèle" qui pourrait valoir la peine d'être examiné.

7
Steve-o

Ma réponse est un peu tardive, mais je viens de trouver cette question, en cherchant du fasp. Au cours de cette recherche, j'ai également trouvé ceci: http://tsunami-udp.sourceforge.net/ , le "Tsunami UDP Protocol".

Depuis leur site Web:

Un protocole de transfert de fichiers dans l'espace utilisateur rapide qui utilise TCP contrôle et données UDP pour le transfert sur des réseaux longue distance à très haut débit (≥ 1 Gbps et même 10 GE), conçu pour fournir un débit plus élevé que possible avec TCP sur les mêmes réseaux. les mêmes réseaux.

En ce qui concerne la vitesse, la page mentionne ce résultat (en utilisant un lien entre Helsinki, Finlande à Bonn, Allemagne sur un lien de 1 Go:

Figure 1 - Transfert international sur Internet, en moyenne 800 Mbit/seconde

Si vous souhaitez utiliser un accélérateur de téléchargement, jetez un œil à lftp, c'est le seul accélérateur de téléchargement qui peut faire un miroir récursif, à ma connaissance.

5
Jan van Haarst

L'utilitaire bbcp de la page très pertinente 'Comment transférer de grandes quantités de données via le réseau' semble être la solution la plus simple.

4
Robert Polson