2015-12-29 7 views
0

У меня есть файл 8gb на сервере, и я хочу загрузить 1,5 gb из этого файла с помощью HTTP-запросов. Я использую завиток.Http multirange запросов slow

Все запросы распределяются равномерно по файлу, кроме первого, которые содержат большой диапазон 500 МБ (всего 161 запрос).

Я обнаружил, что время загрузки для этого первого запроса с большим диапазоном составляет ~ 40 секунд, а общее время ~ 560 сек. Это означает, что я загружаю 500 МБ в течение 40 секунд и 1 ГБ на 520 сек. Поэтому у меня есть 6-кратное замедление для равномерно распределенных запросов. Я также заметил, что скорость загрузки падает в ~ 6-8 раз, когда это равномерно распределенные запросы выполняются.

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

Я мог бы предоставить набор запросов и сроков, если это необходимо.

ответ

1

Вы не даете нам много работать, но вы можете проверить/рассмотреть следующие вопросы:

  • которые вы на самом деле делаете один запрос с несколькими диапазонами или нескольких запросов, каждый с отдельным диапазоном?

  • Вы уверены, что ваш сервер (и скрипт, если это скрипт) действительно поддерживает запросы байтового диапазона?

  • Вы загружаете файл из статического файла или что-то, что генерируется динамически сервером? Если последние считают, что каждый запрос означает, что серверу, вероятно, необходимо будет сгенерировать полный файл перед отправкой только интересующей вас части.

  • В любом случае каждый запрос занимает немного времени, чтобы установить (Соединение TCP, соединение SSL/TLS, если необходимо, запрос HTTP) перед фактической загрузкой. Это особенно актуально, если вы используете отдельные вызовы curl или keep-alives отключены.

Какова аргументация для запросов с несколькими диапазонами? Вы уверены, что не просто загрузить/ускорить загрузку всего файла (и, возможно, клиентскую часть после обработки)?

+0

1) Да, каждый запрос представляет собой запрос с несколькими диапазонами. 2) Я использую новейший сервер Apache. Как я понимаю, он поддерживает такие запросы из коробки. 3) Это статический файл. Сервер не может его изменить. 4) Да, я использовал отдельный вызов curl для тестирования. Но по мере того, как я отстаю, некоторые издержки для инициализации не могут доходить до 6-кратного замедления. Я не могу загрузить весь файл, так как он также должен работать для сети с небольшой пропускной способностью. В моем случае первый запрос (с большим диапазоном) работает со скоростью около 13 Мбит/с, но для остальных запросов падает до 2 Мбит/с. – brachistochron

+0

Можете ли вы более четко указать, что именно представляют собой разные запросы и диапазоны каждого из них? Вы говорите несколько диапазонов, но затем вы говорите несколько запросов ... Можете ли вы предоставить конкретные примеры вызова (включая URL-адрес для загрузки, если это возможно)? – jcaron

+0

Да, у меня несколько запросов с несколькими диапазонами. Здесь вы можете найти архив с скриптом python, который запускает кучу запросов (из request.txt) https://www.dropbox.com/s/25jbzwswak8o98f/test_set.zip?dl = 0 и записать время и память для каждого запроса на стандартный вывод. Итак, чтобы воспроизвести, что вы можете просто запустить локальный сервер apache с официального сайта и поместить в него некоторый файл (~ 2gb). Я также уменьшаю запросы на диапазон 2gb, поэтому на данный момент я пытаюсь загрузить 1.5 gb из файла 2 gb. – brachistochron

 Смежные вопросы

  • Нет связанных вопросов^_^