- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Тема уже не раз обсуждалась, но так и не решил как всё же лучше (в плане оптимальной траты серверных ресурсов).
На скачку должны отдаваться непрямые линки. Вроде как тут 3 основных пути:
1. генерить симлинки (на каждую отдельную скачку) и по прошествии какого-то времени удалять их.
2. давать линк на скрипт(например, с определённым параметром, идентифицирующем ту же сессию), при обращении к которому скриптом будет считываться файл и отдаваться. Но как я понимаю - нагрузка на сервер в данном случае неслабо(неслабо ли?) вырастет, так как будет юзаться тот же апач (если использовать php).
3. поизвращаться с mod-rewrite в .htaccess, но как я понимаю десяток тысяч линков туда тоже не забьёшь(и он должен будет постоянно редактироваться - при новой закачке нужно добавить новое правило, по завершению закачки удалить.). ну и собственно тоже волнует вопрос производительности (чей mod-rewrite лучше тогда юзать апач-евский или nginx-овский).
размер файлов разный - от мегабайта до пары гигабайт, но в среднем где-то мегабайт 20 на файл.
Порекомендуйте, пожалуйста, наиболее разумный метод. (ось CentOS)
Попробуйте
secure_link_module
http://sysoev.ru/nginx/docs/http/ngx_http_secure_link_module.html
еще как вариант
X-Accel-Redirect
ТС,
А что значит "лучше организовать"? Простите лучше чем что? И для каких целей ?
С удовольствием подумал бы на вашу тему и дал рекомендацию но сильно мало вводных. Кроме трех описанных методов которые сами по себе вызывают подозрение я вижу массу других, почему странных? цитирую из пункта 2 "так как будет юзаться тот же апач", а в случае 1 и 3 что будет юзаться? Ну это так .. .мелочи :)) А еще интересует ряд сетевых параметров, какой объем отдается например в сутки?
Вы видите сколько Иксов в вашем вопросе? :D Мега сложная формула для расчета ответа получается :) А все кто будут отвечать на этот вопрос читая его как есть - заведомо вруны :P (т.е Вы никогда не добьетесь >правильного< ответа, так как разные типы раздач будут полезны при разных запросах..
zexis, iHead - благодарю за ответы, уже смотрю
Romka_Kharkov,
>так как будет юзаться тот же апач
там ещё дописано "(если использовать php)"
В этом выражении я подразумевал то, что по моему мнению использовать скриптовый язык для таких целей слишком ресурсоёмко..
> А еще интересует ряд сетевых параметров, какой объем отдается например в сутки?
ну мне желательно бы максимально возможный (то есть до 100 мбит/с в моём случае). что касается параллельных скачиваний, то я думаю что несколько тысяч вполне могут быть
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 серверов одинаковых , раздают один и тот же контент , т.е балансируют между собой нагрузку.... С одного сервера суммарный объем такой отдать нет физической возможности.
>или вы планируете завести ресурс и не знаете посещаемости? Во втором случае нужна приблизительная посещаемость
верно и на счёт приблизительной посещаемости сложно сказать. да и зачем она нужна в данном теоретичесом вопросе? Я же не привожу конфига и не привожу ширины канала. Я предполагаю выбрать наиболее оптимальный способ отдачи с одного сервера. Когда этот сервер будет подавать признаки чрезмерной нагрузки, то добавить второй сервер, потом третий и т.д. - кол-во, так сказать, физических узлов не принципиально в данном вопросе.
Т.е если у вас 10k скачиваний это 18 Mb/s , а если 100k то это 180 Mb/s.
честно говоря, я знаком с основами арифметики )
я и так понимаю сколько трафика уйдёт в зависимости от объёма файла и кол-ва качающих..
конечно же это всё я понимаю. я не вижу проблемы в масштабировании, я вижу проблему лишь в реализации - "каким путём стоит пойти"
вот вы написали "Блин вы опять о вечном" - на мой взгляд, всё таки это вы о вечном в данном сообщении )
что касается этого - я конечно же согласен, но это немного сложновато для меня на данный момент - хотелось бы чего нибудь более стандартного..
вот очень хорошее замечание. проясните, пожалуйста, в чём проблема тысяч одновременных скачиваний? то есть это процессор/файловая система среднего сервера не выдержит или те же апач/nginx? (вопрос скорости опустим, пусть она будет хоть 50кбит/сек на одну скачку)
Начните изучать книгу типа IBM PC для чайников. Откроете для себя такие вещи как random seek или ограничение шины.
врядли такое случиться. я вобще тут предполагал спросить - могли бы и ответить за место того чтобы умничать чайниками
вот вы написали "Блин вы опять о вечном" - на мой взгляд, всё таки это вы о вечном в данном сообщении )
Просто поймите. хочется же ответить вам грамотно на ваш вопрос, подсказать, порекомендовать, а без знания ваших запросов ..... разговор ни о чем, число рассуждения, может так ... а может так...
вот очень хорошее замечание. проясните, пожалуйста, в чём проблема тысяч одновременных скачиваний? то есть это процессор/файловая система среднего сервера не выдержит или те же апач/nginx? (вопрос скорости опустим, пусть она будет хоть 50кбит/сек на одну скачку)
Я думаю что первым на очереди будет I/O к винту, как я уже писал выше, а чуть ниже Андрейка докинул еще пару приятных терминов :D
где вы это видите вобще? у меня вполне обычная задача - реализовать скачку файлов - что тут ещё нужно сказать. стандартное железо, ось centos, использовать нестандартные решения желания нет. кол-во качающих будет таким на сколько возможно будет загрузить сервер(чтоб он не помирал). когда 1-го сервера будет не хватать, будет второй, третий.. в вопросе я чётко дал понять, что хочу загрузить сервер по полной (то есть оптимально расходуя его ресурсы) - по моему все возможные ИКСы известны.. и меня интересует как лучше это реализовать, используя более-менее станартное ПО.
запросы также все есть. он один этот запрос: как оптимально реализовать скачку файлов на одном сервере. что ещё то нужно?
Вобще как-то странно, в первом сообщении вы утвержаете что на 1000 одноврвеменных скачиваний(хоть и по 50кбит/сек на каждую скачку) и 10 серверов не хватит, а тут уже лишь предполагаете что первой проблемой станет ошибка ввода/вывода..
а сама ОС такие моменты не контролирует (не ставит считывания с жёсткого в очередь и прочее)? То есть если начать качать 1000 файлов, то какие-то процессы чтения попросту убьются и сервер просто отдаст какую то ошибку(например 500) по всем неудавшимся запроса, я правильно вас понимаю?
а на каком кол-ве качающих это предположительно случиться, на 100, на 200? (на обычных сата2 винтах). Исходя из этой информации я смогу выставить какие-то ограничения.. Я конечно же понимаю, что это и опытным путём всё проверить можно, но надеялся что кто-то и так сможет подсказать