Скорость: Magento как с APC, так и с Memcached


Мы изучили множество форумов и не знаем ответа на следующий вопрос. На наших серверах установлены как APC, так и Memcache. Мы не уверены, какая конфигурация правильная и лучшая.

Мой вопрос

Каковы/являются ли наилучшими настройками для запуска Magento с использованием Memcache + APC одновременно? (Или это совсем не умно)

Фоновое исследование

Здесь Memcache и APC рекомендуются как быстрый и медленный кэш (но нет диск). Похоже, это работает только тогда, когда у вас достаточно оперативной памяти (и вы уверены в этом)

И эта статья о Memcache или APC - и у нас есть оба

И здесь говорится, что Memcache действительно работает только тогда, когда у вас также медленный сервер определено

И я думаю, что в этой статье говорится то же самое

Это решение моего провайдера для local.xml

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

Ситуация

Общий хостинг Установленный FPC с краями: http://ecommerce.brimllc.com/full-page-cache-magento.html (этот FPC также имеет масштабируемый файловый кэш, чтобы сделать его более сложным)

Author: snh_nl, 2013-02-25

5 answers

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

  • APC - это одновременно Кэш кода операции и Быстрый сервер
  • Memcache - это просто Быстрый сервер

Использование APC в качестве кэша кода операции

Просто установите модуль на свой сервер

pecl install apc

И включите его в своем php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

Затем вы включаете и настраиваете конфигурацию среды выполнения , чтобы костюм, например.

АПК РФ.включен
АПК РФ.shm_segments
АПК РФ.shm_size
АПК РФ.оптимизация
АПК РФ.num_files_hint
АПК РФ.user_entries_hint
АПК РФ.ТТЛ
АПК РФ.user_ttl
...

Затем перезапустите PHP/Apache

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

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

Ничего не нужно настраивать на Magento сторона.

Использование APC в качестве быстрого бэкенда

Вам необходимо добавить следующее в свой ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

Затем очистите существующие кэши хранилища. Чтобы убедиться, что он работает, загрузите страницу во внешнем интерфейсе, и каталог ./var/cache должен оставаться пустым.

Использование Memcache в качестве быстрого бэкенда

Вам потребуется установить Memcache в качестве расширения PHP и установить соответствующий демон Memcache (Memcached) на вашем сервере.

pecl install memcache

И включите его в своем php.ini

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Затем установите Memcached на сервере. Для RH/Centos настройте URL-адрес в соответствии с вашей версией выпуска и архитектурой процессора.

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

Затем измените Magento, чтобы использовать Memcache в качестве быстрого бэкэнда, измените путь сокета на соединение TCP/IP в соответствии с требованиями.

<cache>
  <slow_backend>database</slow_backend>
  
  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>
  
  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

Предостережения о Memcache и тегировании - что он хранит

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

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

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

В этом случае мы предлагаем удалить <slow_backend>database</slow_backend> и заменить его на:

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

Это нарушит/отключит 2-й уровень кэширования (и предотвратит хранение тегов), но все равно позволит повысить производительность Memcache.

Что использовать

Если это развертывание на одном сервере - нет ничего плохого в том, чтобы просто использовать APC для всего.

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

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


Атрибуции: sonassi.com, php.net, repoforge.org

 26
Author: Ben Lessani - Sonassi, 2020-06-15 08:30:17

Я вполне согласен с предыдущими ответами, но вот краткое уточнение, чтобы завершить его: Да, apc можно использовать как в качестве механизма хранения кэша, так и в качестве оптимизатора байтового кода PHP. Но необходимо прояснить два момента:

  • В качестве быстрого бэкенда директивы конфигурации, используемые APC для понимания того, как он должен сохранять данные, управляются с помощью директив apc.user_%. Другие касаются только кэша байтового кода (например, apc.ttl: срок действия кэша кода операции, apc.user_ttl: срок действия данных, хранящихся в кэше вашего Magento).

  • И как быстрый серверный сервер, APC ведет себя точно так же, как и memcached: он не управляет тегами кэша, а для Magento требуется настроенный медленный серверный сервер (или используйте по умолчанию медленный серверный файл).

