Кэширование динамического контента с помощью Nginx и Memcached

Кэширование статического контента идея давно не новая и широко применяется на большинстве веб-серверов. Всем известно, что при использовании Nginx в качестве frontend для Apache-сервера, существенно повышается производительность системы за счет упрощения отдачи статического контента (графика, java-скрипты, таблицы стилей и т.п.). Данная модель реализации кэширования на сегодняшний день является классической для большинства веб-серверов. Она позволяет повысить число пользователей веб ресурса и снизить нагрузку на сервер.

По мимо нагрузки от статического контента на сервере генерируется много динамического контента, что в свою очередь нагружает сервер куда больше статики. Что же можно сделать с динамическим контентом, генерируемым например PHP-скриптами? Конечно же можно произвести тюнинг параметров веб-сервера и добиться снижения потребления ресурсов системы скриптами, но данный способ не исключает обращение к скриптам. Изучив эту проблему, специалисты компании DS-Support применили кеширование динамических страниц в memcached, с последующей отдачей их через Nginx.

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

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

Исходные данные:

  • структура сайта: каталог с разветвленным деревом категорий;
  • сайт предварительно подвергнут SEO-оптимизации (подавляющее большинство URL выглядит подобным образом: /category-name/page-name-number.html или /category-name/);
  • генерация контента выполняется apache-2.x/PHP-5.2;
  • особенность движка сайта: генерация контента инициализируется сриптом /index.php?var1=1&var2=2...;
  • Nginx уже настроен на отдачу статического контента;

Окончательно схема решения выглядит следующим образом:

Схема динамического кэширования Nginx с memcashed

Алгоритм работы:

  1. Nginx проверяет наличие в кеше запрошенной страницы (html);
    • если страница присутствует в кеше - выдает ее клиенту;
    • если отсутствует - запрос передается к Apache;
  2. Apache генерирует страницу и:
    • помещает ее в кеш;
    • возвращает ее Nginx.
Фрагмент настройки Nginx:
location / {
  default_type            text/html;
  set $memcached_key      "$server_name:$request_uri";
  memcached_pass          127.0.0.1:11211;
  error_page              404 502 504 = @fallback;
}

Результат:

Анализ работы сервера после применения метода кеширования показал:

  • снижение LA (средней нагрузки) сервера c 90-150% до 40-60%, что в два и более раз ниже исходных
  • увеличение количества обрабатываемых запросов nginx (в секунду) с 400 до 700 и более, в два раза больше запросов к серверу;
  • снижение обрабатываемых запросов apache (в секунду) с 70 до 40;
  • снижение объема оперативной памяти, занятой Apache c 2 до 0,8..1,0 Гб;

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


Контакты
Найти