Назад | Перейти на главную страницу

Запуск нескольких потоков scp одновременно

Одновременный запуск нескольких потоков scp:

Задний план:

Я часто замечаю, что часто зеркалирую набор серверных файлов, и в эти серверные файлы включены тысячи небольших файлов размером от 1 до 3 кбайт. Все серверы подключены к портам 1 Гбит / с, как правило, в различных дата-центрах.

Проблема:

SCP передает эти маленькие файлы, ОДИН за ОДИН, и на это уходит много времени, и я чувствую, что зря трачу прекрасные сетевые ресурсы, которые у меня есть.

Решение?:

У меня была идея; Создание скрипта, который делит файлы на равные части и запускает 5-6 потоков scp, что теоретически могло бы выполняться в 5-6 раз быстрее, не так ли? Но у меня нет опыта написания сценариев для Linux!

Вопросы):

Я бы сделал так:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

В зависимости от передаваемых файлов может иметь смысл включить сжатие в tar команды:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Также имеет смысл выбрать более удобный для ЦП шифр для ssh команда (например, arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Или комбинируйте их оба, но это действительно зависит от вашего узкого места.
Очевидно rsync будет намного быстрее, если вы выполняете инкрементную синхронизацию.

Использовать rsync вместо того scp. Ты можешь использовать rsync над ssh так же легко, как scp, и он поддерживает «конвейерную передачу файлов для минимизации затрат на задержку».

Один совет: если данные можно сжимать, включите сжатие. Если это не так, отключите его.

Не scp напрямую, но вариант для многопоточной передачи (даже для отдельных файлов) - bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp.

используйте параметр -s для количества потоков, в которые вы хотите передавать данные. Отлично подходит для соединений с высокой пропускной способностью, но с задержкой, поскольку задержка ограничивает размер окна TCP на поток.

Я собирался предложить GNO Параллельный (что по-прежнему требует некоторой работы со сценариями с вашей стороны), но затем я обнаружил pscp (который является частью пшш). Это может соответствовать вашим потребностям.

Возможно, не связано, но если вы хотите чего-то более реального времени, вы можете попробовать GlusterFS. Работает хорошо, но требует некоторой настройки, если вы хотите эффективно читать небольшие файлы.