Степанов Виктор - сайт магистра


О некоторых методах кэширования в CMS и их эффективности

Введение

Отсутствие кэширование данных серьезная проблема большинства CMS. Кэширование позволяет заметно снизить нагрузку на сервер при работе CMS.

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

Типовых методов кэширования в CMS системах не существует. В данной статье я сделал попытку описать наиболее перспективные методы кэширования, а также вывести критерий эффективности кэширования по одному из методов.

Основные сведения о динамических сайтах.

Динамический сайт – сайт, информация на котором может динамически меняться в зависимости от состояния базы данных (БД) сайта. В настоящее время практически все крупные, посещаемые и информативные сайты являются динамическими. Эра динамических сайтов началась с появления серверного языка CGI-программирования Perl.

Типовой динамический сайт без кэширования имеет набор сценариев, написанных на серверном языке CGI-программирования, таком как Perl, PHP или ASP. Динамические сайты используют реляционные базы данных для хранения структуры и (или) данных опубликованных на сайте.

Обычно динамический сайт разделен на 2 части:

  • Интерфейс администрирования. Представляет собой набор сценариев и предназначен для обновления и настройки параметров сайта. Должен обеспечивать аутентификацию пользователей, удобный интерфейс для работы с БД сайта.
  • Публичная часть. Набор сценариев обеспечивающих вывод и форматирование информации из базы данных сайта. Эта часть должна обеспечивать сайту необходимую функциональность.


Основные сведения о CMS

CMS (Content Management System) – система, позволяющая создать сайт и управлять содержимым сайта, после его создания. CMS называют также системами конструирования сайтов, конструкторами сайтов, потому что они позволяют создавать сайты из некоторых стандартных динамических блоков. Эти блоки обычно называют модулями.

Модуль – сценарий или набор сценариев выполняющих некоторую определенную функцию. Модули обеспечивают требуемую функциональность сайта. Примеры модуля - лента новостей сайта, голосование.

Модули в CMS должны состоять из 3-х частей:

  • Публичный интерфейс. Используется для взаимодействия с посетителями сайта.
  • Интерфейс настройки модуля. С его помощью производится настройка параметров функциональности модуля, параметров вывода модуля на страницу.
  • Интерфейс администрирования модуля. С его помощью производится работа с информацией, выводимой модулем. Информация сохраняется в БД сайта.

Для вывода модулей на страницы сайта обычно используются шаблоны страниц. HTML-шаблоны страниц представляют собой html-коды страниц с указанием мест для вывода модулей. Большинство CMS предоставляют некоторое количество типовых шаблонов страниц, чтобы пользователь мог выбрать наиболее подходящий из них.

Основные сведения о кэшировании

Рассмотрим механизм работы Web-сервера, при запросе страницы динамического сайта:



  1. Запрос пользователя на получение страницы. Запрос HTML-страницы отправляется HTTP-серверу.
  2. Поскольку страница динамическая, то её нужно создать. Поэтому HTTP-сервер делает запрос к серверному языку CGI-программирования на генерацию страницы или частей страницы.
  3. Серверный язык программирования делает запрос к СУБД для выборки данных, представленных на странице.
  4. Серверный язык программирования получает ответ от СУБД и создает HTML-страницу.
  5. Передача HTTP-серверу сгенерированной html-страницы.
  6. Отдача страницы пользователю.

Суть кэширования состоит в том, чтобы избежать пунктов 2-5 при обращении пользователя к сайту. Для этого HTML-страница необходимая пользователю должна уже существовать при обращении. Тогда её не нужно будет генерировать и HTTP-сервер просто передаст её пользователю. Кэширование значительно увеличивает скорость отдачи страницы пользователю и соответственно снижает нагрузку на сервер.

Кэширование в CMS

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

Каждый модуль CMS характеризуется набором входных параметров, вводимых пользователем при посещении страницы. Например, при отображении гороскопа входными параметрами будет дата и знак зодиака. Каждый параметр характеризуется диапазоном допустимых значений. Этот диапазон определяется разработчиком модуля.

Выходными величинами модуля будут создаваемые им HTML-страницы. Причем при разном сочетании параметров модуля будут получаться разные HTML-страницы на выходе.



Количество создаваемых модулем HTML-страниц будет


, где ni – диапазон значений i-го параметра
m – количество параметров модуля

Определим некоторые методы кэширования модулей CMS:

  1. Кэширования всех страниц.
    Идея метода заключается в том, чтобы по множеству входных параметров и их диапазонам воссоздать множество всех HTML-страниц создаваемых модулем и сохранить. Далее при обращении пользователя к модулю CMS передавать ему сохраненную HTML-страницу. Если хотя бы один параметр модуля имеет бесконечное количество допустимых значений, то метод неприменим. Однако это ограничение можно обойти, путем выделения подмножества параметров имеющих конечное количество допустимых значений и кэширования результатов работы модуля на этих параметрах.
  2. Кэширование при обращении.
    При обращении пользователя к модулю сначала сохранить результат работы модуля в HTML-страницу, а затем передать пользователю сохраненную страницу. При повторном обращении с тем же диапазоном входных параметров передавать пользователю сохраненную HTML-страницу.

При кэшировании страниц возникают следующие проблемы:

  • Проблема перегенерации. При внесении изменений в базу данных сайта (а точнее в базу данных модуля), влияющих на представление информации модулем потребуется удалить все закэшированные HTML-страницы, поскольку информация на них станет неактуальной.
  • Проблема потери места. Сохранение результатов кэширования требует дополнительного места.

Критерий эффективности кэширования всех страниц

Определим критерий эффективности кэширования для метода кэширования всех страниц.

Пусть модуль CMS системы имеет m параметров, каждый из параметров имеет n допустимых значений.

Количество страниц модуля:



Эффект от кэширования составит:



, где t – среднее время генерации одной страницы модуля,
p - количество обращений к модулю за единицу времени (суточная посещаемость),
cвр – стоимость машинного времени сервера.

Затраты на кэширование составят:



, где T - время генерации всех страниц модуля,
Kген – количество изменений внесенных в БД модуля за день, которые привели к перегенерации страниц модуля,
cмест – плата за место на диске

Критерий эффективности:

если E > Z, то кэширование эффективно
иначе кэширование неэффективно

Применение критерия эффективности кэширования

Для применения критерия эффективности кэширования в CMS системах должен быть создан модуль, который будет собирать статистические данные t, p, T, Kген для всех модулей CMS.

Проводить проверку эффективности кэширования целесообразно в то время, когда сервер не загружен (например ночью), однако через равные промежутки времени. После проверки можно принимать решение о кэшировании того или иного модуля на следующий промежуток времени.

Copyright Stepanov Victor