Производительность FTPS с небольшими файлами XML, но очень большим объемом

352
Donz

Наша компания строит интеграцию b2b с другой стороной, которая требует, чтобы они доставляли нам большое количество ~ 100 000 XML-файлов по 10-15 КБ каждый в течение трехчасового окна каждый день. Для этого обмена мы планируем использовать наш FTPS-сервер (TLS / SSL), который является высокодоступным и работает в Linux.

Другая сторона выразила некоторые опасения по поводу накладных расходов на чтение / запись FTPS, заявив, что вполне вероятно, что передача будет выходить за пределы допустимого окна. Наши специалисты по инфраструктуре уверяют меня, что нет проблем с таким количеством файлов через FTPS, особенно на сервере HA Linux, пока мы удаляем их после получения файлов.

Я хочу обосновать подход выше. Кто-нибудь реализовал передачу большого объема через FTPS? Это плохая идея, и мы должны реализовать подход, основанный на очереди?

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

1
Итак, это в среднем 10 передач в секунду (ожидаются пики и впадины?) ... с использованием FTPS, и это по глобальной сети? На что похожа задержка? И будут ли эти передачи последовательными или будет какой-то параллелизм? misha256 9 лет назад 0

2 ответа на вопрос

1
davidgo

Краткий ответ: если серверы находятся близко друг к другу, вы можете сделать это, если они находятся далеко, скорее всего, вы перевернете окно передачи. В любом случае, однако, это плохая идея для «простой» реализации.

Более полный ответ:

Я не думаю, что этот сайт подходит для такого рода вопросов - правильный ответ будет «это зависит» и «вы должны запустить свои собственные тесты». (Также возможно Serverfault будет лучшим форумом, так как этот форум больше для хобби).

Тем не менее, я подвергаю сомнению FTPS как хорошее решение, так как кажется, что он имеет очень высокие издержки - FTP достаточно плох, прежде чем добавлять дополнительные издержки шифрования.

То, насколько технически это выполнимо, будет в значительной степени зависеть от скорости вашего канала, расстояния между серверами и количества одновременных подключений, которые вы делаете [несколько подключений могут снизить задержку до некоторой степени]

Если вы можете объединить несколько файлов в один больший файл, перенести их, а затем распаковать их, вы получите очень существенный прирост производительности, потому что:

  1. Вы уменьшаете проблемы с задержкой (и накладными расходами на шифрование, но позволяете игнорировать их, поскольку они несущественны по сравнению с остальной частью проблемы)
  2. Вы сжимаете файлы, уменьшая объем данных, которые необходимо передать.

Вы не указали, как будут работать передачи - будь то один сеанс FTPS с несколькими загружаемыми файлами или отдельный сеанс ftps для каждого файла.

Последнее решение, которое, как я подозреваю, было бы проще запрограммировать, повлекло бы за собой ОГРОМНЫЕ накладные расходы, поскольку необходимо было бы согласовать каждое отдельное соединение, и это согласование является дорогостоящим по сравнению с небольшим файлом. (Я не эксперт по FTPS, но TLS обычно добавляет около 6-7 Кбайт к каждому запросу, а FTPS - это сеанс FTP, заключенный в TLS).

Задержка на запрос, при условии, что полезная нагрузка была незначительной, возрастет примерно в 3 раза. Это может не иметь значения, если сайты находятся в одной сети, но, например, если у вас была одна сторона соединения в Нью-Йорке, а другая - в Лос-Анджелесе 80 мс, вы сталкиваетесь с существенными проблемами задержки, когда вы умножаете это на число файлы, и вы, вероятно, унесете свое окно передачи - даже если NAS справится с этим.

Хороший обзор. Я уверен, что цифры говорят сами за себя. 10 транзакций в секунду просто невозможно, у вас будет только 100 мсек на файл. Время пинга само по себе может быть больше, чем в глобальной сети. Если не было использовано несколько соединений, но даже тогда кажется сомнительным. misha256 9 лет назад 0
1
misha256

Я собираюсь предложить здесь ответ, который количественно определит проблему, с которой вы, вероятно, столкнетесь. Я тоже проголосовал за Давидго, потому что он правильно описывает проблему.

Учтите, что 100 000 передач в течение трех часов равняются в среднем примерно 10 передачам в секунду . Это 100 миллисекунд на каждую передачу.

Задержка между серверами должна быть на порядок ниже, чем, скажем, 10 мсек, чтобы была какая-то надежда не отставать от скорости передачи.

Если серверы подключены через WAN, вы можете считать это практически невозможным. Если вы не используете несколько одновременных подключений, но если сами транзакции являются последовательными, это фактически сводит на нет любые потенциальные выгоды от параллелизма.