На этот вопрос уже есть ответ здесь:
Как я могу передать файл с одного сервера на другой с большой скоростью? сейчас я использую FTP для передачи файла, но это занимает так много времени. На передачу файла размером 2 ГБ уходит около 3 часов. Есть ли другая процедура для передачи файла, которая работает быстрее, чем FTP. Расположение сервера: один в Индии, другой в США.
Это нормально для вашего местоположения? Если вы переносите 2 ГБ на другие сайты, какую скорость вы обычно видите? Какова скорость сети в вашем местоположении и в удаленном месте?
Скорость передачи на большие расстояния в основном будет зависеть от пропускной способности сети, доступной между двумя местоположениями и для любого промежуточного перехода. Вы передаете данные через Интернет, а это значит, что время от времени скорость может сильно варьироваться. Интернет не гарантирует минимальную скорость.
Лучше всего:
SF community members may not be happy for taking you back to the stone age's of Unix, but for lower protocol overhead and a good compression, you might want to try a combination of dd + netcat + bzip2
. Yes, this is not going to be secure, so you have to close the ports for all except for the two nodes. No guarantee, no security, no authentication ... but it is faster.
1 - compress your file using bzip2
to get say , file.bz2
2 - Listen using netcat on node2
nc -l 6668 | dd of=/dir/file.bz2
Push it from node1
dd if=/dir/file.bz2 | nc node2 6668
Последние два, вероятно, одно и то же, но я хотел сделать из этого 3 шага. Это так же просто, как «просто отправьте файл».
Когда я читал о производительности передачи файлов для устройств NAS, скорость, которую люди получали по SMB, обычно всегда была ниже, чем по FTP. У меня возникло ощущение, что, хотя в FTP может быть много чего раздражающего, сам по себе это не медленный протокол.
Я не ожидал, что, если оставить все остальное без изменений, простое переключение с FTP на другой протокол даст вам такого повышения скорости вы, кажется, ожидаете.
Откуда вы знаете, что проблема не в пропускной способности? Можете ли вы попробовать провести тест с помощью scp или rsync и сравнить с FTP?
Do you have TCP window scaling enabled at both ends? Even if you have a lot of bandwidth, connections between the U.S. and India will inherently have a huge bandwidth delay product. If window scaling is enabled and you're still seeing poor FTP performance you might try running rsync in parallel.
Also, stop using FTP. It's a horrible protocol. :)
If youre trying to transfer a single 2GB file ftp is one of the most clean and fast protocols, you can also safely use resume feature in case of interruption during the transfer.
Ftp is a bad idea if you're trying to transfer a great number of little files, because you have a huge useless activity opening and closing connections for each file.
Rsync(via ssh) or scp(sftp) are good alternatives, but you must consider that encryption significantly reduce throughput. You can use a light algorithm like blowfish ('scp -c blowfish' or 'rsync -e "ssh -c blowfish"') but the speed will always lower than ftp.
Netcat is an alternative, but only on lan.
Если ваш файл похож на тот, который уже находится в месте назначения, вы можете использовать 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 на самом деле на 26 Мбайт больше, чем старая копия.
$ du -sh xwiki-enterprise-web-3.*
107M xwiki-enterprise-web-3.2.1.war
133M xwiki-enterprise-web-3.4.war
Вместо этого почему бы не использовать команду rsync или rdiff, обе являются быстрыми инструментами для передачи файлов.