Velocità: Magento con APC e Memcached


17

Abbiamo studiato molti forum e non conosciamo la risposta a quanto segue. Abbiamo entrambi APCe Memcacheinstallato sui nostri server. Non siamo sicuri di quale sia la configurazione corretta e migliore.

La mia domanda

Quali sono / sono le migliori impostazioni per eseguire Magento usando contemporaneamente Memcache + APC? (O non è affatto intelligente)

Ricerca di fondo

Qui Memcache e APC sono consigliati come cache veloce e lenta (ma senza disco). Sembra che funzioni solo quando hai abbastanza RAM (e ne sei sicuro)

E questo articolo riguarda Memcache o APC - e abbiamo entrambi

E qui afferma che Memcache funziona davvero solo quando si definisce anche un backend lento

E penso che questo articolo stia dicendo lo stesso

Questa è la soluzione del mio ISP per 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>

Situazione

Hosting condiviso Brim FPC installato: http://ecommerce.brimllc.com/full-page-cache-magento.html (questo FPC ha anche una cache di file scalabile per renderlo più complesso)


@sonassi, perché non invece di tag memcached? code.google.com/p/memcached-tag

Risposte:


26

È necessario comprendere la chiara distinzione tra questi due prodotti per capire come usarli.

  • APC è sia OPCode Cache sia Fast Backend
  • Memcache è solo un backend veloce

Utilizzo di APC come cache OPCode

Installa semplicemente il modulo sul tuo server

pecl install apc

E abilitalo nel tuo php.ini

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

Quindi abilitare e ottimizzare la configurazione di runtime per adattarla, ad es.

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

Quindi riavviare PHP / Apache

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

Dopo ciò, non c'è nient'altro da fare. Conferma che APC è abilitato con una rapida phpinfo(), ma altrimenti, a questo punto, la porzione di cache OPCode di APC è attiva.

Nulla deve essere configurato dal lato di Magento.

Utilizzo di APC come backend veloce

Devi aggiungere quanto segue al tuo ./app/etc/local.xml

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

Quindi svuota le cache dei negozi esistenti. Per verificare che funzioni, caricare una pagina nel front-end e la ./var/cachedirectory dovrebbe rimanere vuota.

Utilizzo di Memcache come backend veloce

Dovrai installare Memcache come estensione PHP e installare il rispettivo Demone Memcache (Memcached) sul tuo server.

pecl install memcache

E abilitalo nel tuo 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)

Quindi installare Memcached sul server. Per RH / Centos, regola l'URL in base alla versione di rilascio e all'architettura della CPU.

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)

Quindi modificare Magento per utilizzare Memcache come backend veloce, cambiare il percorso del socket in una connessione TCP / IP per adattarsi.

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

Le avvertenze di Memcache e tagging: cosa memorizza

Memcache supporta solo un singolo livello di relazioni chiave-valore, quindi non può archiviare i tag della cache Magento (che vengono utilizzati per svuotare i dati della cache in modo indipendente). Di conseguenza, è necessario specificare a slow_backendper mantenere la relazione del tag del contenuto della cache o non definirne affatto.

Se si definisce a slow_backend, si corre il rischio che i tag della cache diventino così grandi da compromettere le prestazioni; c'è anche il problema intrinseco che non è possibile ridimensionare su più server se ciascun server mantiene i propri tag cache.

Quindi, quando si utilizza Memcache, l' approccio migliore (con l'avvertenza non è possibile svuotare le cache in modo indipendente), è di non preoccuparsi di usare il slow_backend.

In tal caso, ti consigliamo di rimuoverlo <slow_backend>database</slow_backend>e sostituirlo con:

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

