Пришвидшити завантаження 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.