По моему опыту, на сайтах с огромным трафиком, если вы используете apc только в качестве оптимизатора байтового кода, вам потребуется от 96 до 256Mo в значении конфигурации apc.shm_size. Также увеличьте apc.num_files_hint с 1000 до 15000: по умолчанию кэш байтового кода apc кэширует только 1000 файлов, а Magento по умолчанию содержит около ~20 000 файлов PHP и PHTML (find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Поэтому настройте это значение с помощью своего исходного кода.

Если вы используете APC или memcached в качестве быстрого бэкенда, трудно дать вам несколько советов по требуемой памяти: это действительно зависит от политики кэширования, применяемой к вашему экземпляру.

На данный момент ваша конфигурация кэша работает следующим образом это:

  • каждый контент хранится как в memcached, так и в файле
  • Быстрый сервер всегда запрашивается перед медленным сервером
  • если в быстром бэкэнде ничего не найдено, magento ищет в медленном бэкэнде

Зачем нужны эти два уровня управления? memcached и другие быстрые бэкэнды являются хранилищами памяти. Таким образом, это означает, что данные могут быть повреждены или исчезли.

Как вы можете повысить производительность этой конфигурации?

Отключить вторую запись вероятно, это один из наиболее эффективных вариантов. Это объясняется в четвертой статье, которую вы упомянули. Но вы не можете использовать без изменений исходный код slow_backend_store_data. В вашем контексте я не рекомендую выполнять эту настройку по следующим причинам: ваши данные, хранящиеся в кэше, никогда не будут контролироваться. Вы будете хранить данные в памяти, повысите производительность, но, возможно, отправите своим висторам недопустимый контент. Поэтому вам нужно найти решение, которое гарантирует, что у вас будет доступ к памяти (для повышения производительности), управление записью и возможность отключить кэширование данных slow_backend_store_data. Вы можете получить доступ к этому контексту с помощью:

  • замените сервер memcached на сервер redis ( redis может управлять чтением и записью, как это делается файловой системой), и продолжайте использовать apc как оптимизатор байтового кода

  • * убедитесь, что вы можете использовать опцию slow_backend_store_data* либо путем настройки ваш исходный код или либо путем переключения на медленный сервер базы данных (да, это увеличивает нагрузку на сервер базы данных, но если ваша политика кэширования четко определена, это не должно быть проблемой)

  • * отключить опцию slow_backend_store_data*: в этой конфигурации она больше не требуется, управление чтением и записью выполняется redis.

 6
Author: Matthieu MARY, 2013-02-26 18:06:38

В качестве дополнительного примечания к этому мы обнаружили, что при использовании APC с Magento (для кэширования кода операции - мы используем Redis для обычного кэширования страниц Magento и блоков) важно убедиться, что параметр статистики равен 0 в производстве (но 1 в разработке):

apc.stat = 0

Параметр apc.stat используется для определения того, следует ли проверять сценарий при каждом запросе, чтобы определить, был ли он изменен (http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) и так установка этого значения в 0 в производственной среде повысит производительность APC, если она не будет выполнять эту проверку с каждым запросом.

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

 2
Author: simonyoung, 2013-06-26 05:03:20

Лучшее, что мы сделали для значительного ускорения серверной части, - это установить REDIS в качестве обработчика кэша. Теперь он также поддерживается в ядре от Magento 1.8 и выше.

Ничто не сравнится... теперь это щелчок, щелчок, щелчок, щелчок

Http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

Кроме того, вы можете рассмотреть возможность добавления расширения сеанса Redis, чтобы также добавлять сеансы на сервер памяти redis...

Удачи!

 1
Author: snh_nl, 2014-02-22 14:25:58

Из этого local.xml файл, Magento заберет последнюю запись и использует Memcache. Я думаю, что существует путаница между тем, как APC и Memcache могут работать с Magento.

Во-первых, APC имеет 2 применения:

  • кэширование кода операции - скомпилируйте ваши php-файлы в код операции, что ускорит выполнение скрипта примерно на 25%
  • хранилище ключей/значений - может использоваться Magento в качестве кэш-системы.

С другой стороны, Memcache - это просто хранилище ключей/значений. Большим преимуществом Memcache является что он может работать в режиме клиент-сервер, поэтому несколько интерфейсных серверов могут использовать один и тот же кэш, что необходимо, если у вас несколько серверов, обслуживающих один и тот же веб-сайт.

Наиболее распространенной настройкой является установка APC для кэширования кода операции (таким образом, вы получаете ~25% более быстрое выполнение скрипта) и используете Memcache в качестве сервера кэша. Я также использовал APC в качестве кэш-системы, и хотя теоретически она должна быть немного быстрее, чем Memcache, вы не можете заметить разницу.

 0
Author: Paul Grigoruta, 2013-02-25 20:00:25