Перейти к контенту

Кэширование в IPB 3.1.2


Рекомендуемые сообщения

Привет,

 

Настроил Memcached кэширование в IPB 3.1.2. Также на сервере установил nginx. Но возникла идея связать nginx и Memcached, чтобы nginx отдавал результат сразу, если он есть в Memcached. Если нет - отдавал запрос уже на backend, там уже производились вычисления и результат заносился в Memcached.

 

Исследовал, как IPB кладёт значения в Memcached.

 

Всё это дело выглядит примерно так:

 

memcache_set( $this->link, md5( $this->identifier . $key ), $value, MEMCACHE_COMPRESSED, intval($ttl) );

 

Логировал вызов данной функции и получил следующие значения:

 

ID - $this->identifier

KEY - $key

VALUE - $value

 

ID: http://forum.com, KEY: badwords, VALUE: a:0:{}

ID: http://forum.com, KEY: banfilters, VALUE: a:0:{}

ID: http://forum.com, KEY: multimod, VALUE: a:0:{}

ID: http://forum.com, KEY: skin_remap, VALUE: a:0:{}

ID: http://forum.com, KEY: useragentgroups, VALUE: a:0:{}

 

Это всё в IPB, теперь как смотрит на это дело nginx:

 

nginx может оперировать параметрами $uri и $args, что при просмотре в логах выглядит следующим образом:

 

=[ /index.php - /topic/428-%d0%b2%d1%8b%d0%b0%d1%86%d0%b2%d1%83%d0%b0/page__st__20 ]=

 

, где

$uri - /index.php

$args - /topic/428-%d0%b2%d1%8b%d0%b0%d1%86%d0%b2%d1%83%d0%b0/page__st__20

 

В результате получается, что ключи, по которым кэширует IPB в nginx использовать не получится. Но в то же время я не до конца понимаю логику кэширования в Memcached.

 

По сему вопрос: как можно достучаться к значением кэша Memcached, зная только урл страницы форума ? Может кто-нибудь сталкивался с подобной проблемой или кому-нибудь интересно будет;)

Ссылка на комментарий
Поделиться на других сайтах

Никак, да.

 

Кешируются отрендеренные посты и метаданные.

 

Кстати, совершенно непонятно, как вы собираетесь в своём варианте отслеживать обновление страниц скриптом форума в кеше при изменении, если обращаться к нему не будете.

 

Какая у вас нагрузка, что требуется такое жёсткое кеширование?

Ссылка на комментарий
Поделиться на других сайтах

Скорее, топикстартер не очень понимает, что такое Memcached, и что такое вообще кэширование в контексте веб-разработки...

 

Тема на форуме:

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

- это набор элементов управления, различный в зависимости от прав обратившегося за страницей пользователя,

- это набор собственно постов, собранный исходя из прав доступа пользователя.

 

В IPB кешируется только последнее, и кэш при этом хранится в MySQL, а не во внешних хранилищах. Во внешний кэш (н/р, Memcached) отправляются "системные кэши" (соответвствующий пункт в АЦ на главной) - наборы смайликов, возможных тегов, общие настройки форума, некоторые статистические данные & etc, которые используются постоянно и одинаковы для всех пользователей форума.

Ссылка на комментарий
Поделиться на других сайтах

> В IPB кешируется только последнее, и кэш при этом хранится в MySQL, а не во внешних хранилищах.

Вроде бы шла речь о том, чтобы можно было переность кеш сообщений во внешнее хранилище?

Хотя если нет, можно и самостоятельно реализовать.

Ссылка на комментарий
Поделиться на других сайтах

Никак, да.

 

Кешируются отрендеренные посты и метаданные.

 

Кстати, совершенно непонятно, как вы собираетесь в своём варианте отслеживать обновление страниц скриптом форума в кеше при изменении, если обращаться к нему не будете.

 

Какая у вас нагрузка, что требуется такое жёсткое кеширование?

в пики посещаемости (что бывает довольно часто), лоад на сервере превышает 15.

 

Скорее, топикстартер не очень понимает, что такое Memcached, и что такое вообще кэширование в контексте веб-разработки...

 

Тема на форуме:

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

- это набор элементов управления, различный в зависимости от прав обратившегося за страницей пользователя,

- это набор собственно постов, собранный исходя из прав доступа пользователя.

 

В IPB кешируется только последнее, и кэш при этом хранится в MySQL, а не во внешних хранилищах. Во внешний кэш (н/р, Memcached) отправляются "системные кэши" (соответвствующий пункт в АЦ на главной) - наборы смайликов, возможных тегов, общие настройки форума, некоторые статистические данные & etc, которые используются постоянно и одинаковы для всех пользователей форума.

Я как раз и имел ввиду 3й пункт. Возможно ли средствами IPB кэш сообщений хранить не в MySQL, а во внешнем хранилище ? Судя по всему на сервер БД самая большая нагрузка

 

Хотя если нет, можно и самостоятельно реализовать.

Каким образом ? :)

 

Кстати, провёл тесты ad после установки и конфигурирования nginx'а. Значение Requests Per Second меньше, чем при использовании "чистого" Apache.

 

Вот конфиг nginx:

 

http {
   include       /etc/nginx/mime.types;
   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                     '"$status" $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for", =[ URI: $uri | ARGs: $args ]=';

   #access_log  /var/log/nginx/access.log  main;

   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;

   keepalive_timeout  75;

   server {

       listen 80 default;
       server_name localhost;
       deny all;

   }

server {
       listen 80;
       server_name forum.com www.forum.com;
       access_log /var/log/nginx/forum.com_access.log main;

       charset utf-8;

       # Main location
       location / {
               proxy_pass http://127.0.0.1:8080/;
               proxy_redirect off;

               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

               client_max_body_size 10m;
               client_body_buffer_size 128k;

               proxy_connect_timeout 90;
               proxy_send_timeout 90;
               proxy_read_timeout 90;

               proxy_buffer_size 4k;
               proxy_buffers 4 32k;
               proxy_busy_buffers_size 64k;
               proxy_temp_file_write_size 64k;

               gzip on;
               gzip_min_length 1100;
               gzip_buffers 64 8k;
               gzip_comp_level 3;
               gzip_http_version 1.1;
               gzip_proxied any;
               gzip_types text/plain application/xml application/x-javascript text/css;

       }

       # Static files location
       location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
           access_log   off;
           expires      30d;

           root /home/httpd/forum.com/htdocs;
       }
}


}

 

Будут ли какие-нибудь замечания/предложения по конфигу ?) Очень хотелось бы услышать)

Ссылка на комментарий
Поделиться на других сайтах

да вопрос не вопрос - выпилить кеш постов из mysql в кешер

я так пилил данные по категориям галереи, ибо галерея на

Общий размер загруженных изображений: 3611,08 MB

Общее число просмотров изображений: 5425484

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

Каким образом ? :)

Это на несколько страниц писанины, как любит говорить Ритцука. И ещё разбираться надо будет.

 

Судя по всему на сервер БД самая большая нагрузка

Нужно смотреть, от запросов каких страниц такая нагрузка. Даже если вынести посты в мемкеш, останутся ещё запросы из поиска. Проверьте, может быть стоит его оптимизировать, например поставить Sphinx.

 

Кстати, провёл тесты ad после установки и конфигурирования nginx'а. Значение Requests Per Second меньше, чем при использовании "чистого" Apache.

Какие числа до и после?

 

Будут ли какие-нибудь замечания/предложения по конфигу ?) Очень хотелось бы услышать)

Если бы не замена расширений для некоторых типов прикреплённых файлов, я бы для нагруженного форума отдавал их тоже фронтэндом. Если конечно это возможно для вас.

Ссылка на комментарий
Поделиться на других сайтах

может быть стоит его оптимизировать, например поставить Sphinx.

Sphinx уже поставил

 

Какие числа до и после?

Апач: Requests per second: 3.51 [#/sec] (mean)

Апач+нгинс: Requests per second: 3.29 [#/sec] (mean)

 

Разница на самом деле не большая, но факт фактом)

Тестирование проводилось: ad -n1000

 

 

Если бы не замена расширений для некоторых типов прикреплённых файлов, я бы для нагруженного форума отдавал их тоже фронтэндом. Если конечно это возможно для вас.

Вы имеете ввиду отдавать nginx'ом всё, что в /uploads/ ?

Ссылка на комментарий
Поделиться на других сайтах

location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {

css и js тут зря - не дают работать minify.

 

Если бы не замена расширений для некоторых типов прикреплённых файлов, я бы для нагруженного форума отдавал их тоже фронтэндом.

Это как раз просто. Подправить всего по одной функции в двух классах (аттачи и эскизы) и использовать X-Accel-Redirect в папку uploads.

 

да вопрос не вопрос - выпилить кеш постов из mysql в кешер

Так ли оно нужно?.. При правильной настройке MySQL проблем и так не будет)

 

В целом, если под нагрузкой время генерации страницы темы в среднем упало ниже 0,2 - сколько не бейтесь - более заметных улучшений уже не будет, проверено :)

Ссылка на комментарий
Поделиться на других сайтах

css и js тут зря - не дают работать minify.

Вы имеете ввиду настройку сжатия css/js в IPB ? А каким образом это работает в IPB? Просто удаление пробелов и т.п. в файлах?

Дело в том, что в nginx для сервера я установил:

 

 

                gzip on;
...
               gzip_types text/plain application/xml application/x-javascript text/css;

 

IPB делает что-то другое ?

 

 

Это как раз просто. Подправить всего по одной функции в двух классах (аттачи и эскизы) и использовать X-Accel-Redirect в папку uploads.

А можно подробнее, пожалуйста, что и где править надо?)

 

 

Так ли оно нужно?.. При правильной настройке MySQL проблем и так не будет)

Что имеется ввиду под правильной настройкой MySQL ? Было бы замечательно с конкретными примерами)

Ссылка на комментарий
Поделиться на других сайтах

IPB делает что-то другое ?

Собирает все js-файлы в один, все css-файлы во второй, и сжимает их. Уменьшается число запросов за отдельными файлами.

 

Конфу и правки пока не могу - времени нет)

Ссылка на комментарий
Поделиться на других сайтах

Конфу и правки пока не могу - времени нет)

я подожду - у меня вся ночь впереди)

 

css/js из конфига nginx придётся наверное убрать.

Ссылка на комментарий
Поделиться на других сайтах

надо не делать выдачу файлов сейчас, а смотреть узкие места

включить режим отладки и смотреть время выполнения каждого запроса на каждой странице

Ссылка на комментарий
Поделиться на других сайтах

N3rdMaster, форум очень-очень большой, а сервер слабый? Или просто напало настроение все-все-все сделать идеально?))

 

Это я к тому, что почти все необходимое и достаточное для работы достаточно нагруженных форумов вами уже сделано, а дальше уже идет в большей степени задротство "для души", нежели реальное видимое пользователем ускорение работы. Как раз недавно хорошая статья по этой теме на хабре была :)

Ссылка на комментарий
Поделиться на других сайтах

Это как раз просто. Подправить всего по одной функции в двух классах (аттачи и эскизы) и использовать X-Accel-Redirect в папку uploads.

 

Я лишь говорил, что придётся лезть в код, не более. Мне пока сложно сказать, каков уровень ТС.

 

Апач: Requests per second: 3.51 [#/sec] (mean)

Апач+нгинс: Requests per second: 3.29 [#/sec] (mean)

Тестирование проводилось: ad -n1000

 

Имеется в виду apache bench с опечаткой? Ну а что, нормальный результат. У меня затюненный немного 2.3 выдаёт 10 в секунду на главной. У вас, кстати, какая страница нагружалась?

 

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

 

+1. При этом всего лишь достигли скорость 2.3 с кешем :-)

 

надо не делать выдачу файлов сейчас, а смотреть узкие места

включить режим отладки и смотреть время выполнения каждого запроса на каждой странице

 

Вот-вот, на днях на Хабре был стёб на эту тему.

Ссылка на комментарий
Поделиться на других сайтах

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

N3rdMaster, форум очень-очень большой, а сервер слабый? Или просто напало настроение все-все-все сделать идеально?))

 

Это я к тому, что почти все необходимое и достаточное для работы достаточно нагруженных форумов вами уже сделано, а дальше уже идет в большей степени задротство "для души", нежели реальное видимое пользователем ускорение работы. Как раз недавно хорошая статья по этой теме на хабре была :)

Форум очень-очень-очень большой :) Сервер нормальный, но всё равно лоад бывает зашкаливает до 15 и выше.

 

Подскажите плз, какие предложения будут по оптимизации MySQL ? Её вообще не трогал

Ссылка на комментарий
Поделиться на других сайтах

собирать статистику

и не только конкретно по mysql

по местам в коде, которые ворочают огромными объемами памяти, например, тоже

ипс любят иногда (см пример с определением поискового бота) проходить неоправданно один и тот же массив полностью два раза подряд

 

пример - http://forum.sysman.ru/index.php?showtopic=14330&view=findpost&p=164968

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

Всем привет,

 

Давно не писал, но были причины)

Настроил работу форума по схеме nginx+php-fcgi+eaccelerator. Работает намного быстрее. Сейчас заинтересовался работой nginx'а с несколькими backend серверами (физическими), где nginx используется в качестве балансировщика нагрузки. Может кто-нибудь настраивал подобную схему ? Дело в том, что я пока остановился на стадии экспериментов. После настройки подобной схемы всё работает, но очень медленно. Страница по запросу генерируется секунд 5-10 (если работает backend сервер). Проблемы связываю уже с настройкой непосредственно сетевого взаимодействия между серверами.

Ссылка на комментарий
Поделиться на других сайтах

значит нгинкс на одной машине, а бекенд на другой? зачем так сложно?

между машинами должен быть не просто водопроводный, канализационный канал

ну и генерация страницы на пхп это проблема пхп, тоесть бекенда

Ссылка на комментарий
Поделиться на других сайтах

А напрямую baсkend как быстро страницы отдаёт? Да, сеть лучше гигабитную...
Ссылка на комментарий
Поделиться на других сайтах

значит нгинкс на одной машине, а бекенд на другой? зачем так сложно?

между машинами должен быть не просто водопроводный, канализационный канал

ну и генерация страницы на пхп это проблема пхп, тоесть бекенда

Да там проблема не только в генерации пхп, проблема ещё в MySQL - он тоже на отдельном сервере. Вот и получаются респонсы по 10 секунд.

 

А напрямую baсkend как быстро страницы отдаёт? Да, сеть лучше гигабитную...

Думаете гигабитная сеть решит все проблемы ?)

 

У меня вопрос такой насчёт производительности: сколько примерно на этом форуме одновременно онлайн бывает, какая при этом нагрузка на сервере и какая примерно конфигурация сервера ? :)

 

Спасибо.

Ссылка на комментарий
Поделиться на других сайтах

У меня вопрос такой насчёт производительности: сколько примерно на этом форуме одновременно онлайн бывает, какая при этом нагрузка на сервере и какая примерно конфигурация сервера ?

Это не ко мне вопрос :-) Vitaly или GiV знают.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.