Drupal 5: скорость
С выпуском Drupal 5, вы могли бы задаться вопросом, какая версия Drupal быстрее — последний выпуск в линейке Drupal 4.7 или новый Drupal 5?
Тестовые настройки
Я установил Drupal 4.7 на сайт с 2 000 пользователями, 5 000 документами, 5 000 альтернативными адресами этих документов, 10 000 комментариями и 250 терминами в более чем 15 словарях.
Потом я настроил главную страницу так, чтобы на неё выводилось 10 документов, включил несколько блоков в левой и правой колонках, добавил несколько ссылок в Primary links и добавил форму поиска наверх страницы. Я также сделал страницу контактов используя стандартный модуль Contact. Иллюстрация ниже показывает как была настроена моя главная страница.
Кроме того я сделал точную копию сайта на Drupal 4.7 и обновил его до последнего выпуска Drupal 5. Результат — два идентичных сайта; один на Drupal 4.7, другой на Drupal 5.
Тесты проводились на 3-х летнем Pentium IV 3Ghz с 2 Гб памяти и установленной ОС Gentoo Linux. Я использовал архитектуру по умолчанию со следующими программами: Apache 2.0.58, PHP 5.1.6 с APC и MySQL 5.0.26. Были сделаны только самые необходимые настройки. Мой тест ограничивала только вычислительная мощностью процессора, а не скорость каких-либо устройств или действий.
Чтобы определить, сколько запросов в секунду может обслуживать такая конфигурация, использовалась инструкция ab из Apache 2.x с 20 одновременно выполняющими запрос клиентами.
Кеширование страниц в Drupal
Drupal имеет механизм кеширования страниц, который хранит динамически сгенерированные страницы в базе данных. Кешируя страницы, Drupal не должен генерировать заново эти страницы при каждом их запросе. Кешируются только страницы к которым обращаются анонимные пользователи (пользователи, которые не вошли в свой аккаунт). Как только пользователь вошёл в аккаунт, кеширование для него прекращается, так как страницы индивидуализированы различными способами. На некоторых сайтах, таких, как этот блог, все кроме меня — анонимные посетители, однако на других сайтах может быть разное соотношение анонимных и вошедших в аккаунты пользователей.
Представляя тестовые результаты, я разделил результаты для кешируемых страниц и некешируемых страниц. Такое разделение позволит вам прикинуть результаты для своих сайтов на Drupal.
Кроме того, Drupal 5 имеет два режима кеширования: нормальное и агрессивное. Нормальный режим кеширования подходит для всех сайтов и не вызывает никаких побочных эффектов. Агрессивный режим кеширования приводит к дополнительному ускорению загрузки страницы, но может быть причиной нежелательных побочных эффектов если вы пропустите загрузку элементов модулей, которые не должны быть пропущены.
Drupal также может кешировать файлы с помощью дополнительных модулей, такое кеширование должно превзойти по эффективности стандартное агрессивное кеширование. Но я не использовал для своего теста дополнительные модули работающие с кешем.
Результат

Количество страниц обрабатываемых в секунду. Чем выше график, тем лучше
Иллюстрация выше показывает, что генерирование страниц в Drupal 5 на 3% медленнее чем в Drupal 4.7. Однако, когда запрашивается кешируемая страница при включённым нормальным режиме кеширования, Drupal 5 на 73% быстрее чем Drupal 4.7 и на 268% быстрее когда включено агрессивное кеширование.
Что это значит для сайтов на Drupal 5? Эффективность использования кеширования страниц в Drupal зависит от множества параметров — времени хранения кеша, количества вошедших в свой аккаунт посетителей, установок прав доступа и так далее. Для сравнения разных конфигураций Drupal, мы изменили настройки Drupal 4.7 и Drupal 5, таким образом, чтобы мы могли смотреть на работу для диапазона неудачных обращений к кешу страниц.

