Швидкість: Magento з APC та Memcached


17

Ми вивчили багато форумів і не знаємо відповіді на наступне. У нас є 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 також має масштабовану файловий кеш , щоб зробити його більш складним)


@sonassi, чому б не замість memcached-tag? code.google.com/p/memcached-tag

Відповіді:


26

Вам потрібно зрозуміти чітке розмежування цих двох продуктів, щоб зрозуміти, як ними користуватися.

  • APC є і кешем OPCode, і швидким
  • Memcache - це просто швидкий бекенд

Використання APC як кеша OPCode

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

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)

Потім включите і тонкої настройки конфігурації під час виконання , щоб костюм, наприклад.

apc.enabled
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

Потім перезапустіть PHP / Apache

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

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

Нічого не потрібно налаштовувати на стороні Magento.

Використання APC як швидкого бекенда

Вам потрібно додати наступне до свого ./app/etc/local.xml

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

Потім очистіть наявні кеші магазину. Щоб переконатися, що він працює, завантажте сторінку в передній частині та на./var/cache каталог повинен залишатися порожнім.

Використання Memcache як швидкого бекенда

Вам потрібно буде встановити Memcache як розширення PHP та встановити відповідний Memcache Daemon (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 підтримує лише один рівень співвідношень ключів і значень, тому він не може зберігати теги кешу Magento (які використовуються для самостійної обробки даних кешу). Як результат, вам або потрібно вказатиslow_backend щоб підтримувати відношення тегів кеш-вмісту, або взагалі не визначати його.

Якщо визначити a 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


Коли я намагаюся відключити slow_backend_cache за допомогою цього трюку, я потрапляю slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceв Mage 1.7.0.2
Аарон Поллок

6

Я цілком погоджуюся з попередніми відповідями, але ось невелика точність, щоб виконати його: Так, apc може використовуватися як як механізм зберігання кеша, так і як оптимізатор байтового коду PHP. Але потрібно уточнити два моменти:

  • Як швидкий запуск, директиви конфігурації, використовувані APC для розуміння того, як він повинен зберігати дані, управляються через директиви apc.user_%. Інші стосуються лише кеш-коду байтів (Ex apc.ttl: тривалість терміну дії кешу опкоду, apc.user_ttl: тривалість терміну дії даних, що зберігаються у кешеному вашому Magento).

  • І як швидкий бекенд, APC має таку ж поведінку, що і запам’ятовується: він не керує тегами кешу, а для 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 або запам’ятовується як швидкий бекенд, важко дати вам кілька порад щодо необхідної пам’яті: це дійсно залежить від політики кешування, застосованої до вашого примірника.

Наразі ваша конфігурація кешу працює так:

  • кожен вміст зберігається як у запам’ятованому, так і у файлі
  • Швидкий запуск завжди запитується перед повільним запуском
  • якщо нічого не знайдено у швидкому бэкенді, магенто шукає у повільному бэкенді

Чому ці два рівні управління? запам’ятовані та інші швидкі мітки - це сховища пам’яті. Так це означає, що дані можуть бути пошкоджені або зникли.

Як можна підвищити цю продуктивність?

Відключення другого написання, мабуть, є одним з найбільш ефективних варіантів. Це пояснено у згаданій вами четвертій статті. Але ви не можете використовувати без змін вихідний код slow_backend_store_data. У вашому контексті я не рекомендую робити це налаштування з наступних причин: ваші дані, що зберігаються в кеші, ніколи не будуть контролюватися. Ви будете зберігати дані в пам'яті, зароблятимете продуктивність, але, можливо, надсилатимете своїм відвідувачам недійсний вміст. Тому вам потрібно знайти рішення, яке забезпечує вам доступ до пам'яті (для кращої продуктивності), управління записами та можливість відключення кешування slow_backend_store_data. Ви можете досягти цього контексту:

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

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

  • * деактивувати параметр slow_backend_store_data * : у цій конфігурації це більше не потрібно, ви керували читанням і записом, виконаним Redis .


2

Як додаткову примітку до цього, ми виявили, що при використанні APC з Magento (для кешування опкодом - ми використовуємо Redis для звичайної сторінки Magento та кешування блоків), тоді важливо переконатися, що встановлення stat дорівнює 0 у виробництві (але 1 у розробка):

apc.stat = 0

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

Варто зауважити, що після встановлення apc.stat на 0 вам, швидше за все, доведеться перезапустити процес веб-сервера, щоб отримати зміни файлів (тобто після розгортання), але це все одно має бути частиною вашої стратегії після розгортання.


1

Найкраще, що ми зробили для того, щоб значно прискорити запуск - це встановити REDIS як кеш-обробник . Тепер він також підтримується в основній системі від Magento 1.8 і вище.

Нічого не порівнюється ... тепер це клік clickerdy ​​click

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

Крім того, ви можете розглянути можливість додавання розширення Redis Session для додавання сеансів на сервер пам'яті Redis ...

Удачі!


0

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

По-перше, APC має 2 використання:

  • кешування опкоду - компілюйте файли PHP в опкод, роблячи виконання сценарію приблизно на 25% швидшим
  • зберігання ключа / значення - може використовуватись Magento як кеш-система.

Memcache з іншого боку - це лише магазин ключових цінностей. Великою перевагою Memcache є те, що він може працювати в режимі клієнт-сервер, тому декілька серверів інтерфейсу можуть використовувати один кеш, що обов’язково, якщо у вас є кілька серверів, які обслуговують один і той же веб-сайт.

Найпоширеніша установка - встановити APC, щоб отримати кешування коду (таким чином, ви отримаєте ~ 25% швидше виконання сценарію) і використовувати Memcache як кеш-сервер. Я також використовував APC як кеш-систему, і хоча теоретично це має бути трохи швидше, ніж Memcache, різниці ви не можете сказати.


Отже, якщо я прочитав це: Найпоширенішою установкою є встановлення APC, щоб отримати кешування коду (таким чином, ви отримаєте ~ 25% швидше виконання сценарію) і використовувати Memcache як кеш-сервер. Тоді як ми можемо використовувати обидва разом? Це так: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

Щоб використовувати обидва разом, вам взагалі не потрібно декларувати нічого спільного з APC.
Бен Лессані - Сонассі

Значить, з коду було б все? <cache> <backend> запомнено </backend> і залиште першу частину
snh_nl

На додачу. Для мене швидкість передачі завжди була мірою загальної швидкості (як FPC тощо не застосовується тут) ...
snh_nl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.