Geschwindigkeit: Magento mit APC und Memcached

17

Wir haben viele Foren studiert und kennen die Antwort auf die folgenden Fragen nicht. Wir haben beides APCund Memcacheauf unseren Servern installiert. Wir sind uns nicht sicher, welche Konfiguration die richtige und beste ist.

Meine Frage

Was sind / sind die besten Einstellungen, um Magento gleichzeitig mit Memcache + APC auszuführen? (Oder ist das überhaupt nicht klug)

Hintergrundforschung

Hier werden Memcache und APC als schneller und langsamer Cache (aber keine Festplatte) empfohlen. Klingt so, als ob das nur funktioniert, wenn Sie genug RAM haben (und sicher sind)

Und dieser Artikel handelt von Memcache oder APC - und wir haben beides

Und hier heißt es, dass Memcache nur dann wirklich funktioniert, wenn Sie auch ein langsames Backend definiert haben

Und ich denke, dieser Artikel sagt dasselbe

Dies ist die Lösung meines ISP für 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>

Lage

Shared - Hosting - Brim FPC installiert: http://ecommerce.brimllc.com/full-page-cache-magento.html (diese FPC hat auch eine skalierbare Dateicache es komplizierter zu machen)

snh_nl
quelle
@sonassi, warum nicht statt memcached-tag? code.google.com/p/memcached-tag

Antworten:

26

Sie müssen die klare Unterscheidung zwischen diesen beiden Produkten verstehen, um zu verstehen, wie sie verwendet werden.

  • APC ist sowohl ein OPCode Cache als auch ein Fast Backend
  • Memcache ist nur ein schnelles Backend

Verwendung von APC als OPCode-Cache

Installieren Sie einfach das Modul auf Ihrem Server

pecl install apc

Und aktivieren Sie es in Ihrem php.ini

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

Anschließend aktivieren Sie die Laufzeitkonfiguration und passen sie an, z.

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

Starten Sie dann PHP / Apache neu

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

Danach gibt es nichts mehr zu tun. Bestätigen Sie, dass APC aktiviert phpinfo()ist, und drücken Sie kurz. Andernfalls ist zu diesem Zeitpunkt der OPCode-Cache-Teil von APC aktiv.

Auf Magentos Seite muss nichts konfiguriert werden.

Verwendung von APC als schnelles Backend

Sie müssen Folgendes zu Ihrer hinzufügen ./app/etc/local.xml

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

Leeren Sie dann Ihre vorhandenen Geschäfts-Caches. Um zu überprüfen, ob es funktioniert, laden Sie eine Seite in das Front-End und das ./var/cacheVerzeichnis sollte leer bleiben.

Verwenden von Memcache als schnelles Backend

Sie müssen Memcache als PHP-Erweiterung installieren und den entsprechenden Memcache-Daemon (Memcached) auf Ihrem Server installieren.

pecl install memcache

Und aktivieren Sie es in Ihrer 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)

Installieren Sie dann Memcached auf dem Server. Passen Sie die URL für RH / Centos an Ihre Release-Version und Ihre CPU-Architektur an.

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)

Ändern Sie dann Magento so, dass Memcache als schnelles Backend verwendet wird, und ändern Sie den Socket-Pfad entsprechend in eine TCP / IP-Verbindung.

<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>

Die Vorbehalte von Memcache und Tagging - was speichert es?

Memcache unterstützt nur eine Ebene von Schlüssel-Wert-Beziehungen, daher können die Magento-Cache-Tags (die zum unabhängigen Leeren von Cache-Daten verwendet werden) nicht gespeichert werden. Infolgedessen müssen Sie entweder a angeben slow_backend, um die Cache-Inhalts-Tag-Beziehung beizubehalten, oder keines definieren.

Wenn Sie ein definieren slow_backend, besteht das Risiko, dass die Cache-Tags so groß werden, dass die Leistung negiert wird. Es gibt auch das inhärente Problem, dass Sie nicht auf mehrere Server skalieren können, wenn jeder Server seine eigenen Cache-Tags verwaltet.

Wenn Sie also Memcache verwenden, ist der bessere Ansatz (mit der Einschränkung, dass Sie Caches nicht unabhängig voneinander leeren können), die Verwendung von Memcache nicht zu stören slow_backend.

