Http многодиапазонные запросы медленные
У меня есть файл 8 ГБ на сервере, и я хочу загрузить 1,5 ГБ из этого файла, используя многодиапазонные запросы http. Я использую локон.
Все запросы распределены по файлу равномерно, кроме первого, который содержит большой диапазон 500 Мб (всего 161 запрос).
Я обнаружил, что время загрузки для этого первого запроса с большим диапазоном составляет ~40 секунд, а общее время ~560 секунд. Это означает, что я загружаю 500 МБ за 40 секунд и 1 ГБ за 520 секунд. Так что у меня есть 6-кратное замедление для равномерно распределенных запросов. Я также заметил, что при этом равномерно распределенных запросах скорость загрузки падает в ~6-8 раз.
Я не понимаю, почему это происходит. Диапазоны в каждом запросе сортируются по возрастанию смещения, поэтому я не понимаю, почему мы можем получить такое замедление. Не могли бы вы объяснить, что может вызвать такой беспорядок? И кроме того, как я могу улучшить производительность для таких наборов запросов?
Я мог бы предоставить набор запросов и времени, если это необходимо.
1 ответ
Вы не даете нам много работы, но вы можете проверить / рассмотреть следующие моменты:
вы на самом деле делаете один запрос с несколькими диапазонами или несколькими запросами, каждый с отдельным диапазоном?
Вы уверены, что ваш сервер (и скрипт, если это скрипт) действительно поддерживает запросы в диапазоне байтов?
Вы загружаете из статического файла или что-то, что динамически генерируется сервером? Если последнее, учтите, что каждый запрос означает, что серверу, вероятно, необходимо заново сгенерировать полный файл перед отправкой только той части, которая вас интересует.
в любом случае каждый запрос занимает немного времени для установления (TCP-соединение, SSL/TLS-рукопожатие, если необходимо, HTTP-запрос) перед фактической загрузкой. Это особенно верно, если вы используете отдельные вызовы curl или keep-alives отключены
Какова причина для нескольких запросов диапазона? Вы уверены, что не будет быстрее / проще загрузить весь файл (и, возможно, выполнить некоторую постобработку на стороне клиента)?