Quale cache PHP (opcode) si dovrebbe usare e perché?


44

Continuo a sentir parlare di alcune cache PHP (opcode) come - APC, XCache, Memcache, eAccelerator, ecc.

Ma non sono mai riuscito a capire come scegliere uno. Oltre ai vantaggi in termini di prestazioni, che un sistema di memorizzazione nella cache dovrebbe offrire, quali altri fattori dovrebbero essere fonte di preoccupazione.

Ad esempio, perché dirai che il sistema X cache è migliore di Y? Sono meno preoccupato per il guadagno relativo delle prestazioni. Le piccole differenze tra due sistemi qualsiasi contano meno.

Se una risposta generica alla mia domanda non è possibile, ecco alcuni suggerimenti. Uso VPS dedicato con Mediatemple (con accesso root). La RAM è 512 MB (fisica) + 400 MB (scambio) Sono preoccupato per WordPress e i suoi cugini WordPress-MU e BuddyPress. Il 90% dei nostri codici / siti rientra nella famiglia di WordPress.

Grazie in anticipo per l'aiuto.

Risposte:


33

I prodotti che elenchi hanno scopi diversi.

Cache OPCode

Ci sono molti acceleratori PHP (OPCaches) come visto in questo elenco di Wikipedia . Come è comune con i prodotti open source, sono tutti abbastanza simili. XCache è l'acceleratore PHP lighttp ed è la scelta predefinita quando si esegue quel HTTPd. Funziona bene anche con Apache, tuttavia APC sembra essere un po 'più "gioca bene con gli altri" socialmente parlando, essendo ufficialmente supportato come parte di PHP, ed è rilasciato al passo con la distribuzione ufficiale di PHP.

Ho abbandonato usA eAccelerator a causa del suo rallentamento dello sviluppo e in ritardo rispetto alle versioni di PHP, e lo stato benedetto ufficiale offerto da APC con prestazioni simili.

Questi prodotti in genere vengono inseriti; nessun cambio di codice potenziamento istantaneo delle prestazioni. Con basi di codice di grandi dimensioni (Drupal, Wordpress) le prestazioni possono essere fino a 3 volte migliori , riducendo i tempi di risposta e l'utilizzo della memoria.

Memorizzazione nella cache dei dati

Memcache è un prodotto leggermente diverso: potresti considerarlo un leggero sistema di valori chiave che può essere ridimensionato su più server . Il software deve essere migliorato per supportare Memcache e risolve alcuni problemi meglio di altri. Se sul tuo sito Web fosse presente un elenco di valori azionari in tempo reale, è possibile utilizzare Memcache per conservare un elenco residente del valore corrente visualizzato sul sito Web. È possibile utilizzarlo per memorizzare i dati della sessione per un riutilizzo a breve termine. Non lo useresti per altre cose come cache a tutta pagina o come sostituto di MySQL.

Esistono anche componenti aggiuntivi di Wordpress come WP-Super-Cache che possono migliorare drasticamente le prestazioni di Wordpress (infatti, WP-Super-Cache può competere con i siti basati su HTML statico in molti casi)

In sintesi, consiglio vivamente APC se si desidera "impostarlo e dimenticarlo, prodotto ben supportato".


Questa risposta è in discussione su Meta: meta.stackexchange.com/questions/15474/…
Brad Gilbert,

Compila " [4]: http://" per correggerlo.
Brad Gilbert,

Grazie mille SirStan! La tua risposta non solo ha risolto il mio problema, ma mi ha anche aiutato a ottenere maggiori informazioni sul mondo della cache. Voglio solo chiederti un'altra cosa. Sto già usando wp-supercache. È una buona idea combinarlo con APC? APC migliorerà ulteriormente le prestazioni in modo significativo? APC e Wp-SuperCache lavoreranno insieme? Ho bisogno di entrambi? O APC renderà ridondante Wp-SuperCache?
rahul286,

Nota: APC esegue sia la memorizzazione nella cache dei dati sia la memorizzazione nella cache del codice operativo.
lo_fye,