In diesem Fall empfehlen wir, es zu entfernen <slow_backend>database</slow_backend>und durch Folgendes zu ersetzen:

  <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>

Dies unterbricht / deaktiviert die 2. Ebene des Cachings (und verhindert das Speichern von Tags), ermöglicht jedoch weiterhin die Leistung von Memcache.

Welche zu benutzen

Wenn es sich um eine Einzelserver-Bereitstellung handelt, kann es nicht schaden, APC nur für alles zu verwenden.

Wenn es sich um eine verteilte Einrichtung handelt, müssen Sie Memcache als schnelles Backend verwenden (damit alle Computer auf den gemeinsamen Speicher zugreifen können).

Wenn Ihr Hosting-Anbieter Ihnen nicht sagen kann, welches Setup Sie verwenden sollen, haben Sie mit Sicherheit den falschen Host.


Zuschreibungen: sonassi.com , php.net , repoforge.org

Ben Lessani - Sonassi
quelle
Wenn ich versuche, slow_backend_cache mit diesem Trick zu deaktivieren, erhalte ich slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceMage 1.7.0.2
Aaron Pollock,
6

Ich stimme den vorherigen Antworten durchaus zu, aber hier ist eine kurze Zusammenfassung: Ja, apc kann sowohl als Cache-Speicher-Engine als auch als PHP-Bytecode-Optimierer verwendet werden. Es müssen jedoch zwei Punkte geklärt werden:

  • Als schnelles Backend werden die Konfigurationsanweisungen, die von APC verwendet werden, um zu verstehen, wie Daten gespeichert werden müssen, über die Anweisungen apc.user_% verwaltet. Die anderen betreffen nur den Bytecode-Cache (Bsp .: die Ablaufdauer für den Opcode-Cache, apc.user_ttl: die Ablaufdauer für die von Ihrem Magento zwischengespeicherten Daten).

  • Und als schnelles Backend hat APC genau dasselbe Verhalten wie memcached: Es verwaltet die Cache-Tags nicht und für Magento ist ein konfiguriertes langsames Backend erforderlich (oder es wird standardmäßig die langsame Backend-Datei verwendet).

Nach meiner Erfahrung benötigen Sie auf Websites mit großem Datenverkehr, wenn Sie apc nur als Bytecode-Optimierer verwenden, zwischen 96 und 256 MB für den Konfigurationswert apc.shm_size. Erhöhen Sie auch die apc.num_files_hint von 1000 auf 15000: Standardmäßig enthält der Apc-Cache-Bytecode-Cache nur 1000 Dateien, und Magento enthält standardmäßig ca. 20.000 PHP- und PHTML-Dateien ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Passen Sie diesen Wert also mit Ihrem Quellcode an.

Wenn Sie APC oder memcached als schnelles Backend verwenden, ist es schwierig, einige Tipps zum erforderlichen Arbeitsspeicher bereitzustellen: Dies hängt wirklich von der auf Ihre Instanz angewendeten Cache-Richtlinie ab.

Im Moment funktioniert Ihre Cache-Konfiguration folgendermaßen:

  • Jeder Inhalt wird sowohl in memcached als auch in file gespeichert
  • Das schnelle Backend wird immer vor dem langsamen Backend angefordert
  • Wenn im schnellen Backend nichts gefunden wird, sucht Magento im langsamen Backend

Warum diese zwei Managementebenen? memcached und andere schnelle Backends sind Speicher. Das bedeutet, dass Daten beschädigt oder verschwunden sein können.

Wie können Sie diese Konfigurationsleistung steigern?

Das Deaktivieren des zweiten Schreibvorgangs ist wahrscheinlich eine der effizientesten Optionen. Dies wird in dem von Ihnen erwähnten vierten Artikel erläutert. Sie können den slow_backend_store_data-Quellcode jedoch nicht ohne Änderungen verwenden. In Ihrem Zusammenhang empfehle ich diese Anpassung aus den folgenden Gründen nicht: Ihre im Cache gespeicherten Daten werden niemals kontrolliert. Sie werden Daten im Speicher speichern, Leistung verdienen, aber möglicherweise einen ungültigen Inhalt an Ihre Besucher senden. Sie müssen also eine Lösung finden, die sicherstellt, dass Sie über Speicherzugriff (für eine bessere Leistung), Schreibsteuerung und die Möglichkeit zum Deaktivieren des Caching von slow_backend_store_data verfügen. Sie erreichen diesen Kontext über:

  • Ersetzen Sie den memcached Server durch einen redis-Server (redis kann das Lesen und Schreiben wie von einem Dateisystem gesteuert) und verwenden Sie apc weiterhin als Bytecode-Optimierer

  • * Stellen Sie sicher, dass Sie die Option slow_backend_store_data verwenden können. * Passen Sie entweder Ihren Quellcode an oder wechseln Sie zu einem langsamen Datenbank-Backend ein Problem)

  • * Deaktiviere die slow_backend_store_data Option * : In dieser Konfiguration ist keine Lese- und Schreibkontrolle mehr erforderlich.

