N3rdMaster Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Привет, Настроил 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->identifierKEY - $keyVALUE - $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, зная только урл страницы форума ? Может кто-нибудь сталкивался с подобной проблемой или кому-нибудь интересно будет Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 IPB хранит в кэше различные служебные массивы данных, а вовсе не сгенерированные страницы. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 А как кэшируются страницы ? или они не кэшируются вообще ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Никак, да. Кешируются отрендеренные посты и метаданные. Кстати, совершенно непонятно, как вы собираетесь в своём варианте отслеживать обновление страниц скриптом форума в кеше при изменении, если обращаться к нему не будете. Какая у вас нагрузка, что требуется такое жёсткое кеширование? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Скорее, топикстартер не очень понимает, что такое Memcached, и что такое вообще кэширование в контексте веб-разработки... Тема на форуме:- это динамическая шапка с данными конкретного пользователя - его логином, новыми уведомлениями и личными сообщениями,- это набор элементов управления, различный в зависимости от прав обратившегося за страницей пользователя,- это набор собственно постов, собранный исходя из прав доступа пользователя. В IPB кешируется только последнее, и кэш при этом хранится в MySQL, а не во внешних хранилищах. Во внешний кэш (н/р, Memcached) отправляются "системные кэши" (соответвствующий пункт в АЦ на главной) - наборы смайликов, возможных тегов, общие настройки форума, некоторые статистические данные & etc, которые используются постоянно и одинаковы для всех пользователей форума. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 > В IPB кешируется только последнее, и кэш при этом хранится в MySQL, а не во внешних хранилищах.Вроде бы шла речь о том, чтобы можно было переность кеш сообщений во внешнее хранилище?Хотя если нет, можно и самостоятельно реализовать. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 Никак, да. Кешируются отрендеренные посты и метаданные. Кстати, совершенно непонятно, как вы собираетесь в своём варианте отслеживать обновление страниц скриптом форума в кеше при изменении, если обращаться к нему не будете. Какая у вас нагрузка, что требуется такое жёсткое кеширование?в пики посещаемости (что бывает довольно часто), лоад на сервере превышает 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; } } } Будут ли какие-нибудь замечания/предложения по конфигу ?) Очень хотелось бы услышать) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 да вопрос не вопрос - выпилить кеш постов из mysql в кешеря так пилил данные по категориям галереи, ибо галерея на Общий размер загруженных изображений: 3611,08 MBОбщее число просмотров изображений: 5425484есть зло, когда еще тумбнейлы каждый раз новые при обновлении страницы, причем соответствующие своим разделам другое дело - автор хочет вынести в кеш весь контент страницы, что вообще дикая ересь в контексте форума, причин могу найти больше 2, и по всем можно написать развернутый рассказ, почему так делать нельзя Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Каким образом ? Это на несколько страниц писанины, как любит говорить Ритцука. И ещё разбираться надо будет. Судя по всему на сервер БД самая большая нагрузкаНужно смотреть, от запросов каких страниц такая нагрузка. Даже если вынести посты в мемкеш, останутся ещё запросы из поиска. Проверьте, может быть стоит его оптимизировать, например поставить Sphinx. Кстати, провёл тесты ad после установки и конфигурирования nginx'а. Значение Requests Per Second меньше, чем при использовании "чистого" Apache.Какие числа до и после? Будут ли какие-нибудь замечания/предложения по конфигу ?) Очень хотелось бы услышать) Если бы не замена расширений для некоторых типов прикреплённых файлов, я бы для нагруженного форума отдавал их тоже фронтэндом. Если конечно это возможно для вас. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 может быть стоит его оптимизировать, например поставить Sphinx.Sphinx уже поставил Какие числа до и после?Апач: Requests per second: 3.51 [#/sec] (mean)Апач+нгинс: Requests per second: 3.29 [#/sec] (mean) Разница на самом деле не большая, но факт фактом)Тестирование проводилось: ad -n1000 Если бы не замена расширений для некоторых типов прикреплённых файлов, я бы для нагруженного форума отдавал их тоже фронтэндом. Если конечно это возможно для вас.Вы имеете ввиду отдавать nginx'ом всё, что в /uploads/ ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 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 - сколько не бейтесь - более заметных улучшений уже не будет, проверено Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 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 ? Было бы замечательно с конкретными примерами) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 IPB делает что-то другое ?Собирает все js-файлы в один, все css-файлы во второй, и сжимает их. Уменьшается число запросов за отдельными файлами. Конфу и правки пока не могу - времени нет) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 20 Октября 2010 Автор Жалоба Поделиться Опубликовано 20 Октября 2010 Конфу и правки пока не могу - времени нет)я подожду - у меня вся ночь впереди) css/js из конфига nginx придётся наверное убрать. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 надо не делать выдачу файлов сейчас, а смотреть узкие меставключить режим отладки и смотреть время выполнения каждого запроса на каждой странице Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Ritsuka Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 N3rdMaster, форум очень-очень большой, а сервер слабый? Или просто напало настроение все-все-все сделать идеально?)) Это я к тому, что почти все необходимое и достаточное для работы достаточно нагруженных форумов вами уже сделано, а дальше уже идет в большей степени задротство "для души", нежели реальное видимое пользователем ускорение работы. Как раз недавно хорошая статья по этой теме на хабре была Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 Это как раз просто. Подправить всего по одной функции в двух классах (аттачи и эскизы) и использовать 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 с кешем :-) надо не делать выдачу файлов сейчас, а смотреть узкие меставключить режим отладки и смотреть время выполнения каждого запроса на каждой странице Вот-вот, на днях на Хабре был стёб на эту тему. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 20 Октября 2010 Жалоба Поделиться Опубликовано 20 Октября 2010 кстати стеб он может и стеб, но автор стеба тоже тот еще идиот, когда у тебя нет никакой другой информации, кроме того,что ты можешь получить по временным характеристикам, и, пользуясь неоднократным подсчетом статистики, конкретным проблемным запросам, интересно, что ты будешь оптимизировать?хм, наверно, прочитав статью на хабре, наймешь _очень_большое_количество_ человек, которые будут тестировать, составлять документацию, и придут все к тому-же выводу, что надо оптимизировать этот гребаный запрос?а после оптимизации этого запроса страница _действительно_ будет быстро открываться у всех пользователей, эти _очень_большое_количество_ человек скажут - вот видите, наша работа Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 21 Октября 2010 Автор Жалоба Поделиться Опубликовано 21 Октября 2010 N3rdMaster, форум очень-очень большой, а сервер слабый? Или просто напало настроение все-все-все сделать идеально?)) Это я к тому, что почти все необходимое и достаточное для работы достаточно нагруженных форумов вами уже сделано, а дальше уже идет в большей степени задротство "для души", нежели реальное видимое пользователем ускорение работы. Как раз недавно хорошая статья по этой теме на хабре была Форум очень-очень-очень большой Сервер нормальный, но всё равно лоад бывает зашкаливает до 15 и выше. Подскажите плз, какие предложения будут по оптимизации MySQL ? Её вообще не трогал Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 21 Октября 2010 Жалоба Поделиться Опубликовано 21 Октября 2010 собирать статистикуи не только конкретно по mysqlпо местам в коде, которые ворочают огромными объемами памяти, например, тожеипс любят иногда (см пример с определением поискового бота) проходить неоправданно один и тот же массив полностью два раза подряд пример - http://forum.sysman.ru/index.php?showtopic=14330&view=findpost&p=164968 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 6 Ноября 2010 Автор Жалоба Поделиться Опубликовано 6 Ноября 2010 Всем привет, Давно не писал, но были причины)Настроил работу форума по схеме nginx+php-fcgi+eaccelerator. Работает намного быстрее. Сейчас заинтересовался работой nginx'а с несколькими backend серверами (физическими), где nginx используется в качестве балансировщика нагрузки. Может кто-нибудь настраивал подобную схему ? Дело в том, что я пока остановился на стадии экспериментов. После настройки подобной схемы всё работает, но очень медленно. Страница по запросу генерируется секунд 5-10 (если работает backend сервер). Проблемы связываю уже с настройкой непосредственно сетевого взаимодействия между серверами. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 7 Ноября 2010 Жалоба Поделиться Опубликовано 7 Ноября 2010 значит нгинкс на одной машине, а бекенд на другой? зачем так сложно?между машинами должен быть не просто водопроводный, канализационный каналну и генерация страницы на пхп это проблема пхп, тоесть бекенда Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 7 Ноября 2010 Жалоба Поделиться Опубликовано 7 Ноября 2010 А напрямую baсkend как быстро страницы отдаёт? Да, сеть лучше гигабитную... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
N3rdMaster Опубликовано 8 Ноября 2010 Автор Жалоба Поделиться Опубликовано 8 Ноября 2010 значит нгинкс на одной машине, а бекенд на другой? зачем так сложно?между машинами должен быть не просто водопроводный, канализационный каналну и генерация страницы на пхп это проблема пхп, тоесть бекендаДа там проблема не только в генерации пхп, проблема ещё в MySQL - он тоже на отдельном сервере. Вот и получаются респонсы по 10 секунд. А напрямую baсkend как быстро страницы отдаёт? Да, сеть лучше гигабитную...Думаете гигабитная сеть решит все проблемы ?) У меня вопрос такой насчёт производительности: сколько примерно на этом форуме одновременно онлайн бывает, какая при этом нагрузка на сервере и какая примерно конфигурация сервера ? Спасибо. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 8 Ноября 2010 Жалоба Поделиться Опубликовано 8 Ноября 2010 У меня вопрос такой насчёт производительности: сколько примерно на этом форуме одновременно онлайн бывает, какая при этом нагрузка на сервере и какая примерно конфигурация сервера ?Это не ко мне вопрос :-) Vitaly или GiV знают. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.