Как я могу передать файл с одного сервера на другой с большой скоростью? сейчас я использую FTP для передачи файла, но это занимает так много времени. Для передачи файла размером 2 ГБ требуется около 3 часов. Есть ли другая процедура для передачи файла, которая быстрее, чем FTP. Расположение сервера: один в Индии, другой в США.
Члены сообщества SF могут быть недовольны тем, что вернули вас в каменный век Unix, но для снижения накладных расходов протокола и хорошего сжатия вы можете попробовать комбинацию dd + netcat + bzip2
. Да, это небезопасно, поэтому вам нужно закрыть порты для всех, кроме двух узлов. Ни гарантии, ни безопасности, ни аутентификации ... но это быстрее.
1 - сжать файл с помощью bzip2
чтобы получить, скажем, file.bz2
2 - Слушайте с помощью netcat на node2
nc -l 6668 | dd of=/dir/file.bz2
Отправьте его с узла 1
dd if=/dir/file.bz2 | nc node2 6668
Это нормально для вашего местоположения? Если вы переносите 2 ГБ на другие сайты, какую скорость вы обычно видите? Какова скорость сети в вашем месте и в удаленном месте?
Скорость передачи на большие расстояния будет в основном зависеть от пропускной способности сети, доступной между двумя местоположениями и для любого промежуточного перехода. Вы передаете данные через Интернет, а это означает, что скорость может сильно варьироваться время от времени. Интернет не гарантирует минимальную скорость.
Ваши лучшие ставки:
Когда я читал о производительности передачи файлов для устройств NAS, скорость, которую люди получали по SMB, обычно всегда была ниже, чем по FTP. У меня возникло ощущение, что, хотя в FTP может быть много чего раздражающего, сам по себе это не медленный протокол.
Я не ожидал, что, оставив все остальное без изменений, простой переход с FTP на другой протокол даст вам улучшение скорости, которого вы, похоже, ожидаете.
Как узнать, проблема не в пропускной способности? Можете ли вы попробовать провести тест с помощью scp или rsync и сравнить с FTP?
Последние два, вероятно, одно и то же, но я хотел сделать из них 3 шага. Это так же просто, как «просто отправьте файл».
У вас включено масштабирование окна TCP на обоих концах? Даже если у вас большая пропускная способность, соединения между США и Индией по своей сути будут иметь продукт задержки с огромной пропускной способностью. Если масштабирование окна включено, но производительность FTP по-прежнему низкая, вы можете попробовать параллельный запуск rsync.
Также прекратите использовать FTP. Это ужасный протокол. :)
Если вы пытаетесь передать один файл размером 2 ГБ, ftp - один из самых чистых и быстрых протоколов, вы также можете безопасно использовать функцию возобновления в случае прерывания во время передачи.
FTP - плохая идея, если вы пытаетесь передать большое количество маленьких файлов, потому что у вас есть огромная бесполезная активность, открывающая и закрывающая соединения для каждого файла.
Rsync (через ssh) или scp (sftp) - хорошие альтернативы, но вы должны учитывать, что шифрование значительно снижает пропускную способность. Вы можете использовать легкий алгоритм, такой как blowfish ('scp -c blowfish' или 'rsync -e "ssh -c blowfish"'), но скорость всегда будет ниже, чем ftp.
Netcat - альтернатива, но только в локальной сети.
Если ваш файл похож на тот, который уже находится в месте назначения, вы можете использовать rsync с параметром --fuzzy. Fuzzy будет искать файл с таким же именем в целевом каталоге и использовать его в качестве отправной точки для копирования, отправляя по сети только различия между двумя файлами.
В качестве примера я копирую xwiki-enterprise-web-3.4.war в удаленный каталог, который уже содержит xwiki-enterprise-web-3.2.1.war.
$ rsync -av --fuzzy xwiki-enterprise-web-3.4.war example.com:Downloads/xwiki-enterprise-web-3.4.war
sent 69065310 bytes received 74176 bytes 389518.23 bytes/sec
total size is 138567168 speedup is 2.00
Вы заметите только около половины содержимого файла, которое действительно необходимо передать. Было бы даже лучше, если бы файлы были более похожими, поскольку в этом конкретном случае более новая версия xwiki на самом деле на 26M больше, чем старая копия.
$ du -sh xwiki-enterprise-web-3.*
107M xwiki-enterprise-web-3.2.1.war
133M xwiki-enterprise-web-3.4.war
Вместо этого почему бы не использовать команду rsync или rdiff, обе - быстрые инструменты для передачи файлов.