SJ Object Cache: еще более быстрое объектное кэширование для WordPress

Делаем WordPress еще быстрее

После года тестирования наконец-то вышла первая стабильная версия плагина .

SJ Object Cache — альтернатива плагину , поддерживающая , , , Zend Disk Cache, Zend Shared Memory Cache, и .

В отличие от WP File Cache, SJ Object Cache ориентирован на VPS/VDS и выделенные сервера.

Одним из недостатков WP File Cache является то, что он смещает нагрузку с базы данных на файловую систему. Хотя это может быть не сильно критично для хорошего shared-хостинга, на виртуальных серверах и серверах со слабой дисковой подсистемой это может быть критично (виртуализация очень часто негативно сказывается на скорости ввода/вывода, в результате процессор может проводить много времени в ожидании окончания ввода/вывода). Вдобавок ко всему при включённом open_basedir файловые операции осуществляются медленнее из-за лишних проверок (привет всем, использующим Plesk).

Решением данной проблемы является использование разделяемой памяти (shared memory). Так как многие администраторы для повышения производительности ставят на выделенных серверах акселераторы (APC, xCache, eAccelerator), SJ Object Cache использует их интерфейс (API) для работы с выделенной памятью.

Функциональность SJ Object Cache

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

Кэширующие движки

  • Base Cache — аналог объектного кэша WordPress без возможности сохранения данных между сессиями; по тестам показывает чуть большую производительность, чем встроенный в WordPress кэш;
  • Alternative PHP Cache (APC);
  • eAccelerator (внимание: eAccelerator 0.9.6 не поддерживается, так как из него убрали функции кэширования пользовательских данных);
  • xCache
  • Zend Disk/Shared Memory Cache (данный движок не тестировался, но работать должен);
  • File Cache — модифицированная версия движка WP File Cache;
  • File Group Cache — модифицированная версия File Cache, оптимизированная под слабую дисковую подсистему (при доступе к кэшу читается сразу вся группа, что приводит к минимизации числа обращений к диску и увеличению объема потребляемой памяти);
  • Memcache;
  • Memcached;
  • Версия 1.2 плагина полностью совместима с WordPress 3.x (в том числе с 3.1).

Замечания по установке

Плагину при активации/сохранении настроек должен быть доступен на запись каталог wp-content: в него копируется файл object-cache.php.

В настройках акселератора (APC, eAccelerator, xCache) нужно отвести достаточно места под пользовательский кэш. WordPress весьма прожорлив!

Настройки, контролирующие размер кэша APC: apc.shm_segments, apc.shm_size.

Настройки, контролирующие размер кэша xCache: xcache.var_size. xCache — единственный из трёх рассматриваемых акселераторов, имеющий раздельные кэши для опкода и пользовательских данных.

Настройки, контролирующие размер кэша eAccelerator: eaccelerator.shm_size.

Для APC и eAccelerator размер кэша должен учитывать кэш опкода. По скромным подсчётам, WordPress 2.9.2 без плагинов (PHP 5.1.22, amd-64) занимает порядка десяти мегабайт. Для настройки размера кэша очень рекомендую воспользоваться утилитами, входящими в дистрибутив акселератора: они позволяют оценить объем занятой памяти, фрагментации кэша и просматривать различную статистику. Если с первого раза оптимальный размер кэша подобрать не удаётся, это нормально :-)

Memcache и Memcached требуют наличия установленных расширений PHP из PECL (Memcache и Memcached соответственно).

На данном сервере (пять разных WordPress с разным наборов плагинов (SJ Object Cache настроен на трёх из них), три Simple Machines Forum, куча всего по мелочи, кэш eAccelerator для хранения сессий) размер кэша колеблется в пределах 128–192 мегабайт. Север выдерживает больше тысячи одновременных посетителей, порядка 100,000 посетителей в сутки и генерирует в среднем 64 гигабайта трафика в сутки — и это безо всяких страничных кэшей типа WP Super Cache, Hyper Cache, W3 Total Cache, MaxSite Cache и т.п. Не без напильника, но тем не менее.

Удаление/деактивация плагина

Для успешной деактивации каталог wp-content должен быть доступен на запись — требуется удаление файла wp-content/object-cache.php.

Для версии 1.2 плагина на запись должен быть доступен каталог плагина — настройки плагина теперь хранятся в файле options.php (специально для тех, кто не хотел держать wp-content открытым на запись).

Скачать SJ Object Cache 1.0.
Экспериментальная версия SJ Object Cache 1.1 с поддержкой WordPress MU.
Экспериментальная версия SJ Object Cache 1.2 с поддержкой Memcache/Memcached

Автор: ; опубликовано в: Плагины WordPress; метки: APC, eAccelerator, Memcache, Memcached, SJ Object Cache, WordPress, WP File Cache, xCache, кэш, плагин
14
Окт
2010

