Как работают ускорители загрузки? - PullRequest
15 голосов
/ 18 сентября 2008

Мы требуем, чтобы все запросы на загрузку имели действительный логин (не http), и мы генерируем билеты транзакций для каждой загрузки. Если вам нужно перейти по одной из ссылок на скачивание и попытаться «воспроизвести» транзакцию, мы используем HTTP-коды, чтобы переслать вам, чтобы получить новый билет транзакции. Это прекрасно работает для большинства пользователей. Однако есть небольшое подмножество, использующее ускорители загрузки, которые просто пытаются воспроизвести билет транзакции несколько раз.

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

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

Что делает программа-ускоритель?

Ответы [ 7 ]

14 голосов
/ 18 сентября 2008

Более подробный обзор ускорителей загрузки вы найдете на wikipedia .

Ускорение многогранно

Первый

Существенным преимуществом управляемых / ускоренных загрузок является то, что рассматриваемый инструмент запоминает переданные смещения начала / остановки и использует «частичные» и «диапазонные» заголовки для запроса частей файла вместо всех его.

Это означает, что если что-то умирает в середине транзакции (т. Е. TCP Time-out), оно просто повторно соединяется с того места, где остановилось, и вам не нужно начинать с нуля.

Таким образом, если у вас прерывистое соединение, совокупное время передачи значительно уменьшается.

Второй

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

Существует такая раздражающая вещь, которая называется bandwidth-delay-product, где размер буферов TCP на обоих концах выполняет некоторую математическую задачу в сочетании со временем пинга, чтобы получить реальную опытную скорость, и на практике это означает, что большое время пинга ограничит ваш скорость вне зависимости от того, сколько мегабит / сек имеют все временные соединения.

Однако это ограничение, по-видимому, относится к каждому соединению, поэтому несколько TCP-подключений к одному серверу могут помочь снизить производительность, связанную с временем пинга с высокой задержкой.

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

В-третьих

В некоторых случаях можно найти несколько серверов, которые предоставляют один и тот же ресурс, иногда один DNS-адрес округляется до нескольких IP-адресов, или сервер является частью какой-либо зеркальной сети. Менеджеры загрузок / ускорители могут обнаружить это и применить метод сегментированной передачи на нескольких серверах, что позволяет загрузчику получать более широкую пропускную способность, передаваемую им.

Поддержка

Поддержка первого типа ускорения - это то, что я лично предлагаю как «минимум» для поддержки. Главным образом, потому что это облегчает жизнь пользователей и уменьшает объем совокупной передачи данных, которую вы должны обеспечить из-за того, что пользователям не приходится повторно загружать один и тот же контент.

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

Поддержка второго и третьего дает вам бонусные баллы, и пользователи, как правило, желают получить по крайней мере второе, в основном потому, что международным клиентам не нравится, когда их рассматривают как клиентов второго класса, просто из-за большего времени пинга, и это не объективно потреблять больше пропускной способности в любом смысле, который имеет значение. Худшее, что может случиться, - это может привести к тому, что ваша общая пропускная способность будет нежелательной для работы вашего сервиса.

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

1 голос
/ 18 сентября 2008

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

TCP реализован таким образом, что, если происходит тайм-аут, период тайм-аута увеличивается. Это очень эффективно для предотвращения перегрузок сети за счет скорости на отдельных соединениях TCP.

Ускорители загрузки могут обойти эту проблему, открыв десятки TCP-соединений и отбросив медленные до определенного порогового значения, а затем открыв новые для замены медленных соединений.

Хотя это эффективно для одного пользователя, я считаю, что это вообще плохой этикет.

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

1 голос
/ 18 сентября 2008

Это все о законе Литтла . В частности, каждый поток на веб-сервер видит определенную задержку TCP и поэтому будет переносить только столько данных. Такие хитрости, как увеличение размера окна TCP и реализация выборочных подтверждений, помогают, но плохо реализованы и обычно вызывают больше проблем, чем решают.

Наличие нескольких потоков означает, что задержка, видимая каждым потоком, менее важна, так как общая пропускная способность увеличивается в целом.

Еще одним ключевым преимуществом ускорителя загрузки, даже при использовании одного потока, является то, что это, как правило, лучше, чем использование встроенных в инструмент загрузки веб-браузеров. Например, если веб-браузер решит умереть, инструмент загрузки продолжится. Кроме того, инструмент загрузки может поддерживать такие функции, как приостановка / возобновление, которых нет во встроенном браузере.

1 голос
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

Обычно нет.

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

0 голосов
/ 18 сентября 2008

Большинство «ускорителей» загрузки вообще ничего не ускоряют. То, что они умеют делать, это перегружать сетевой трафик, взламывать ваш сервер и ломать пользовательские скрипты, как вы видели. В основном, как это работает, вместо того, чтобы делать один запрос и загружать файл от начала до конца, он делает, скажем, четыре запроса ... первый загружается с 0-25%, второй с 25-50% и так далее, и это делает их всех одновременно. Единственный конкретный случай, когда это помогает, - это если их интернет-провайдер или брандмауэр выполняет какое-то управление трафиком, так что индивидуальная скорость загрузки ограничена меньшей, чем общая скорость загрузки.

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

0 голосов
/ 18 сентября 2008

От: http://askville.amazon.com/download-accelerator-protocol-work-advantages-benefits-application-area-scope-plz-suggest-URLs/AnswerViewer.do?requestId=9337813

Цитата: Самый распространенный способ ускорить загрузку - это открыть все загрузки. Многие серверы ограничивают полосу пропускания одного соединения, поэтому параллельное открытие нескольких каналов увеличивает скорость. Это работает путем указания смещения, с которого должна начинаться загрузка, которое поддерживается как для HTTP, так и для FTP.

Конечно, этот способ ускорения довольно "не социальный". Ограничение полосы пропускания реализовано для обслуживания большего количества клиентов, поэтому использование этого метода снижает максимальное количество пиров, которые могут загружать. По этой причине многие серверы ограничивают количество параллельных соединений (распознается по IP), например, многие FTP-серверы делают это, поэтому вы сталкиваетесь с проблемами, если загружаете файл и пытаетесь продолжить просмотр с помощью браузера. Технически это два параллельных соединения.

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

...