Какой кеш PHP (opcode) следует использовать и почему?

44

Я продолжаю слышать о некоторых кешах PHP (opcode), таких как - APC, XCache, Memcache, eAccelerator и т. Д.

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

Например, почему вы скажете, что система X-кэша лучше, чем Y? Меня меньше беспокоит относительный прирост производительности. Небольшие различия между любыми двумя системами имеют меньшее значение.

Если общий ответ на мой вопрос не представляется возможным, вот несколько указателей. Я использую выделенный VPS с Mediatemple (с корневым доступом). Объем оперативной памяти составляет 512 МБ (физическая) + 400 МБ (подкачка). Меня беспокоит WordPress и его двоюродные братья WordPress-MU и BuddyPress. 90% наших кодов / сайтов попадают в семейство WordPress.

Заранее спасибо за помощь.

rahul286
источник

Ответы:

33

Продукты, которые вы перечисляете, служат различным целям.

Кеши OPCode

В этом списке Википедии есть много PHP-ускорителей (OPCaches) . Как и в случае с продуктами с открытым исходным кодом, все они довольно похожи. XCache - это облегченный PHP-ускоритель, и он используется по умолчанию, когда вы запускаете этот HTTPd. Он хорошо работает и с Apache, однако APC, по-видимому, немного более «хорошо играет с другими» в социальном плане, официально поддерживается как часть PHP и выпущен в соответствии с официальным дистрибутивом PHP.

Я отказался от usign eAccelerator из-за его медленной разработки, отставания от выпусков PHP и официального благословенного статуса, который APC предлагает с аналогичной производительностью.

Эти продукты, как правило, капли; без изменения кода мгновенное повышение производительности. С большими кодовыми базами (Drupal, Wordpress) производительность может быть увеличена в 3 раза при сокращении времени отклика и использования памяти.

Кеширование данных

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

Существуют также дополнения Wordpress, такие как WP-Super-Cache, которые могут значительно улучшить производительность Wordpress (в действительности, WP-Super-Cache во многих случаях может конкурировать со статическими сайтами на основе HTML).

В заключение - я очень рекомендую APC, если вы хотите «установить и забыть, хорошо поддерживаемый продукт».

SirStan
источник
Этот ответ обсуждается в Meta: meta.stackexchange.com/questions/15474/…
Брэд Гилберт,
Заполните " [4]: http://", чтобы исправить это.
Брэд Гилберт
Спасибо огромное, Сирстан! Ваш ответ не только решил мою проблему, но и помог мне лучше понять мир кеширования. Я просто хочу спросить вас еще одну вещь. Я уже использую wp-supercache. Это хорошая идея, чтобы объединить это с APC? Будет ли APC значительно улучшить производительность? Будут ли APC и Wp-SuperCache работать вместе? Нужны ли они оба? Или APC сделает Wp-SuperCache избыточным?
rahul286
Примечание. APC выполняет как кэширование данных, так и кэширование кода операции.
lo_fye
2
Этот ответ сейчас очень устарел. APC вряд ли будет обновлен для будущих версий PHP, которые были заменены оптимизатором Zend и кэшем кода операции (теперь известным как opcache), начиная с версии 5.5. Однако я не видел существенной разницы в производительности ( symcbean.blogspot.co.uk/2013/09/… ), что объясняется отсутствием поддержки данных в opcache и нехваткой возвратов памяти, что может сделать обновление счетчика производительным для некоторых.
Symcbean
6

APC будет встроен в PHP6, так что это логичный выбор. Я использую его, и прирост производительности потрясающий. Если вам нужно кэшировать что-то кроме опкодов (то есть результатов запроса к базе данных), вы также можете использовать APC для этого, но невозможно разделить кэши APC между несколькими серверами. Если вам нужно только кешировать данные на одном сервере, APC отлично подходит. Если вам нужно масштабировать до нескольких серверов, и вы хотите разделить кеш между ними, memcached - ваш человек.

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

lo_fye
источник
ВАУ. Если бы я знал официальный статус APC, я бы давно перешел на него ... :-) Я также мало что знал о разнице в кеше кода операции или кода операции. Как личный выбор, я не хочу проходить через накладные расходы по созданию классов-оболочек или изменению источника моих приложений, чтобы помочь им адаптироваться с кэшированием env.
rahul286
6
Обратите внимание, что, поскольку PHP 5.5 интегрировал Zend Opcache как «официальный» кэш кода операции, я думаю, что вряд ли они перейдут на APC для PHP 6.
Маттео Тассинари
1
Чтобы исправить это: PHP 5.5 действительно поставляется с Zend Opcache. Не будет PHP 6. Вместо этого будет PHP 7. APC следует считать почти (?) Устаревшим.
Джисс Рейтсма,
6

Просто отметим, что все немного изменилось, и кажется, что APC не будет включен в ядро ​​PHP 6.

APC медленно развивается, и похоже, что он никогда не будет совместим с PHP 5.5. Из-за этого, похоже, что парни из PHP будут устанавливать расширение кэша кода операции Zend OPCache как расширение PHP CORE. Вы заботитесь о том, чтобы узнать больше здесь http://wiki.php.net/rfc/optimizerplus .

Важное примечание: Zend OPCache не имеет кеша пользовательских данных, такого как APC, поэтому, если вам нужен кеш пользовательских данных, вы можете использовать его вместе с Memcache.

Nemke
источник
1
Он также делает недействительным весь кеш, когда он заполняется (недопустимые записи НЕ удаляются) - следовательно, если у вас больше кода, чем памяти или вы часто используете, то ожидайте увидеть скачки производительности.
Symcbean
3

Если версия PHP не ниже 5.50, то лучше всего подойдет OpCache (нативная библиотека PHP / PECL). Он должен быть предварительно скомпилирован при установке из двоичного файла.

http://php.net/manual/en/book.opcache.php

Если запустить версию PHP до 5.5, APC (PHP / PECL собственный кэш OpCode) будет самым простым выбором, хотя он считается необслуживаемым и мертвым:

http://php.net/manual/en/book.apc.php

Использование встроенной в PHP функциональности OpCache избавит вас от необходимости поддерживать сторонние библиотеки.

рекурсию
источник
1
Если работает PHP <5.5, самое первое, что вы должны сделать, это обновить его.
Майкл Хэмптон
@ Майкл-Хэмптон :: Действительно! Но в некоторых редких случаях вы не можете обновить PHP без обновления ОС, что может даже означать новое аппаратное требование. Пример - я работаю в компании, использующей серверы IBM i-серии версии 6. Наша версия PHP - 5.4.3. Поскольку IBM полагается на Zend для переноса версий PHP, для PHP 5.6 требуется более новая версия IBM-i OS - 7.1 или более новая (и впоследствии более новая версия Zend PHP-сервера), для которой требуются новые серверы Power-8 и т. Д. ... Мех.
рекурсивный
0

Memcache кэширует пары ключ / значение, а не коды операций. Вы можете использовать его вместе с одним из кэшей кода операции.

user10699
источник
Из ответа SirStan (ниже) видно, что memcache может понадобиться для модификации моих приложений PHP. На самом деле я использую Wordpress, и изменение его основного кода не будет хорошей идеей.
rahul286