RSS Комментарии к статье «SJ Object Cache: еще более быстрое объектное кэширование для WordPress» (157)  »

  1. А почему Вы не хотите опубликовать свой плагин на официальном сайте wordpress?

  2. Владимир, а просветите меня, пожалуйста, как понять, что плагин настроен верно? Я использую версию 1.2 плагина, и xCache на небольшом VDS-е. xCache особо не настраивал, просто подогнал размер памяти под свою оператику. В конфигурации вордпресса включена константа кеширования. До установки вашего плагина главная генерировала примерно 50 запросов к базе, сейчас всего 9, при примерно той же загрузке памяти и времени генерации, но я не уверен, верно ли я все настроил =) Все что я сделал, это указал использовать xCache в качестве кеширующего движка, и в разделе xCache указал префикс в виде названия сайта. Нужно ли что-то писать в разделах FileCache и FileGroupCache? Нужны ли какие-то специальные настройки в самом xCache?

    Вообще, на сервере стоит связка nginx+varnish+apache+php5+xcache. Nginx отдает только статические файлы, вроде картинок, стилей и js, плюс он же жмет все текстовое. Затем идет запрос варнишу, который кеширует все остальное, но если там пусто, то работает апач со всеми своими прибамбасами. Целесообразно ли вообще ставить ваш плагин при такой конфигурации? На сервере десять вордпрессов версии 3.1, тест ab -n 10000 -c 20 показывает результат от 300 до 600 запросов в секунду, полагаю это заслуга варниша. Процессор – 600, оперативки — 512.

    Заранее спасибо =)

    • До установки вашего плагина главная генерировала примерно 50 запросов к базе, сейчас всего 9, при примерно той же загрузке памяти и времени генерации

      Потребление памяти уменьшиться не должно, так как используются одни и те же данные; разница в том, что без кэша они берутся из базы данных, а с кэшем — из разделяемой памяти xCache.

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

      Нужно ли что-то писать в разделах FileCache и FileGroupCache? Нужны ли какие-то специальные настройки в самом xCache?

      Нет. FileCache — менее производительный кэширующий движок.

      то работает апач со всеми своими прибамбасами

      Зачем Вам вообще Apache? :-)

      тест ab -n 10000 -c 20 показывает результат от 300 до 600 запросов в секунду

      ab забирает одну и ту же страницу. Естественно, что результат будет забираться из кэша varnish, а до PHP/плагинов кэширования дело не дойдёт. Попробуйте протестировать Вашу конфигурацию при помощи siege — siege умеет делать запросы к случайным страницам сайта; результат будет более приближен к реальным условиям.

  3. Алексей

    Владимир, а что Вы скажете по поводу использования eAccelerator( 0.9.6.1 в качестве opcode cache) + Memcached( как кэширующий движок для SJ Object Cache). eAccelerator 0.9.6 подкупает быстродействием и поддержкой php 5.3, поэтому особо нет желания делать даунгрейд или переходить на «Х кэши».
    Спасибо.

    • Алексей, попробуйте. Но Memcached будет чуть медленнее xCache/APC. Правда, оптимизатор опкода eAccelerator — убойная (в хорошем смысле) вещь в плане улучщения производительности.

  4. Я тут подумал, можно ведь сделать чтобы этот плагин или WP File Cache, проверял заголовки запроса и если приходит no-cache, обновлял данные в кеше?

  5. [...] 5.  Установка плагина кеширования Скачать плагин SJ Object Cache 1.0. [...]

  6. Здравствуйте,

    Сейчас посещаемость сайта достигла 5 тыс. посетителей (5.7к пики). Хостинг шаред от рег.ру. В журнале сервера начинают появляться ошибки fast_cgi (лимит хостинга 4 процесса).
    Вопрос стал в выборе впс-а, но тут мозг сломать можно. Смотрю сейчас на хен хостинг от инферно солюшнс. 1х2.4гц проц и 256 или 512 оперативы. Как понимаю, 256 будет туго, а вот 512 должно хватить для такой посещаемости?
    С указанных кеширующих движков, каким приоритеты дать, точнее, какие из поставить и какое количество (один или несколько должно быть).
    Сейчас на шареде главная такую информацию выдает
    Запросов: 39 | 0,393
    Потребление памяти: 9.82MB

    Использую Ваш File Cache.

    Спасибо большое за помощь.

    • Slam, все зависит от количества посетителей. По поводу кэширования — смотрите в эту сторону — такой подхож гораздо эффективнее.

      SJ Object Cache может использовать только один движок — если на сервере стоит акселератор, то выбирайте соответствующий движок (APC, xCache, eAccelerator). Если акселератора нет, но есть memcached — выбирайте его.

  7. Vladimir

    Здравствуйте, Владимир!
    У меня к вам предложение. Я имею VPS, и установленных пока 7 сайтов на WP. Однако хостер (Dreamhost)плохо настроил Nginx (сам признался) и у меня сейчас постоянные проблемы с сайтами, то 504 ошибка, 502, то вообще сервер падает вдруг. Он их «лечит» перегрузкой сервера и предлагает взять больше памяти (сейчас 300 Мб и траффика пока совсем нет). От хостера требую доступа к корню, а в ответ получаю вопрос: «А зачем вам?? Что вы будете делать?».
    Опыта у меня нет. Только по развитию сети блогов на общем хостинге. Теперь ставлю задачу более масштабно, но времени изучать Linux и Nginx с «0″ нет.
    Владимир, вы можете взяться за наладку и оптимизацию WP+Nginx+PHP+ .. все что требуется для устойчивой и надежной работы сети блогов в будущем от 100 ед.? Сколько ваша работа будет стоит в Этом случае?

    Надеюсь на успешную работу с вами.

    P.S. Искал вас на ODesk, но не обнаружил (включал поиск по Nginx и по Восточной Европе), поэтому пишу сюда.

    • Dreamhost — они такие.

      Если вкратце, проблема в том, что доступно слишком мало процессов FastCGI. Либо все процессы заняты обработкой длительных задач. Решение здесь такое: увеличение значения PHP_FCGI_CHILDREN и анализ деятельности процессов.

      На oDesk я здесь.

      Если что, пишите на vladimir at free-sevastopol.com

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «SJ Object Cache: еще более быстрое объектное кэширование для WordPress»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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

गते गते पारगते पारसंगते बोधि स्वाहा