Относительное сравнение работы Drupal 5 в режиме нормального кеширования в сравнении с кешированием в Drupal 4.7. Ошибки 0% означают, что все запросы страниц приводят к удачному обращению к кешу и что из кеша можно получить все страницы. Ошибки 100%, что все запросы страниц приводят к неудачному обращению к кешу и мы должны генерировать все страницы заново.
Иллюстрация выше показывает улучшение работы Drupal 5 по сравнению с Drupal 4.7. Мы видим, что сайты на Drupal с малым количеством неудачных обращений к кешу (типичные статические сайты на Drupal, к которым обращаются анонимные посетители) будут значительно быстрее на Drupal 5. Однако, сайты на Drupal где больше чем 1 из запросов на 2 страницы приводит к неудачному обращению к кешу (типичные динамические сайты на Drupal с большим количеством вошедших в аккаунты пользователей) будут немного медленнее по сравнению с точно таким же сайтом на Drupal 4.7.
Мне эти графики говорят, что для большинства сайтов на Drupal, обновление до Drupal 5 приведёт по крайней мере к небольшому ускорению работы — особенно, если вы должным образом сделаете настройки времени хранения кеша страниц. Кроме того они показывают, что для Drupal 6, нам надо смотреть на улучшение времени генерирования страниц, когда кеширование отключено. Давайте это обсудим.
Несколько комментариев к статье
7 февраля 2007 — 19:25. 2bits — Khalid:
Вот три основных дополнительных модуля работающих с кешем:
Первые два работают со стандартной установкой Drupal. Последний с модернизированным API, с одним модулем, использующем его (модуль Panels).
7 февраля 2007 — 19:43. ted:
Дрис, превосходная работа!
Однако, эти результаты немного вводят в заблуждение. В то время как они показывают что Drupal обрабатывает страницы немного медленнее, они не говорят ничего о том, как быстро страница отобразится в браузере пользователя.
Количество файлов, браузер и кеширование на прокси-сервере, все связанные действия затрагивают пользователя и скорость, с которой он просматривает сайт на Drupal.
Так, в то время как могло бы быть на 3% медленнее запрос страницы в 5-ой версии, я буду утверждать, что страницы фактически открываются быстрее (например, загружаются быстрее) из-за таких вещей как препроцессор CSS и mod_expires cashing, это лишь немногое из того, что можно сказать.
7 февраля 2007 — 21:27. Dries:
Ты прав Тед. Этот тест не даёт полной картины и не учитывает некоторые важные элементы внесённые в Drupal 5. Через несколько недель (как найду время), я попробую провести новый тест с более обширными/точными настройками — возможно основанный на Apache JMeter. Посмеёмся! :)
8 февраля 2007 — 01:58. Том:
Я отложил обновление, но это успокаивает одно из моих опасений (что D5 был бы медленнее).
Я хотел бы увидеть такой тест:
- CCK против родных типов документов
- Views включен/выключен
- Statistics включен/выключен
Материал как этот. Если у тебя есть время, чтобы сделать какое-нибудь эталонное тестирование такого типа, я хотел бы видеть результат! Я люблю компанию Views/CCK/Contemplate — очень мощная комбинация. Перефразируя Стэна Ли из комикса Spider Man, «с хорошой системой мы должны иметь хорошую нагрузку на сервер». Я всегда любопытен, но насколько возросла нагрузка.
8 февраля 2007 — 07:19. Луис:
Я думаю, что эти различия являются зверскими. Я не знаю, хороши ли статистические данные, но иначе я должен сказать, что люди занимающиеся разработкой Drupal очень хороши. Я очень рад, что использую эту систему.
8 февраля 2007 — 08:15. Антонио Ортиз:
Я не был уверен относительно Drupal 5, но теперь я с ним.
8 февраля 2007 — 14:47. bhaskar:
Ты пробовал также включать опцию «aggregate and compress CSS» в Drupal 5? Это должно дать двукратные выгоды, (a) это сохраняет пропускную способность и (b) это позволяет Drupal обрабатывать большее количество запросов в секунду.
Я очень интересовался бы статистикой пропускной способности для Drupal 4.7 и 5.0.
Спасибо за хорошую работу.
9 февраля 2007 — 16:45. Крис Джонсон:
Я предпочел бы видеть тесты, которые ближе к тем настройкам, которые большинство людей видит в планах хостеров, скорее всего, что большинство сайтов на Drupal упадут.
Могло бы потребоваться некоторое исследование, чтобы получить точную картину относительно того, на что могли бы быть похожи средние настройки. Но мой опыт говорит, что большинство хостеров ещё не используют MySQL 5 и PHP 5, а также APC.
Таким образом, мне любопытно, как этот же самый тест смотрится с MySQL 4.1 и PHP 4.3.10. На первый взгляд, это похоже на результат, который был бы подобным. Но возможно нет.
Я действительно рад видеть данные по работе кеша. Некоторые сайты, которые я делаю, имеют большинство трафика, сгенерированного анонимными посетителями. Другие сайты, с которыми я имею дело, имеют 100% вошедших в аккаунты посетителей; анонимные пользователи на них могут только видеть страницу входа в аккаунт. Похоже, что нам, вероятно, придётся оптимизировать наши сервисные стеки, когда мы попробуем переместить этих людей на D5.


