10.01.2011, 18:57 | #1 |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
Как ограничить нагрузку на сайт?
Глянул в top, пишет нагрузку что-то типа: 23, 22, 21.
Сайт притормаживает. Посмотрел логи: пара чел (т.е. с пары IP) скачивают все страницы моего сайта в несколько потоков. В принципе я догадываюсь, в чем дело: кто-то написал и выложил в инете API к моему сервису. Там и так около сотни посетителей одновременно всегда висит (около 1000 посетителей в час приходит), а тут еще тысячи страниц в несколько потоков без задержек скачиваются. Банить за это дело я не хочу (пусть качают), но вот когда сразу в несколько потоков качают, надо как-то ограничить. Как яндекс капчу "вы робот" делать тоже не хочу делать. Как быть? Пока думаю над такими вариантами: 1) Вставлять небольшую задержку для качальщиков. Но как без записи в БД из потока определить, что в несколько потоков и непрерывно открываются страницы? 2) Включить в движке кеширование. Без кеширования движок (он на джанго) по производительности раза в два быстрее Джумлы 1.5 (с парой модулей), делается 10-15 запросов к БД на страницу. Если включить кеширование, то будет 2-3 коротких запросов к БД + запросы модулей, в которых будет отключено кеширование (в движке можно это гибко настраивать). Но этот вариант я в любом случае задействую, однако боюсь его не хватит. 3) Включить обратный кеширующий прокси в апаче, но такое кеширование крайне неудобно. 4) Предоставить свое собственное API. Но его еще надо продумать и разработать. Также архив всех страниц для скачки может быть предоставить? 5) Фронтэндом поставитьь ngix. Но это врядли поможет, ибо узкое горлышко в скриптах и БД. В общем основной вопрос - как из скрипта определить, что с данного IP идет большая активность? Сервер у меня выделенный Феном 2-х ядерный 3 ГГц, 4 Гига оперативки. А посещаемость все растет и растет, а я еще один проект запустил... В общем надо уже меры принимать к качальщикам всех страниц скопом, т.к. без них нагрузка <1. Последний раз редактировалось boric; 10.01.2011 в 19:06. |
10.01.2011, 19:17 | #2 | ||
Специалист
|
Можно так:
Цитата:
limit_conn. Если много коннектов с 1 ИП или ему вывести предупреждение - мол друг подожди чуть чуть Цитата:
Добавлено через 7 минут Так же желательно всю статику отдавать nginx`ом - так быстрее и жрет ресурсов меньше. Последний раз редактировалось poiuty; 10.01.2011 в 19:21. Причина: Добавлено сообщение |
||
10.01.2011, 19:43 | #3 |
Специалист
|
к индейцу тоже какой-то модуль был, ограничивающий скорость скачки с одного ip
__________________
Не получается воткнуть код на сайт? Могу помочь. ася: 858-368. Рефералам бесплатно |
10.01.2011, 20:58 | #5 |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
poiuty, Спасибо за ссылку, но мне не надо обрубать качальщиков, мне хочется просто притормозить их активность. Указанный там механизм я хочу реализовать в самом скрипте.
Пока такие идеи: В оперативной памяти будет таблица mysql, в которой будут фиксироваться ip и временная метка посетителей (например: ip, time). Далее в начале главного скрипта проверять наличие этой талицы (если ее нет, то создать), записать туда (ip, time), сделать выборку по этому ip за последние например 1000 милисекунд, проанализировать, удалить из таблицы все записи старее 1000 мс, выставить задержку (зависящую от активности, например 1 сек) и продолжить выполнение скрипта. Что думаете? Вроде быстро должно все отрабатываться и посетитель не будет блокироваться (как в яндексе - "ты робот"), а будет лишь притормаживаться. |
10.01.2011, 22:12 | #6 | ||
Специалист
|
Цитата:
Цитата:
И далее на 503.html сделайте таймер -> прошел таймер -> перекинули пользователя снова на сайт. Добавлено через 3 минуты В противном случае вы получите тучу селектов и инсертов.Так как каждый ип будет фиксироваться. Т.е. человек зашел на сайт - проверяем ип.Обновил страницу - проверяем ип. 100 человек за секунду обновили ваш сайт ~ 100 запросов в базу.Айс. Последний раз редактировалось poiuty; 10.01.2011 в 22:12. Причина: Добавлено сообщение |
||
10.01.2011, 22:21 | #7 | |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
poiuty,
Цитата:
|
|
10.01.2011, 22:43 | #9 |
Специалист
|
|
10.01.2011, 22:51 | #10 | |
Эксперт
Регистрация: 05.03.2008
Сообщений: 1,095
Вес репутации: 249
|
Alexey,
Цитата:
|
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как уменьшить нагрузку на хостинг | Kiparis | Вопросы по работе системы | 18 | 06.10.2010 10:48 |
Как определить, какую нагрузку на сервер создаёт сайт? | Штрафная РОТА | Общие вопросы оптимизации | 14 | 05.05.2010 16:26 |
Как уменьшить нагрузку на сайт? | kamar87 | Вопросы по работе системы | 6 | 08.11.2009 14:17 |
Как уменьшить нагрузку на сервак? двиг Джумла. | Maniak | Разработка и сопровождение сайтов | 11 | 23.04.2009 17:45 |
Sape создает нагрузку на сервер | websar | Вопросы по работе системы | 20 | 28.08.2008 20:05 |
Часовой пояс GMT +3, время: 02:25.