Приветствую!
Решил поиграться у себя на виртуальной машине с Debian различными инструментами для оптимизации быстродействия работы сайтов. Использую связку Varnish + nginx + Apache. За основу взял статьи:
http://drupal-admin.ru/blog/оптимизация-drupal-настройка-nginx-front-end-к-apache
http://drupal-admin.ru/blog/кэширование-анонимных-запросов-в-drupal-7-установка-и-настройка-varnish
Всё понятно кроме одного момента, который хочу уточнить. В первой статье у nginx вот такой файлик с настройками хоста:
listen 80;
server_name drupal-admin.ru www.drupal-admin.ru;
root /home/webmaster/domains/drupal-admin.ru/html;
index index.html index.htm;
access_log /home/webmaster/domains/drupal-admin.ru/logs/nginx_access.log;
error_log /home/webmaster/domains/drupal-admin.ru/logs/nginx_error.log;
location / {
# Пробуем загрузить файл, если не получается то переходим на Apache
try_files $uri [user=drupal]drupal[/user];
}
# обработку php файлов тоже поручаем Apache
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location [user=drupal]drupal[/user] {
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
nginx смотрит: php-файл - отдаём его апачу, в противном случае проверяет физически наличие файла и если он есть - отдаёт так (статика), если нету - отдаёт апачу на обработку. Всё вполне понятно. Теперь я ставлю Varnish. Оставляю у него в конфигах стандартно порт 6081:
DAEMON_OPTS="-a :6081 \
В VCL backend у меня описан вот так:
.host = "127.0.0.1";
.port = "8080";
}
В итоге, как я понял, в nginx, в коде выше, я тупо меняю два упоминания порта 8080 на 6081? И тогда запрос уходит варнишу, он смотрит кэш: если есть что - отдаёт, нету - передаёт в backend апачу? По крайней мере, вроде, работает.
Решил уточнить у знающих людей, очень интересно разобраться с этим Спасибо!
P. S. Вдобавок играюсь тут ещё и с Memcached + APC. Сайт неистово летает Интересно, однако, если на итоговом проекте так и оставить всё: Varnish + Nginx + Apache + Mysql + PHP + Memcached + APC - не жирно будет? Пока ковыряю для интереса, прям затягивает
Комментарии
ИМХО много лишнего, я использую Nginx + PHP-FPM + APC + MariaDB.
а зачем php вообще дергать ,если можно анонимам варнишом отдавать сразу закешированные страницы
ну или nginx может брать из мемкеша
кто сказал что его нужно дергать? у nginx есть очень удобный файловый кеш который работает не хуже варниша.
из мемкеша брать смысла нету, все что часто читается с диска попадает в файловый кеш OS.
да. проблемы в этой связке начинаются, когда куки активно используются)
Спасибо всем за ответы, теперь хоть уверен в своих предположениях!
Наверное, вопрос выбора инструментов оптимизации всегда является холиварным
Ну хорошо, давайте пообщаемся, тема интересная
На счёт замены Apache на PHP-FPM читал, да. Стоит. MySQL -> MariaDB - тоже, раз она производительнее и прозрачно заменяет мускуль. В остальном у меня с Вами разница в том, что я поставил Varnish и Memcached. Напишу свои мысли по ним.
Varnish меня подкупил тем, что он кэширует php-файлы для анонимов и они не генерируются заново, и php действительно не дёргается по-новой. Но тут правильно выше заметил наш коллега выше про куки.
Когда у меня были только nginx + apache и я поставил Memcached - сайт стал летать на порядок быстрее. Прям это было заметно нереально сильно! А когда я добавил туда APC - ещё сильнее залетал. Прям вообще стало идеально.
Поэтому, как-то про Memcached не знаю даже... Спорить не буду, опыта у меня в этом деле совсем нет, но факт на лицо - сайт стал летать с ним.
Ещё опираюсь как-то на опыт коллег по приведённому в первом моём посте сайту. Например, вот в этой заметке:
http://drupal-admin.ru/blog/оптимизация-настроек-drupal-для-работы-с-memcached
они собрали Nginx + Apache + Mysql + PHP + Memcached + APC. Со мной различается только тем, что варниш не стоит. Где же, интересно, та самая грань, которую нужно уловить и не поставить лишнего? Не знаю, наверное это приходит со временем, когда нарабатывается опыт
Совместное использование nginx и varnish не имеет смысла
Можно подробнее? Почему и что лучше оставить из них? Опять же повторюсь - я не спорю, мне всё это интересно просто
nginx умеет делать ровно тоже что и варниш.
С теми настройками, что, например, в первом посте у меня или что-то ещё нужно?
одна из первых ссылок в гугле: http://habrahabr.ru/post/110958/ хоть и старая но актуальная.
Текст статьи звучит убедительно Спасибо!
А что на счёт Memcached? Наверное, всё же стоит использовать?
вы в мемкеше что храните? то что у вас лежало раньше в таблицах cache_*
Ровно тоже самое можно хранить и в памяти используя apc.
Memcached на самом деле нужен очень редко, например когда drupal на нескольких серверах крутится что бы можно было безболезненно горячий резерв поднять.
Ну да, кроме кэша форм.
А есть какие мануалы по настройке такого чуда?
в гугле точно есть.
Что-то не могу найти. Скорее всего, неправильно "спрашиваю". Не поможете?
первая же ссылка.
Зачем Вы мне даёте мануал на установку APC? Я его давным-давно поставил. Вопрос стоял по-другому:
Вот я и поинтересовался - как именно можно настроить APC, чтобы он выполнял функции Memcache?
несколькими комментами выше давал ссылку на модуль APC, вот инструкция от него: http://drupalcode.org/project/apc.git/blob_plain/refs/heads/7.x-1.x:/REA...
что еще вам рассказать? у меня есть опыт в хайлоад на drupal:
в пиках до 700 хостов в минуту, 70% заголенные пользователи. Работало все на одном сервере в указанном выше окруржении.
Вы издеваетесь? Я в первом посте написал, что прекрасно установил APC, он у меня прекрасно работает. Я Вам ещё раз выше это написал. Вы мне опять даёте по нему мануалы на установку.
Я совсем другое спрашиваю. APC и Memcache ведь немного разные вещи делают? Вы пишете, что первый может делать тоже самое, что и второй, потому Memcache можно убрать. Я спрашиваю: как настроить APC, чтобы он выполнял функции Memcache и скидывал в оперативку таблицы БД с кэшем друпала? Из коробки ведь он не делает этого. Иначе я не понимаю, зачем в куче заметок спецы пишут об использовании вместе APC + Memcache.
А Вашему опыту я доверяю, я с ним ни разу не спорил. Я просто интересуюсь этой всей тематикой, мне это просто интересно, хотел бы в будущем эти знания использовать на практике.
Я правильно понял, что это пункт
- Step 4 (OPTIONAL)
из инструкции к APC?
$conf['cache_default_class'] = 'DrupalAPCCache';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
ой как много букв, почитай внимательно что я написал:
Инструкцию на установку и того и другого я тебе дал что еще?
Правильно, потому что я спрашиваю одно, а вы пишете нечёткий ответ. Куча последних постов отпала бы, если бы вы сразу написали:
и сказали, что в тех инструкциях есть инфа, как настроить работу на обе ситуации. Чтобы я читал внимательно. Вот и всё.
А так спасибо, конечно.
Ещё одно наблюдение интересное в моих экспериментах. Я для виртуальной машины выделил специально 512 МБ, чтобы посмотреть - войду ли в такой лимит. И не вошёл по той причине, что поставил Apache Solr. Если бы он работал не на Java с Tomcat - было бы чудно вообще... А он жрёт памяти больше 100 метров! Не ожидал. И много памяти, соответственно, едят Apache и MySQL. От первого откажусь, раз можно заменить на PHP-FPM. Интересно, насколько это улучшит картину. MariaDB - тоже посмотрю что будет, если поменять. А сейчас при запуске машины метров 50 свободно. Как только начинаешь ходить по сайту - они сразу, конечно же, забиваются, и система начинает закидывать данные в swap.
О как, то есть это не ты затупил, а я неправильно объясняю?
Может хватит хамить, а?
Я тоже виноват, не отрицаю.
Давай по существу, "тоже виноват" подразумевает и мою вину в чем? Я просто делюсь с тобой совершенно безвозмездно своим опытом, а ты в ответ хамишь. Зачем мне это?
В том, что я задаю чёткий вопрос, а мне дают ответ "вокруг да около". Я прошу пояснить, как мэмкеш выкинуть и сделать, чтобы его функции выполнял apc, а ты мне даёшь ссылку в гугле "как установить apc". Я 2 раза написал - УЖЕ установил. Как правильно настроить его, чтобы выкинуть в память? Тогда ты уже дал инструкцию, я не всё внимательно там увидел, а ответ уже там есть. Потому и пишу - "тоже виноват".
Я выше поблагодарил, это во-первых. Во-вторых, тут все друг другу помогают, или мы на портале фриланс.ру?
Цитату моего хамства в студию, пожалуйста. Аж интересно - в каком месте я нахамил. Я выше писал исключительно с уважением и обращался на Вы, теперь я этого делать не буду, раз со мной так. На ровном месте, причём.
Лет может 5-7 назад я бы обязательно тебе попытался объяснял и доказать, а сейчас просто пойду заниматься своими делами.
Зачем что-то доказывать? Ты мне помог, за это спасибо. Проблема была в непонимании. Что ещё нужно-то? Моё хамство искать? Искать то, чего нет - задача непростая, я согласен.
drupby, Вам спасибо тоже! Я теперь догнал, да Невнимательность иногда бывает у меня
Попробуйте Jetty minimal(на сколько помню 64 метра для старта нужно, могу ошибаться), можно найти в коробке с солром, как раз подходит для систем с минимальными ресурсами, правда на дедиках обычно по фиг что там у Вас, jetty или tomcat, еще одна тема для холиваров.
Супер, значит есть вариант! Спасибо за совет!!! Нашёл даже чудную статью на эту тему:
http://www.wunderkraut.com/blog/power-up-drupal-search-with-jetty-apache...
Опробую на днях в работе Там в комментариях кто-то очень хорошо подметил:
Поделюсь опытом http://www.drupal.ru/node/103668
Респект, спасибо!!!
хосты в минуту считать это мощна!
Всегда реквесты считали
RxB, все вопросы к Яндекс.Метрике она так считает.