2
Questa risposta è ora molto datata. È improbabile che APC venga aggiornato per le versioni future di PHP essendo stato sostituito dall'ottimizzatore di Zend e dalla cache opcode (ora nota come opcache) dalla versione 5.5. Tuttavia, non ho visto una differenza sostanziale nelle prestazioni ( symcbean.blogspot.co.uk/2013/09/… ) ulteriormente la mancanza di supporto dati in opcache e la mancanza di richieste di memoria potrebbe rendere il contatore degli aggiornamenti produttivo per alcuni.
symcbean,


6

APC sarà integrato in PHP6, quindi è una scelta logica. Lo uso e l'incremento delle prestazioni è sorprendente. Se è necessario memorizzare nella cache qualcosa di diverso dagli opcode (ovvero i risultati della query db), è possibile utilizzare anche APC per questo, ma non è possibile condividere le cache APC tra più server. Se devi solo memorizzare nella cache su un singolo server, APC è eccezionale. Se devi ridimensionare su più server e vuoi condividere una cache tra loro, memcached è il tuo uomo.

Una cosa che vorrei fare, però, è creare una classe wrapper per qualsiasi cache (non opcode) che fai. In questo modo è possibile sostituire il motore di memorizzazione nella cache senza modificare il codice.


WOW. Se avessi conosciuto lo stato ufficiale di APC, sarei tornato indietro a lungo termine ... :-) Inoltre non sapevo molto sulla differenza di cache opcode / non-opcode. Come scelta personale, non voglio passare in rassegna la creazione di classi wrapper o la modifica della fonte delle mie app per aiutarle ad adattarsi con la cache env.
rahul286,

6
Nota che, poiché PHP 5.5 ha integrato Zend Opcache come cache "ufficiale" del codice operativo, penso sia improbabile che passino ad APC per PHP 6.
Matteo Tassinari,

1
Per correggere ciò: PHP 5.5 viene effettivamente fornito con Zend Opcache. Non ci sarà PHP 6. Ci sarà invece un PHP 7. L'APC è da considerarsi quasi (?) Obsoleto.
Jisse Reitsma,

6

Solo per notare che le cose sono cambiate un po 'e sembra che APC non sarà incluso nel core di PHP 6.

APC ha uno sviluppo lento e sembra che non sarà mai compatibile con PHP 5.5. Per questo motivo, sembra che i ragazzi di PHP stiano impostando l'estensione cache opcode Zend OPCache come estensione PHP CORE. Ti interessa leggere di più qui http://wiki.php.net/rfc/optimizerplus .

Nota importante: Zend OPCache non ha una cache di dati utente come APC, quindi se hai bisogno di una cache di dati utente puoi usarla insieme a Memcache.


1
Invalida anche l'intera cache quando si riempie (le voci non valide NON vengono rimosse), quindi se hai più codice della memoria o distribuisci frequentemente, aspettati di vedere picchi di prestazioni.
symcbean,

3

Se esegui la versione PHP almeno 5.50, OpCache è la soluzione migliore (libreria nativa PHP / PECL). Dovrebbe venire precompilato se si installa da binario.

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

Se si esegue la versione di PHP precedente alla 5.5, APC (cache OpCode nativa PHP / PECL) sarebbe la scelta più semplice, sebbene sia considerata non mantenuta e morta:

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

L'uso della funzionalità OpCache nativa di PHP dovrebbe farti risparmiare il problema di mantenere librerie di terze parti.


1
Se esegui PHP <5.5, la prima cosa che dovresti fare è aggiornarlo.
Michael Hampton

@ michael-hampton :: Infatti! Ma in alcuni rari casi non è possibile aggiornare PHP senza aggiornare il sistema operativo, il che potrebbe anche significare un nuovo requisito hardware. Esempio: lavoro per un'azienda che esegue server IBM serie i, versione 6somethings. La nostra versione di PHP è 5.4.3. Poiché IBM si affida a Zend per il porting delle versioni di PHP, PHP 5.6 richiede una versione più recente del sistema operativo IBM-i - 7.1 o più recente (e successivamente una versione più recente del server Zend PHP), che richiede nuovi server Power-8 e così via ... meh.
recluta il

0

Memcache memorizza nella cache coppie chiave / valore, non codici operativi. Puoi usarlo insieme a una delle cache del codice operativo.


Sembra dalla risposta di SirStan (sotto) che memcache potrebbe aver bisogno di me per modificare le mie app PHP. In realtà sto usando Wordpress e modificando il suo codice principale non sarà una buona idea.
rahul286,
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.