Я часто замечаю, что часто зеркалирую набор серверных файлов, и в эти серверные файлы включены тысячи небольших файлов размером от 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. Работает хорошо, но требует некоторой настройки, если вы хотите эффективно читать небольшие файлы.