При использовании rsync
в условиях высокой задержки и высокой пропускной способности ваша скорость передачи данных будет медленнее [1], чем у нашей доступной пропускной способности. Для приведенного примера ожидаемая скорость передачи будет составлять 56,25 KiB или менее 10% доступной полосы пропускания.
Одним из решений является запуск N rsync
процессы параллельно:
#!/bin/bash
# tar up the files
tar -cvzf x.tar ${list_of_files}
# [optional]
# compute the md5sum
md5sum x.tar > x.tar.md5sum
# break the large tar file into N files (i.e. x.tar would become x.tar.1 ... x.tar.N)
# TODO
# start N `rsync` processes in parallel
for ((i=1;i<=N;i++)); do rsync -avzh x.tar.${i} ${destination} & done
# wait for the transfers to finish
wait && echo "success" || echo "fail" && exit 1
# stitch the N files back together into x.tar
TODO
# [optional... but gives everyone a nice warm and fuzzy]
# copy the md5sum and verify your files (even though `rsync` already did so)
scp x.tar.md5sum ${destination}
ssh ${destination_machine} "cd ${path} && md5sum -c x.tar.md5sum && echo 'PASS (files verified with md5sum)' || echo 'FAIL (file verification failed md5sum)' && exit 1"
# done!
[1] Почему ваша скорость передачи данных медленно в этом примере?
Одним словом: bandwidth-delay product (три слова на самом деле)
Это пример высокой латентностью и высокой пропускной способности линии связи. Некоторые могут использовать инструмент, например rsync
, для передачи своих данных. Если вы запускаете один экземпляр rsync
(или что-то подобное, которое также использует протокол TCP или TCP), вы не будете использовать доступную пропускную способность.
Причина замедления связана с природой TCP-трафика (или TCP-подобных протоколов), требующим ACK, перед отправкой большего количества данных. Эта проблема официально упоминается как bandwidth-delay product. Каждая скорость соединения будет ограничена задержкой, превышающей полосу пропускания.
В частности, для приведенного примера теоретическая скорость будет составлять 56,25 KiB или менее 10% от вашей доступной полосы пропускания.
ограничение за подключение. Таким образом, используя только одинrsync
для передачи вашего файла не будет полностью использовать вашу пропускную способность.
Решение 1:
Используйте другую программу, которая не использует TCP-подобный протокол, но по-прежнему гарантирует ваши данные с помощью других средств (быстрый поиск Google что-то вроде uftp
, который передает данные по протоколу UDP вместо TCP). К сожалению, uftp
по-прежнему не во многих дистрибутивах с этим письмом.
Решение 2:
Продолжайте использовать один rsync
и изменять сетевые параметры TCP с обеих сторон, но это требует специальных знаний, которые я не всегда есть на данный момент.
Решение 3:
Запуск нескольких rsync
процессы параллельно, как описано в начале этого вопроса.
* изменить сетевые параметры TCP * [TCP-масштабирование] (https://en.wikipedia.org/wiki/TCP_window_scale_option) должно работать теоретически, и оно должно быть включено в ОС OP. Конечно, теория - это не реальность. –
Автор [UFTP] (http://uftp-multicast.sourceforge.net) здесь. Даже если это не в вашем дистрибутиве, создание из источника должно быть довольно простым. Также доступны бинарные файлы для Windows. – dbush