Ускорение генерации страницы без кэша

Главные вкладки

Аватар пользователя sergera-sakh sergera-sakh 30 июля 2015 в 10:40

Друзья, требуется помощь. Суть проблемы: есть написанный самопальный модуль, на основе Simpleads (баннеро-крутилка, помесь AdRiver и DoubleClick), на сайте, где размещаем рекламу прописываем в нужное место javascript, он вызывает определенный УРЛ и подгружает, баннеров может быть до 4-х, соответственно используется случайная генерация, плюс в зависимости от REFERER баннеры могут отличаться (один рекламодатель размещается только в разделе новостей, другой только в блогах, но в одном и том же месте). Получается, что встроенный механизм кеширования не подходит, т.к. при запросе баннера мы должны сначала посмотреть УРЛ, откуда идёт запрос, затем вывести случайный баннер из тех, что проданы в данном разделе. Генерация баннеров максимально оптимизирована и использует кеши, но прожорливость запросов к баннерам переходит все границы: запрос одного баннера в секунду на тестах показал съедание примерно 120МГц. Планируется серьезная нагрузка, 500 тысяч показов баннеров в день, в пик будет доходить до 85 показов в секунду.
Может кто-то подсказать, каким образом можно уменьшить нагрузку на PHP, чтобы снизить нагрузку?
Сам пока пришёл к мысли, что возможно создать внешний PHP, подключаться к БД и генерировать напрямую, полностью минуя друпал. А есть ли вариант сделать примерно тоже самое, только средствами друпала, заставив его загружаться в минимально-функционирующей конфигурации для отдачи этих страниц?

Комментарии

Аватар пользователя sergera-sakh sergera-sakh 30 июля 2015 в 15:21

"dashiwa" wrote:
минимально-функционирующей конфигурации - drupal_bootstrap(); ?

Да вот эта функция вроде как почти то, что нужно, но всё-таки, если не FULL загрузка, то существуют ограничения на то, что можно использовать. Вот если бы был способ пропустить проверки пермишшинов на доступ например или допустим загрузка друпала с подключением только определенных модулей, чтобы разгрузить запрос. Либо, как вариант, исполнение некоего кода перед вызовом страницы из кеша. Просто я не сильно знаком с механизмами оптимизации или с тем же drupal_bootstrap(). Сейчас разбираться пытаюсь, но вроде как не при полной загрузке особо много не сделаешь. И вот родилась мысль, возможно подключить бутстрап в фазе подключения к БД и просто напрямую получать данные. Думал, что может тут кто-то какие-то мысли по данному поводу напишет.

Аватар пользователя Orion76 Orion76 30 июля 2015 в 18:46

А если баннеры в файловый кеш.
Логику показов возложить на JS.
Отдавать nginx-ом из кэша "статику"..

Или я чего-то недопонял?

Аватар пользователя sergera-sakh sergera-sakh 31 июля 2015 в 2:17

"orion76" wrote:
Логику показов возложить на JS.

Об этом варианте я тоже думал, но получается JS должен получить с сервера все варианты УРЛов, по которым проданы отдельные рекламодатели, если таковых, соответствующих текущему УРЛу нет, то загрузить баннер рекламодателя, который размещается сквозным размещением, а если такого нет, то показать код Google или Yandex блоков. В общем, довольно сложная схема для JS, мне кажется. Хотя, конечно, проконсультируюсь с JS-кодером, может он подскажет чего.

Аватар пользователя Orion76 Orion76 31 июля 2015 в 6:25

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

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