Ciò interromperà / disabiliterà il 2 ° livello di memorizzazione nella cache (e impedirà l'archiviazione dei tag), ma consentirà comunque l'esecuzione di Memcache.

Quale usare

Se si tratta di una distribuzione su un singolo server , non c'è nulla di male ad usare APC per tutto.

Se si tratta di una configurazione distribuita , dovrai utilizzare Memcache come backend veloce (in modo che tutte le macchine possano accedere all'archivio comune).

Più preoccupante è che se il tuo provider di hosting non può dirti la giusta configurazione da utilizzare, sei sicuramente con l'host sbagliato.


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


Quando provo a disabilitare slow_backend_cache usando questo trucco, arrivo slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfacea Mage 1.7.0.2
Aaron Pollock il

6

Sono abbastanza d'accordo con le risposte precedenti, ma ecco una breve precisione per completarlo: Sì, apc può essere utilizzato sia come motore di archiviazione della cache sia come ottimizzatore del codice byte PHP. Ma due punti devono essere chiariti:

  • Come backend veloce, le direttive di configurazione utilizzate da APC per capire come deve salvare i dati sono gestite attraverso le direttive apc.user_%. Gli altri riguardano solo la cache del codice byte (Ex apc.ttl: la durata della scadenza per la cache opcode, apc.user_ttl: la durata della scadenza per i dati memorizzati nella cache di Magento).

  • E come backend veloce, APC ha esattamente lo stesso comportamento di memcached: non gestisce i tag della cache e per Magento richiede un backend lento configurato (o usa di default il file backend lento).

Dalla mia esperienza, su siti Web con traffico intenso, se usi apc solo come ottimizzatore del codice byte, hai bisogno di un valore di configurazione di apc.shm_size compreso tra 96 ​​e 256Mo. Aumenta anche apc.num_files_hint da 1000 a 15000: per impostazione predefinita la cache del codice byte della cache apc memorizza solo 1000 file e Magento contiene circa 20.000 file PHP e PHTML per impostazione predefinita ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Quindi personalizza questo valore con il tuo codice sorgente.

Se si utilizza APC o memcached come backend veloce, è difficile fornire alcuni suggerimenti sulla memoria richiesta: dipende in realtà dai criteri di cache applicati all'istanza.

Per ora, la configurazione della cache funziona in questo modo:

  • ogni contenuto è archiviato sia in memcached che in file
  • Il backend veloce è sempre richiesto prima del backend lento
  • se non si trova nulla nel backend veloce, magento cerca nel backend lento

Perché questi due livelli di gestione? memcached e altri backend veloci sono memorie di memoria. Quindi significa che i dati possono essere danneggiati o scomparsi.

Come è possibile aumentare le prestazioni di questa configurazione?

Disabilitare la seconda scrittura è probabilmente una delle opzioni più efficienti. Questo è spiegato nel quarto articolo che hai citato. Ma non sei in grado di utilizzare senza modifiche il codice sorgente slow_backend_store_data. Nel tuo contesto, non consiglio di effettuare questa personalizzazione per i seguenti motivi: i tuoi dati memorizzati nella cache non saranno mai controllati. Memorizzerai i dati in memoria, guadagnerai prestazioni, ma forse invierai ai tuoi visitatori un contenuto non valido. Quindi è necessario trovare una soluzione che garantisca l'accesso alla memoria (per prestazioni migliori), il controllo della scrittura e la possibilità di disabilitare la memorizzazione nella cache slow_backend_store_data. Puoi raggiungere questo contesto:

  • sostituire il server memcached con uno redis (redis può controllare la lettura e la scrittura come è fatto da un filesystem) e continuare a usare apc come ottimizzatore di codice byte

  • * assicurati di essere in grado di utilizzare l'opzione slow_backend_store_data * personalizzando il codice sorgente o passando a un back-end lento del database (sì, aumenta il carico del tuo server di database, ma se la tua politica della cache è ben definita, non dovrebbe essere un problema)

  • * disattivare l'opzione slow_backend_store_data * : in questa configurazione non è più necessario, hai il controllo di lettura e scrittura fatto da redis.


2

Come nota aggiuntiva a questo, abbiamo scoperto che quando si utilizza APC con Magento (per la cache opcode - si usa Redis per la pagina Magento convenzionale e si blocca la memorizzazione nella cache) è importante assicurarsi che l'impostazione stat sia 0 in produzione (ma 1 in sviluppo):

apc.stat = 0

L'impostazione apc.stat viene utilizzata per determinare se controllare uno script su ogni richiesta per determinare se è stato modificato ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) e quindi impostarlo su 0 in un ambiente di produzione porterà il vantaggio in termini di prestazioni di APC che non esegue questo controllo con ogni richiesta.

Vale la pena notare che una volta che apc.stat è impostato su 0, sarà probabilmente necessario riavviare il processo del server Web per raccogliere le modifiche ai file (ad esempio post-distribuzione), ma ciò dovrebbe comunque far parte della strategia di post-distribuzione.


1

La cosa migliore che abbiamo fatto per velocizzare significativamente il back-end è installare REDIS come gestore di cache . Ora è supportato anche in core da Magento 1.8 e versioni successive.

Nulla è paragonabile ... ora è click click clickerdy ​​click

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

Inoltre potresti considerare di aggiungere l'estensione Redis Session per aggiungere anche sessioni al server di memoria redis ...

In bocca al lupo!


0

Da questo file local.xml, Magento prenderà l'ultima voce e utilizzerà Memcache. Penso che ci sia confusione tra come APC e Memcache possano lavorare con Magento.

Innanzitutto, APC ha 2 usi:

  • cache del codice operativo: compila i tuoi file php in codice operativo, rendendo l'esecuzione dello script circa il 25% più veloce
  • archiviazione chiave / valore: può essere utilizzata da Magento come sistema cache.

Memcache invece è solo un archivio chiave / valore. Il grande vantaggio di Memcache è che può funzionare in modalità client-server, quindi più server frontend possono utilizzare la stessa cache, che è indispensabile se si hanno più server che servono lo stesso sito Web.

La configurazione più comune è installare APC per ottenere la cache del codice operativo (in modo da ottenere un'esecuzione dello script del 25% più veloce) e usare Memcache come un server cache. Ho anche usato APC come sistema cache e sebbene in teoria dovrebbe essere un po 'più veloce di Memcache, non si può dire la differenza.


Quindi, se leggo questo: la configurazione più comune è installare APC per ottenere la cache del codice operativo (in modo da ottenere un'esecuzione dello script del 25% più veloce) e usare Memcache come server cache. Allora come possiamo usare entrambi insieme? È così: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

Per utilizzare entrambi insieme, non è necessario dichiarare nulla a che fare con APC.
Ben Lessani - Sonassi,

Quindi il codice sarebbe tutto? <cache> <backend> memcached </backend> e tralascia la prima parte
snh_nl

Inoltre. Per me la velocità di backend è sempre stata una misura per la velocità complessiva (dato che FPC ecc. Non si applica qui) ...
snh_nl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.