WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache

Сравнение различных плагинов кэширования для WordPress

Для написано много кэширующих плагинов, предназначенных для борьбы со слабой производительностью сервера (либо кривыми руками администратора, который не в состоянии настроить PHP/MySQL). Простой пользователь зачастую задаётся вопросом: какой же из плагинов выбрать?

В данной статье я рассмотрю наиболее популярные плагины (, , и ), а затем расскажу о результатах жестокого теста, которому я подверг все эти плагины.

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

Поехали.

  1. WP Super Cache написан Donncha O’Caoimh, одним из разработчиков . Про своё отношение к этому плагину я уже писал. Плагин разрабатывался как замена WP-Cache. Ключевой особенностью плагина является генерация статических HTML-страниц таким образом, что они будут отдаваться Web-сервером — минуя PHP.
  2. Hyper Cache. С ним я тоже сталкивался, и какое-то время плагин стоял у меня на сайте. Плагин написан гораздо проще, чем и имеет более высокий рейтинг на .org.
  3. W3 Total Cache — новое слово в кэшировании. Поддерживает сжатие скриптов, CSS, кэш для базы данных, работу с CDN и многое другое.
  4. MaxSite Cache — отечественная разработка, при этом платная. Я тестировал Lite-версию, так как покупать полную версию чисто для тестирования желания нет. По словам автора, выйдет абсолютным победителем при сравнении с и компанией.

Для теста была взята машина такое конфигурации: Intel(R) Xeon(R) CPU X3320 @ 2.50GHz, 4 ядра, 3 MiB кэш, 8 GiB DDR-2 RAM, 2×500 GB SATA, RAID1 (ARC-1210 4-Port PCI-Express to SATA RAID Controller), 82572EI Gigabit Ethernet Controller.
Операционная система: Ubuntu 9.10 64-bit Server Edition
Веб-сервер: nginx 0.8.19
PHP: 5.2.10.dfsg.1-2ubuntu6.1 (FastCGI) + xCache 1.2.2-5, 75 процессов.

На тестируемой странице 25 несложных запросов, время их выполнения — 0.00993 сек.

На сайт натравливался ApacheBench — 10,000 запросов в 100…500 потоков. Это создаёт весьма приличную нагрузку, так как запросы идут один за другим.

Базовая  — 100 параллельных потоков. Я увеличивал количество потоков до тех пор, пока web-сервер не стал отдавать ответ, отличный от 200. Более 500 потоков не тестировал.

   0.9.7  2.6.2 Lite  0.8
Количество потоков 100 100 500 100 250 100 500 130 100 130
Время тестирования, с 677.442 1.115 1.079 18.736 8.633 3.291 2.501 2.992 21.284 21.086
Количество ошибок 0 0 0 0 3663 0 2713 0 0 0
Скорость, запрос/с 14.76 8967.28 9268.36 544.20 1158.30 3038.98 3997.80 3341.72 469.84 474.25
Среднее время обработки запроса, мс 6774.423 11.152 53.947 183.757 215.833 32.906 125.069 38.902 212.838 274.116
Среднее время обработки запроса по всем потокам, мс 67.744 0.112 0.108 1.838 0.863 0.329 0.250 0.299 2.128 2.109
Скорость передачи, Кбайт/с 175.12 106154.90 109865.55 6393.68 8754.04 35537.15 34413.87 39075.95 4928.74 4974.58
Порог завершения 95% запросов, мс 9188 11 27 394 268 52 91 58 344 364

То, что не вошло в таблицу: средняя загрузка системы (load average) при тесте голого зашкаливала за 60. При тесте и я не успевал ее измерить (была ничтожной). С и загрузка доходила до где-то 10. Так что кэширование работает и выполняет свою работу — снижает нагрузку на сервер.

«Голый» тестировать более, чем со 100 потоками смысла нет :-)

В ходе тестирования выяснился абсолютный лидер — . Скорость отдачи кэшированных страниц поистине фантастическая — почти 800 мегабит/сек. Хотя такая скорость — это больше заслуга nginx.

Lite на 100 параллельных потоках проиграл практически в пять раз! Причина понятна: создает статические файлы так, что web-сервер их может отдавать клиенту без привлечения PHP-интерпретатора. А статические запросы при прочих равных всегда быстрее динамических. Так что платить 30 WMZ за полную версию я пока не готов :-)

Среди остальных плагинов выигрывает благодаря свой простоте: минимум проверок, никаких регулярных выражений и лишних подключаемых файлов. Но даже такой подход не спасёт от хорошего SlashDot-эффекта: какой-то процент пользователей будет видеть ошибку сервера, для других возрастёт время генерации страницы. Это касается и остальных плагинов. Мораль: подключение PHP-интерпретатора — дорогое удовольствие.

По поводу масштабируемости: более 130 потоков не пережил ни один кэш (кроме ).

Аутсайдером, на мой взгляд, оказался  — при почти одинаковой с нагрузкой на сервер, время отдачи страниц было значительно выше. Хотя если бы тест был не таким искусственным, то могла быть и более высокой. Хотя во многом делает то, что опытный системный администратор может настроить на уровне сервера.

Вообще плагины кэширования обладают очень интересной особенностью: они переносят нагрузку с одной подсистемы (процессор) на другую (диск). Так что на десктопном железе, слабых дисках или виртуальных серверах кэш может ухудшить ситуацию: процессор будет тратить время не на выполнение кода, а на ожидание завершения ввода/вывода (iowait). Так что при большом количестве оперативной памяти имеет смысл создавать RAM-диск и помещать кэш на него.

Кстати, даже при хорошей дисковой подсистеме, но при малом объеме оперативной памяти при большом объеме кэша могут возникать проблемы: например, если дисковый кэш у операционной системы мал, то при интенсивном равномерном обращении к разным страницам может возникнуть большая дисковая активность.

Вообще, как показывает мой опыт, прежде чем использовать плагин кэширования страниц, имеет смысл все же грамотно настроить сервер (обращайтесь). Например, если вместо Apache поставить nginx, можно освободить довольно много драгоценной памяти (prefork у Apache — это весьма сильный убийца производительности); если увеличить размер буфера ключей MySQL, можно добиться уменьшения дисковой активности. Если поставить opcode cacher (APC, xCache, eAccelerator), то можно значительно снизить затраты на перекомпиляцию PHP-кода и уменьшить время отклика системы. Если использовать оптимизатор, встроенный в eAccelerator, то можно повысить производительность PHP-кода. Анализ производительности MySQL-запросов и знание принципов работы оптимизатора помогут переписать слабые запросы/добавить отсутствующие индексы в базу данных. Простор для действий довольно-таки большой. И динамика страниц остаётся :-)

Добавить в закладки

Связанные записи

Автор: Vladimir; опубликовано в: WordPress; метки: Hyper Cache, MaxSite Cache, W3 Total Cache, WordPress, WP Super Cache, нагрузка, производительность
6
Ноя
2009

RSS Комментарии к статье «WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache» (43)  »

  1. Супер. Спасибо большое. А то я давно задаюсь вопросом, а что же лучше из этих плагинов. Сам я изначально использовал WP Super Cache, значит и отказываться от него нет смысла.

Оставить комментарий к записи «WP Super Cache vs HyperCache vs W3 Total Cache vs MaxSite Cache»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Изображения должны быть включены!

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя