Пришвидшити завантаження SFTP в мережу з високою затримкою?


27

Я намагаюся перенести набір великих файлів на міжнародному рівні за допомогою SFTP, але я знаходжу, що мій міжнародний партнер не може досягти швидкості завантаження вище ~ 50k, незважаючи на дуже хороші зв'язки з обох сторін. Ми можемо отримати кілька завантажень підключень із такою швидкістю (значить, не пропускну здатність?), Але жодне завантаження не покращує швидкість, що є проблемою, оскільки багато файлів мають розмір декількох Гбіт.

SFTP розміщується за допомогою стандартної системи SFTP Apple "Віддалений вхід" Apple OSX.

Чи є спосіб покращити швидкість завантаження чи є інший хост SFTP, який би допоміг? Мені не зрозуміло, чи це проблема конфігурації чи властиве обмеження протоколу.

(З міркувань безпеки мені потрібно використовувати зашифроване кінцеве однорангове з'єднання - немає хмарних служб).


Якщо у вас є бюджет, є комерційні рішення, які працюють набагато краще, ніж системи передачі файлів на основі TCP, такі як SFTP.
Кенстер

4
Якщо це одноразова передача на кілька ГБ, чому б не спробувати альтернативу Інтернету .
vasin1987

1
Простий скрипт оболонки для запуску N rsyncпередач дозволить легко досягти ваших вимог 1. Безпечна передача та 2. Максимізація вашої пропускної здатності. Дивіться тут приклад того, як розпочати N rsyncпередач stackoverflow.com/a/38014502/52074
Тревор Бойд Сміт,

2
Або просто використовуйте uftp-multicast.sourceforge.net, бажання зашифрує, а Mac вимкне вашу пропускну здатність.
Тревор Бойд Сміт

4
На відміну від вашого останнього речення, хмарний сервіс повинен бути добре, якщо ви зашифруєте файл локально, перенесіть його через хмару, а потім розшифруєте локально 8 на іншому кінці), що все-таки означатиме шифрування в кінці. (Ви можете додати короткий відгук про успішний прийом). Ви використовуєте sftp-шифрування для запобігання атак когось, хто може нюхати весь ваш трафік. Отже, просто надання їм зашифрованих даних не гірше, ніж припускати, що вони все одно можуть їх отримати.
Хаген фон Ейтцен

Відповіді:


29

З клієнтом OpenSSHsftp (який, здається, ви використовуєте), ви можете використовувати:

  • -Rпереключити для збільшення довжини черги запиту (за замовчуванням - 64)
  • -Bпереключити для збільшення розміру запиту на читання / запис (за замовчуванням - 32 КБ)

Для початку спробуйте подвоїти обидва:

sftp -R 128 -B 65536 user@host

Напевно, не має великого значення, на кого з них ти збільшуєшся.

Збільшення або повинно сприяти насиченню вашого високої затримки зв'язку. З урахуванням вищезазначених налаштувань, дані зберігатимуть у трубі 8 Мб у будь-який час (128 * 64 К = 8 М).

Зауважте, що це допомагає лише при передачі великих файлів. При передачі безлічі невеликих файлів це не матиме жодного ефекту.


Для ознайомлення з інформацією про інші клієнти (GUI) SFTP, див. Розділ "Затримка / затримка мережі" в моїй відповіді на " Чому обмеження передачі файлів FileZilla SFTP максимум у 1,3 Мбіт / сек замість насичення доступної пропускної здатності? rsync та WinSCP ще повільніші .


4

Ви можете спробувати ввімкнути стиснення та побачити, чи це допомагає.

Від man sftp:

-C Вмикає стиснення (через прапорець ssh -C).

І від man ssh:

-C Потрібно стиснути всі дані (включаючи stdin, stdout, stderr та дані для переадресованих X11, TCP та UNIX-доменів з'єднань). Алгоритм стиснення той самий, що використовується gzip (1), і "рівень" можна керувати параметром CompressionLevel для версії протоколу 1. Стиснення бажано на модемних лініях та інших повільних з'єднаннях, але лише уповільнить роботу в швидких мережах . Значення за замовчуванням можна встановити на основі хоста за хостом у файлах конфігурації; див. Параметр стиснення.

Це швидше звучить так, ніби з'єднання може бути обмеженим швидкістю в якийсь момент на його шляху (а точніше, це здається мені найпростішим поясненням для ваших 50 кБ / с на з'єднання, але можливе кілька таких з'єднань), хоча це може бути не погана ідея переконатися, що диски з обох сторін не є фактором.

Ви також можете запустити швидкий pcap, щоб побачити, чи є якісь "очевидні" проблеми (наприклад, велика кількість повторних передач) - але якщо ви не маєте певної впевненості, ви зможете вирішити це, я, мабуть, просто побачу, чи дозволить компресія допомогу.


Спасибі! На жаль, файли попередньо стиснуті, тому я сумніваюся, що зроблю що-небудь ...: /
nick_eu

Стиснення тут не прискорює роботи, навіть якщо дані не були б стиснуті. Це занадто великі накладні витрати процесора (та затримка), тому це не має сенсу в ці дні.
Jakuje

1
Якщо вузьким місцем є мережа, то трохи більше процесора з обох сторін нічого не сповільнюватиме @Jakuje, якщо тільки поле не в змозі стиснутись при 50 кБ / с, що не повинно бути проблемою.
Бен

@Ben У питанні чітко сказано, що мережа не є вузьким місцем.
Jakuje

4

Я намагаюся передати набір великих файлів у міжнародному масштабі за допомогою SFTP

Це ще не було згадано як відповідь, але при передачі декількох файлів через високо затримкове посилання є одне дійсно просте рішення для підвищення продуктивності:

Передача декількох файлів паралельно.

І це рішення , яке ви навіть згадали у своєму запитанні. Використай це.

В основному протокол TCP не дуже добре обробляє з'єднання з великим продуктом із затримкою пропускної здатності - одне з'єднання не може одночасно тримати достатню кількість даних. Дивіться https://en.wikipedia.org/wiki/TCP_tuning

Оскільки кожне з'єднання обмежено протоколом TCP, просто використовуйте більше з'єднань.


1
Ось як паралелізувати передачі SFTP: serverfault.com/questions/248105/…
niutech

3

Прискорити передачу sftp

Припустимо, що вашими проблемами є налаштування мережі та / або дроселювання за підключенням TCP, погляньте на sftp за допомогою підсистеми дзеркала lftp

Налаштування мережі на кожному кінці є набагато більшою темою, і вона потребує багато назад і вперед, висуваючи тему поза сферою ServerFault. Для окремих підключень компресія, згадана iwaseatenbyagrue, може допомогти будь-яким способом. Це передбачає, що віддалений кінець дозволяє стиснути.


3

(Ви згадуєте "високу затримку" в заголовку запитання, але не в тексті тексту. Чи вимірювали ви фактичну затримку та які результати?)

Існує патч до OpenSSH, який явно покращує пропускну спроможність по мережевому посиланню з високою затримкою: HPN-SSH : (акцент мій)

Реалізація SCP і базовий протокол SSH2 у OpenSSH є продуктивністю мережі, обмеженою статично визначеними буферами внутрішнього потоку управління. Ці буфери часто діють як вузьке місце для пропускної здатності мережі SCP, особливо на довгих і високих пропускних мережах. Зміна коду ssh, щоб дати змогу визначати буфери під час виконання, усуває це вузьке місце. Ми створили виправлення, яке видалить вузькі місця у OpenSSH і повністю взаємодіє з іншими серверами та клієнтами. Крім того, клієнти HPN зможуть швидше завантажуватись із серверів, які не є HPN, а сервери HPN зможуть швидше отримувати завантаження від клієнтів, які не є HPN.

Отже, спробуйте скласти та використовувати HPN-SSH на стороні, що приймає, і подивіться, чи покращує це швидкість передачі.


Спасибі! Я насправді не міряв, зараз мені соромно визнати, але я їду на півдорозі в країну з таким інтернетом, тому я здогадуюсь, що маю рацію. :) Патч звучить дуже корисно!
nick_eu

@nick_eu Я бачив анекдоти, що вчені використовують HPN-SSH для передачі великої кількості наукових даних через Атлантику. Здається, що це ідеально підходить для вашого випадку використання.
twisteroid посла

0

Не впевнені, чи це варіант для вас, але ви намагалися перетягнути дані на міжнародний сайт? А також або в різний час, щоб побачити, чи це проблема із суперечкою мережевих ресурсів?


чудова ідея, спробую.
nick_eu

0

Ми можемо отримати кілька завантажень підключень із такою швидкістю (так не пропускну здатність?)

Це звучить як проблема конфігурації - або навмисно (як спосіб поповнення послуг, не вимагаючи додаткових послуг), або випадково (наприклад, розбиття масштабування вікон або надмірний контроль трафіку). Хоча ви могли б паралелізувати передачі, ви нічого не говорили нам про те, що знаходиться на іншому кінці з'єднання, або якщо варто розробити декілька простих сценаріїв для обробки заточування / відновлення файлів.

Настроювання розміру черги та стиснення навряд чи матиме суттєвий вплив, якщо тільки причина не дуже написане програмне забезпечення (а openSSH не належить до цієї категорії - не так багато сенсу використовувати Opensh з довшою чергою запитів / більшим розміром блоку, якщо затримка не буде понад 250 мс. Ви можете спробувати з різними клієнтами з різних локацій, щоб виключити проблему з сервером.

Першим моїм дзвінком було б визначити, хто в цій проблемі винен провайдер, попросити їх усунути проблему або перейти до іншого постачальника.


Вибачте, повинно було бути більш чітко. Немає "провайдера" - я хостинг на власному робочому столі, а колега намагається підключитися зі свого комп’ютера. Колега тільки відкриває сеанс ssh (не впевнений у протоколі, але може перевірити) та використовуєput
nick_eu

@nick_eu він говорить про Інтернет-провайдерів.
Джуріс

Це звучить як проблема конфігурації. Ні. Це не проблема конфігурації. Сам протокол TCP не працює на з'єднаннях із великим продуктом затримки пропускної здатності. В основному, якщо з'єднання таке, що багато даних може бути в польоті одночасно, сам протокол TCP не може тримати стільки даних, що рухаються в будь-який момент часу. Ось чому паралельні з'єднання TCP працюють над покращенням швидкості передачі даних.
Ендрю Генле

"не працює на з'єднаннях із великим продуктом із затримкою пропускної здатності" - будь ласка, прочитайте RFC 1323 (з 1992 р.) та 7323 (замінено 1323 р. у 2014 р.)
Симбей

@symcbean Тоді поясніть ОП: Ми можемо отримати декілька підключень із завантаженням із такою швидкістю (значить, не пропускну здатність?), але жодне завантаження не покращує швидкість. Це класичний симптом TCP через з'єднання з надзвичайною затримкою - всі розширення TCP можуть зробити це зменшити проблема дещо, оскільки вони не можуть вирішити основні проблеми із самим протоколом. І вдало визначте, хто саме постачальник винен у проблемі, попросіть їх усунути проблему , намагаючись "перенести набір великих файлів у міжнародний спосіб".
Ендрю Генле
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.