Подскажите как лучше организовать скачку(отдачу) файлов с сервера

12 3
A5
На сайте с 11.05.2009
Offline
37
2431

Тема уже не раз обсуждалась, но так и не решил как всё же лучше (в плане оптимальной траты серверных ресурсов).

На скачку должны отдаваться непрямые линки. Вроде как тут 3 основных пути:

1. генерить симлинки (на каждую отдельную скачку) и по прошествии какого-то времени удалять их.

2. давать линк на скрипт(например, с определённым параметром, идентифицирующем ту же сессию), при обращении к которому скриптом будет считываться файл и отдаваться. Но как я понимаю - нагрузка на сервер в данном случае неслабо(неслабо ли?) вырастет, так как будет юзаться тот же апач (если использовать php).

3. поизвращаться с mod-rewrite в .htaccess, но как я понимаю десяток тысяч линков туда тоже не забьёшь(и он должен будет постоянно редактироваться - при новой закачке нужно добавить новое правило, по завершению закачки удалить.). ну и собственно тоже волнует вопрос производительности (чей mod-rewrite лучше тогда юзать апач-евский или nginx-овский).

размер файлов разный - от мегабайта до пары гигабайт, но в среднем где-то мегабайт 20 на файл.

Порекомендуйте, пожалуйста, наиболее разумный метод. (ось CentOS)

zexis
На сайте с 09.08.2005
Offline
388
#1
iHead
На сайте с 25.04.2008
Offline
137
#2

еще как вариант

X-Accel-Redirect

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#3

ТС,

А что значит "лучше организовать"? Простите лучше чем что? И для каких целей ?

С удовольствием подумал бы на вашу тему и дал рекомендацию но сильно мало вводных. Кроме трех описанных методов которые сами по себе вызывают подозрение я вижу массу других, почему странных? цитирую из пункта 2 "так как будет юзаться тот же апач", а в случае 1 и 3 что будет юзаться? Ну это так .. .мелочи :)) А еще интересует ряд сетевых параметров, какой объем отдается например в сутки?

Вы видите сколько Иксов в вашем вопросе? :D Мега сложная формула для расчета ответа получается :) А все кто будут отвечать на этот вопрос читая его как есть - заведомо вруны :P (т.е Вы никогда не добьетесь >правильного< ответа, так как разные типы раздач будут полезны при разных запросах..

Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
A5
На сайте с 11.05.2009
Offline
37
#4

zexis, iHead - благодарю за ответы, уже смотрю

Romka_Kharkov,

>так как будет юзаться тот же апач

там ещё дописано "(если использовать php)"

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

> А еще интересует ряд сетевых параметров, какой объем отдается например в сутки?

ну мне желательно бы максимально возможный (то есть до 100 мбит/с в моём случае). что касается параллельных скачиваний, то я думаю что несколько тысяч вполне могут быть

Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#5
alex545:
zexis, iHead - благодарю за ответы, уже смотрю

Romka_Kharkov,
>так как будет юзаться тот же апач
там ещё дописано "(если использовать php)"
В этом выражении я подразумевал то, что по моему мнению использовать скриптовый язык для таких целей слишком ресурсоёмко..

> А еще интересует ряд сетевых параметров, какой объем отдается например в сутки?
ну мне желательно бы максимально возможный (то есть до 100 мбит/с в моём случае). что касается параллельных скачиваний, то я думаю что несколько тысяч вполне могут быть

Блин вы опять о вечном :)

"для таких целей слишком ресурсоёмко" - Для каких целей? Просто отдавать файл?

"ну мне желательно бы максимально возможный" - Вы как вообще стоите подход то свой? У вас есть ресурс и вы не знаете посещаемости? или вы планируете завести ресурс и не знаете посещаемости? Во втором случае нужна приблизительная посещаемость..... паралельно несколько тысяч... вы смеетесь? по 20MB-XGB каждый ??? 20GB одновременно ? Для такого объема отдачи может и 10 серверов не хватить.

Я понял, пояснить будет весьма сложно (простите), формула выглядит где-то так, берем "планируемое количество скачиваний" в сутки умножаем на среднюю величину файла, получаем среднее количество скачанного за сутки, потом высчитываем скорость которая нам потребуется для скачивания этого объема за 24 часа..... И получаем нагрузку на канал с точки зрения трафика.... Для вас проведу примерный расчет по вашим данным: ~20 MB файл (но так как вы сказали от 1го МБ до нескольких ГБ то я уже сомневаюсь что там среднее 20MB но все же), допустим , если у вас за сутки будет 1000 скачиваний, вы отдадите ~20 GB за сутки. Получаем 20Gb / 24 / 60 / 60 = 231 килобайта в секунду, это приблизительно равно скорости 1.8 Мегабита в секунду (Mb/s).

Т.е если у вас 10k скачиваний это 18 Mb/s , а если 100k то это 180 Mb/s.

