Каков наилучший способ передачи одного большого файла по высокоскоростному каналу глобальной сети с высокой задержкой?

21

Похоже, это связано с этим , но это несколько другое.

Существует связь WAN между двумя сайтами компании, и нам нужно передать один очень большой файл (дамп Oracle, ~ 160 ГБ).

У нас полная пропускная способность 100 Мбит / с (протестировано), но похоже, что одно TCP-соединение просто не может его максимально использовать из-за того, как работает TCP (ACK и т. Д.). Мы протестировали связь с iperf , и результаты значительно изменились при увеличении размера окна TCP: с базовыми настройками мы получаем пропускную способность ~ 5 Мбит / с, с большей WS мы можем получить до ~ 45 Мбит / с, но не более того. Задержка сети составляет около 10 мс.

Из любопытства мы запустили iperf, используя более одного соединения, и обнаружили, что при запуске четырех из них они действительно достигают скорости ~ 25 Мбит / с каждое, заполняя всю доступную полосу пропускания; поэтому ключ, по-видимому, заключается в выполнении нескольких одновременных передач.

С FTP все становится хуже: даже с оптимизированными настройками TCP (большой размер окна, максимальный MTU и т. Д.) Мы не можем получить более 20 Мбит / с за одну передачу. Мы одновременно пытались передавать по FTP несколько больших файлов, и на самом деле все стало намного лучше, чем при передаче одного; но затем виновником стал дисковый ввод-вывод, потому что очень скоро чтение и запись четырех больших файлов с одних и тех же узких мест диска; кроме того, мы, похоже, не можем разбить этот один большой файл на более мелкие, а затем объединить его, по крайней мере, в неприемлемое время (очевидно, мы не можем тратить время на сращивание / объединение файла, сравнимое со временем передавая это).

Идеальным решением здесь был бы многопоточный инструмент, который мог бы передавать различные фрагменты файла одновременно; вроде как одноранговые программы, такие как eMule или BitTorrent, уже делают, но из одного источника в один пункт назначения. В идеале этот инструмент позволил бы нам выбирать, сколько параллельных соединений использовать, и, конечно, оптимизировать дисковый ввод-вывод, чтобы не переходить (слишком) безумно между различными разделами файла.

Кто-нибудь знает такой инструмент?

Или кто-нибудь может предложить лучшее решение и / или то, что мы уже не пробовали?

PS Мы уже думали о резервном копировании на ленту / диск и физической отправке его по назначению; это было бы нашей крайней мерой, если бы WAN просто не сократил ее, но, как сказал А.С. Таненбаум, «никогда не стоит недооценивать пропускную способность универсала, полного лент, несущихся по шоссе».

Massimo
источник
1
Из любопытства, действительно ли время, которое требуется, настолько критично? Кроме того, не влияет ли насыщение канала на время передачи 160 Гб на остальную часть вашей сети?
Брайан
6
Я помню, как поставил несколько автозагрузчиков DLT и пару сотен картриджей Заказчику еще в 99 году. Мы рассчитали исходную емкость моего автомобиля с примерно 200 загруженными в него картриджами DLT IV (по 35 ГБ каждый) примерно 6,3 ТБ. Я доехал от нашего офиса до места Заказчика примерно за 55 минут, предоставив резервному транспортному механизму «Эван в гео-метро, ​​как безумный по межгосударственному маршруту» эффективную пропускную способность около 118 ГБ / мин. Хорошая пропускная способность, но задержка была убийственной ...> улыбка <
Эван Андерсон
Брайан: да, время критично (это занимает ДВАДЦАТЬ ЧАСОВ со стандартным FTP и стандартными сетевыми настройками), и нет, не будет проблем с насыщением канала, потому что передача будет запланирована в нерабочее время.
Массимо
Эван: это именно то, что я имел в виду ;-)
Массимо
Я имел дело с подобной ситуацией, с ~ 200 ГБ SQL .bak, кроме единственного способа, которым я смог получить связь WAN для насыщения, это с помощью FTP. В итоге я использовал 7-zip с нулевым сжатием, чтобы разбить его на куски по 512 МБ. Время «сжатия» и «декомпрессии» было поразительно коротким; в целом намного лучше, чем копать физические носители по всей стране. (Места находятся на противоположных берегах США)
Адриен,

Ответы:

15

Поиск «передачи файлов с высокой задержкой» вызывает много интересных хитов. Понятно, что это проблема, в которую вовлечены как сообщество CompSci, так и коммерческое сообщество.

Несколько коммерческих предложений, которые соответствуют всем требованиям:

  • FileCatalyst имеет продукты, которые могут передавать данные по сетям с высокой задержкой, используя UDP или несколько потоков TCP. У них также есть много других функций (сжатие на лету, дельта-переносы и т. Д.).

  • « Технология» передачи файлов FASP от Aspera, кажется, также отвечает вашим потребностям .

В мире открытого исходного кода проект uftp выглядит многообещающе. Вам особенно не нужны его возможности многоадресной рассылки, но основная идея заключается в уничтожении файла для получателей, получении NAK для пропущенных блоков в конце передачи, а затем в уничтожении блоков NAK (пена, полоскание, повтор). Похоже, это будет делать то, что вам нужно, поскольку ACK'ing (или NAK'ing) от приемника не будет до тех пор, пока передача файла не будет завершена один раз. Предполагая, что сеть просто скрыта и не с потерями, это может сделать то, что вам нужно.

Эван Андерсон
источник
UFTP выглядит действительно многообещающе, мне удалось достичь 30 Мбит / с между двумя настольными компьютерами (что, безусловно, не так уж и хорошо с точки зрения производительности диска); Я скоро опробую его на "настоящих" серверах. Я не смог получить демонстрационную лицензию FileCatalyst из-за какой-то ошибки в регистрационной форме (постоянно повторяется, что номер запроса уже использовался), а fasp просто не предлагает их.
Massimo
60 Мбит / с между двумя компьютерами с подходящими дисками и большим буфером приема. Большой!
Массимо,
Я люблю свободное / открытое программное обеспечение! > улыбка <Я определенно собираюсь попробовать uftp с некоторыми вещами, которые я делаю. Мне интересно, как это получилось бы в многоадресном решении для создания образов дисков на основе Linux, которое я собрал пару лет назад с помощью «udpcast».
Эван Андерсон
Некоторое время назад я спросил serverfault.com/questions/173358/multicast-file-transfers В конце концов я пришел к выводу, что uftp и mrsync были инструментами выбора. Пожалуйста, пишите в комментариях там, если вы сделаете что-нибудь полезное с uftp, так как я буду использовать один или другой снова в этом году (подготовка к конференции).
Джед Дэниелс
2
Когда я работал с UFTP, UDT и Tsunami UDP, UFTP имел худшую производительность из всех трех. Конечно, это, наверное, самый зрелый протокол. UDT предоставляет только простой протокол передачи и был разработан для использования в качестве библиотеки для разработки нестандартного программного обеспечения, и автор Tsunami фактически указал нам на UDT, поскольку Tsunami в последнее время активно не разрабатывалось из-за нехватки времени.
Томас Оуэнс
9

Это действительно странное предложение. Настройте простой веб-сервер для размещения файла в своей сети (кстати, я предлагаю nginx), затем установите компьютер с firefox на другом конце и установите расширение DownThemAll .

Это ускоритель загрузки, который поддерживает чанкинг и повторную сборку.
Вы можете разбить каждую загрузку на 10 частей для повторной сборки, и это действительно делает вещи быстрее!

(предостережение: я никогда не пробовал его на чем-то настолько большом, как 160 ГБ, но он хорошо работает с ISO-файлами 20 ГБ)

Том О'Коннор
источник
40 Мбит / с между одними и теми же компьютерами. Выглядит очень хорошо, тоже.
Массимо,
1
замените firefox на axel.alioth.debian.org, и это не так уж плохо.
Джастин
7

Транспорт UDT, вероятно, является наиболее популярным транспортом для связи с высокой задержкой. Это приводит к их другому программному обеспечению, названному Сектором / Сферой, «Высокопроизводительная распределенная файловая система и механизм параллельной обработки данных», на который, возможно, стоит взглянуть.

Стив-О
источник
1
Я провел некоторую работу с UDT для передач по сетям с высокой задержкой и большими потерями пакетов. UDT гораздо более устойчив к задержкам и потерям пакетов, чем протоколы на основе TCP, особенно если вы изменили алгоритм управления перегрузкой в ​​соответствии с топографией вашей сети.
Томас Оуэнс
Существует даже версия rsync со встроенным UDT, которая называется «UDR». github.com/LabAdvComp/UDR
Макс
5

Мой ответ немного запоздал, но я только нашел этот вопрос, когда искал fastp. Во время этого поиска я также обнаружил: http://tsunami-udp.sourceforge.net/ , «UDP-протокол цунами».

С их сайта:

Быстрый протокол передачи файлов в пользовательском пространстве, использующий данные управления TCP и UDP для передачи по очень высокоскоростным сетям большой дальности (≥ 1 Гбит / с и даже 10 GE), разработанный для обеспечения большей пропускной способности, чем это возможно при использовании TCP в тех же сетях. сетей.

Что касается скорости, на странице упоминается этот результат (используя ссылку между Хельсинки, Финляндия и Бонном, Германия, по ссылке 1 Гбит:

Рисунок 1 - международная передача через Интернет, в среднем 800 Мбит / с

Если вы хотите использовать ускоритель загрузки, взгляните на lftp, насколько я знаю, это единственный ускоритель загрузки, который может создавать рекурсивное зеркало.

Ян ван Хаарст
источник
1
В проекте, который я прокомментировал ранее в ответе Стива, мы сравнили UDT, Tsunami UDP и UFTP. Мы обнаружили, что задержка оказала огромное влияние на производительность, а потеря пакетов - нет (вопреки документации по цунами). Добавление задержки в 100 мс к тестовой сети снизило производительность Tsunami примерно с 250 Мбит / с до 50 Мбит / с (я считаю, что у меня правильные числа и единицы измерения - это было какое-то время, но это было огромное падение). Добавление 10% потерь пакетов без минимальной задержки в сети, с другой стороны, только снизило производительность с 250 Мбит / с до примерно 90 Мбит / с.
Томас Оуэнс
4

Bbcp утилита от очень соответствующей страницы «Как передавать большие объемы данных через сеть» , кажется, самое простое решение.

Роберт Полсон
источник
Я не думаю, что bbcp оптимизирован для высокой задержки. Сейчас я получаю ~ 20 МБ / с по трансатлантической ссылке с настройками по умолчанию.
Макс