Matthieu MARY
quelle
2

Als zusätzliche Anmerkung dazu haben wir festgestellt, dass es bei der Verwendung von APC mit Magento (für Opcode-Caching - wir verwenden Redis für konventionelles Magento-Seiten- und Block-Caching) wichtig ist, dass die stat-Einstellung in der Produktion 0 ist (aber 1 in Entwicklung):

apc.stat = 0

Mit der Einstellung apc.stat wird festgelegt, ob ein Skript bei jeder Anforderung überprüft werden soll, um festzustellen, ob es geändert wurde ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat) ) Wenn Sie dies in einer Produktionsumgebung auf 0 setzen, hat dies den Leistungsvorteil, dass APC diese Prüfung nicht bei jeder Anforderung durchführt.

Beachten Sie, dass Sie nach dem Festlegen von apc.stat auf 0 wahrscheinlich Ihren Webserverprozess neu starten müssen, um Dateiänderungen (dh nach der Bereitstellung) zu übernehmen. Dies sollte jedoch trotzdem Teil Ihrer Strategie nach der Bereitstellung sein.

simonyoung
quelle
1

Das Beste, was wir getan haben, um das Backend erheblich zu beschleunigen, ist die Installation von REDIS als Cache-Handler . Es wird jetzt auch im Kern von Magento 1.8 und höher unterstützt.

Nichts ist vergleichbar ... jetzt ist es Klick, Klick, Klick

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

Darüber hinaus können Sie die Redis Session-Erweiterung hinzufügen, um dem Redis Memory Server auch Sitzungen hinzuzufügen ...

Viel Glück!

snh_nl
quelle
0

Aus dieser local.xml-Datei übernimmt Magento den letzten Eintrag und verwendet Memcache. Ich denke, es gibt eine Verwechslung zwischen der Funktionsweise von APC und Memcache mit Magento.

Erstens hat APC zwei Verwendungszwecke:

  • Opcode-Caching - Kompilieren Sie Ihre PHP-Dateien in Opcode und beschleunigen Sie so die Skriptausführung um ca. 25%
  • Schlüssel- / Wertespeicher - Kann von Magento als Cache-System verwendet werden.

Memcache hingegen ist nur ein Schlüssel- / Wertespeicher. Der große Vorteil von Memcache besteht darin, dass es im Client-Server-Modus ausgeführt werden kann, sodass mehrere Frontend-Server denselben Cache verwenden können. Dies ist ein Muss, wenn Sie mehrere Server haben, die dieselbe Website bedienen.

Am häufigsten wird APC installiert, um das Zwischenspeichern von Opcode zu ermöglichen (damit Sie ~ 25% schneller Skripte ausführen können) und Memcache als Cache-Server verwendet. Ich habe APC auch als Cache-System verwendet, und obwohl es theoretisch etwas schneller sein sollte als Memcache, kann man den Unterschied nicht erkennen.

Paul Grigoruta
quelle
Wenn ich das hier lese: Das häufigste Setup ist, APC zu installieren, um Opcode-Caching zu erhalten (damit Sie ~ 25% schneller Skripte ausführen können) und Memcache als Cache-Server zu verwenden. Wie können wir dann beide zusammen nutzen? Ist es so: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl
Um beide zusammen zu verwenden, müssen Sie überhaupt nichts deklarieren, was mit APC zu tun hat.
Ben Lessani - Sonassi
Also wäre der Code alles von? <cache> <backend> memcached </ backend> und lass den ersten Teil
weg
Zusätzlich. Für mich war die Backend-Geschwindigkeit immer ein Maß für die Gesamtgeschwindigkeit (da FPC usw. hier nicht zutreffen) ...
snh_nl