Ну начну с того, что по разговорам форумщиков-админов, если вы отдаете голую статику, стоит вовсе забыть про апач.... лучше использовать nginx (но я лично эту теорию пока не проверил, по этому ссылаюсь на других авторов которые наверняка подтвердят эти слова своими постами если почитают). Если у вас большая интенсивность, то для мелких файлов будет закономерно использовать прозрачное кеширование, что бы массу 20 метровых файлов отдавать не с винта, а с памяти. Механизм выдачи клиенту ссылок сам по себе не ресурсоемкий? что тут сложного запросили какой-то файлик, механизм глянул в базу где он там лежит и начал отдавать..... я не думаю что такие запросы родят какие-то нагрузки, в вашем случае основная нагрузка придется на I/O (ввод\вывод) с винтом. Памяти и проца при такой работе использоваться будет не много. В случае именно голой отдачи статики я бы вообще рекомендовал обойтись без веб сервера, напишите апликуху которая на 80м пору будет выстреливать нужные заголовки и тулить клиенту файл, с точки зрения ПО будет оптимальный вариант нежели преславутый nginx и apache .... Но это совсем хороший подход, потому что для голой отдачи вам 99% функций nginx тоже не понадобятся :)

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

A5
На сайте с 11.05.2009
Offline
37
#6

>или вы планируете завести ресурс и не знаете посещаемости? Во втором случае нужна приблизительная посещаемость

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

допустим , если у вас за сутки будет 1000 скачиваний, вы отдадите ~20 GB за сутки. Получаем 20Gb / 24 / 60 / 60 = 231 килобайта в секунду, это приблизительно равно скорости 1.8 Мегабита в секунду (Mb/s).

Т.е если у вас 10k скачиваний это 18 Mb/s , а если 100k то это 180 Mb/s.

честно говоря, я знаком с основами арифметики )

я и так понимаю сколько трафика уйдёт в зависимости от объёма файла и кол-ва качающих..

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

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

вот вы написали "Блин вы опять о вечном" - на мой взгляд, всё таки это вы о вечном в данном сообщении )

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

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

паралельно несколько тысяч... вы смеетесь? по 20MB-XGB каждый ??? 20GB одновременно ? Для такого объема отдачи может и 10 серверов не хватить.

вот очень хорошее замечание. проясните, пожалуйста, в чём проблема тысяч одновременных скачиваний? то есть это процессор/файловая система среднего сервера не выдержит или те же апач/nginx? (вопрос скорости опустим, пусть она будет хоть 50кбит/сек на одну скачку)

Andreyka
На сайте с 19.02.2005
Offline
822
#7

Начните изучать книгу типа IBM PC для чайников. Откроете для себя такие вещи как random seek или ограничение шины.

Не стоит плодить сущности без необходимости
A5
На сайте с 11.05.2009
Offline
37
#8
Начните изучать книгу типа IBM PC для чайников. Откроете для себя такие вещи как random seek или ограничение шины.

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

Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#9
alex545:

вот вы написали "Блин вы опять о вечном" - на мой взгляд, всё таки это вы о вечном в данном сообщении )

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

alex545:

вот очень хорошее замечание. проясните, пожалуйста, в чём проблема тысяч одновременных скачиваний? то есть это процессор/файловая система среднего сервера не выдержит или те же апач/nginx? (вопрос скорости опустим, пусть она будет хоть 50кбит/сек на одну скачку)

Я думаю что первым на очереди будет I/O к винту, как я уже писал выше, а чуть ниже Андрейка докинул еще пару приятных терминов :D

A5
На сайте с 11.05.2009
Offline
37
#10
. разговор ни о чем, число рассуждения, может так ... а может так...

где вы это видите вобще? у меня вполне обычная задача - реализовать скачку файлов - что тут ещё нужно сказать. стандартное железо, ось centos, использовать нестандартные решения желания нет. кол-во качающих будет таким на сколько возможно будет загрузить сервер(чтоб он не помирал). когда 1-го сервера будет не хватать, будет второй, третий.. в вопросе я чётко дал понять, что хочу загрузить сервер по полной (то есть оптимально расходуя его ресурсы) - по моему все возможные ИКСы известны.. и меня интересует как лучше это реализовать, используя более-менее станартное ПО.

а без знания ваших запросов

запросы также все есть. он один этот запрос: как оптимально реализовать скачку файлов на одном сервере. что ещё то нужно?

Я думаю что первым на очереди будет I/O к винту

Вобще как-то странно, в первом сообщении вы утвержаете что на 1000 одноврвеменных скачиваний(хоть и по 50кбит/сек на каждую скачку) и 10 серверов не хватит, а тут уже лишь предполагаете что первой проблемой станет ошибка ввода/вывода..

а сама ОС такие моменты не контролирует (не ставит считывания с жёсткого в очередь и прочее)? То есть если начать качать 1000 файлов, то какие-то процессы чтения попросту убьются и сервер просто отдаст какую то ошибку(например 500) по всем неудавшимся запроса, я правильно вас понимаю?

а на каком кол-ве качающих это предположительно случиться, на 100, на 200? (на обычных сата2 винтах). Исходя из этой информации я смогу выставить какие-то ограничения.. Я конечно же понимаю, что это и опытным путём всё проверить можно, но надеялся что кто-то и так сможет подсказать

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий