Qual cache de PHP (opcode) deve-se usar e por quê?

44

Eu continuo ouvindo sobre alguns caches PHP (opcode) como - APC, XCache, Memcache, eAccelerator, etc.

Mas eu nunca consegui descobrir como proceder para escolher um. Além dos benefícios de desempenho, que um sistema de cache deve oferecer, outros fatores devem ser um ponto de preocupação.

Como por que você dirá que o sistema de cache X é melhor que Y? Estou menos preocupado com o ganho relativo de desempenho. Pequenas diferenças entre dois sistemas são menos importantes.

Se uma resposta genérica para minha pergunta não for possível, aqui estão algumas dicas. Eu uso VPS dedicado com Mediatemple (com acesso root). RAM é 512 MB (físico) + 400 MB (swap) Estou preocupado com o WordPress e seus primos WordPress-MU e BuddyPress. 90% dos nossos códigos / sites se enquadram na família WordPress.

Agradecemos antecipadamente por alguma ajuda.

rahul286
fonte

Respostas:

33

Os produtos que você lista servem a propósitos diferentes.

Caches OPCode

Existem muitos aceleradores PHP (OPCaches) como vistos nesta lista da Wikipedia . Como é comum nos produtos de código aberto, todos são bastante semelhantes. O XCache é o acelerador PHP lighttp e é a opção padrão quando você está executando esse HTTPd. Ele também funciona bem com o Apache, no entanto, a APC parece um pouco mais "socialmente bem com os outros" falando socialmente, sendo oficialmente suportada como parte do PHP e é lançada em etapas com a distribuição oficial do PHP.

Abandonei o usAccelerator devido ao seu desenvolvimento lento e atrasado em relação às versões do PHP, e o status oficial de abençoado que a APC oferece com desempenho semelhante.

Esses produtos geralmente são vendidos; sem alteração no código, aumento instantâneo do desempenho. Com grandes bases de código (Drupal, Wordpress), o desempenho pode ser até 3x melhor , diminuindo o tempo de resposta e o uso de memória.

Cache de Dados

Memcache é um produto ligeiramente diferente - você pode pensar nele como um sistema leve de valores-chave que pode ser dimensionado para vários servidores . O software precisa ser aprimorado para dar suporte ao Memcache e resolve alguns problemas melhor do que outros. Se você tinha uma lista de valores em tempo real do seu site, pode usar o Memcache para manter uma lista residente do valor atual que é exibido em seu site. Você pode usá-lo para armazenar dados da sessão para reutilização a curto prazo. Você não o usaria para outras coisas, como caches de página inteira ou como substituto do MySQL.

Também existem complementos do Wordpress, como o WP-Super-Cache, que podem melhorar drasticamente o desempenho do Wordpress (na verdade, o WP-Super-Cache pode rivalizar com sites estáticos baseados em HTML em muitos casos)

Em resumo - eu recomendo a APC se você quiser um "configure e esqueça, produto bem suportado".

SirStan
fonte
Esta resposta está sendo discutido em Meta: meta.stackexchange.com/questions/15474/...
Brad Gilbert
Preencha " [4]: http://" para corrigi-lo.
23909 Brad Gilbert
Muito obrigado SirStan! Sua resposta não apenas resolveu meu problema, mas também me ajudou a obter mais informações sobre o mundo do cache. Eu só quero te perguntar mais uma coisa. Eu já estou usando o wp-supercache. É uma boa ideia combiná-lo com a APC? A APC melhorará ainda mais o desempenho significativamente? A APC e o Wp-SuperCache trabalharão juntos? Preciso dos dois? Ou a APC tornará o Wp-SuperCache redundante?
rahul286
Nota: A APC realiza o armazenamento em cache de dados e o código operacional.
lo_fye
2
Esta resposta está agora muito datada. É improvável que a APC seja atualizada para versões futuras do PHP que foram substituídas pelo otimizador do Zend e pelo cache de código de operação (agora conhecido como opcache) desde a versão 5.5. No entanto, eu não vi uma diferença substancial no desempenho ( symcbean.blogspot.co.uk/2013/09/… ), além disso, a falta de suporte de dados no opcache e a falta de recuperação de memória podem tornar a atualização do contador produtiva para alguns.
symcbean 26/09/15
6

A APC será incorporada ao PHP6, por isso é uma escolha lógica. Eu uso, e o aumento de desempenho é incrível. Se você precisar armazenar em cache algo diferente de opcodes (ou seja, resultados da consulta db), poderá usar a APC para isso também, mas não é possível compartilhar caches da APC entre vários servidores. Se você só precisa armazenar em cache em um único servidor, a APC é ótima. Se você precisar expandir para vários servidores e quiser compartilhar um cache entre eles, o memcached é o seu jeito.

Uma coisa que eu faria, no entanto, era criar uma classe de wrapper para qualquer cache (sem código op) que você fizer. Dessa forma, você pode trocar o mecanismo de cache sem alterar seu código.

lo_fye
fonte
UAU. Se eu soubesse o status oficial da APC, eu teria mudado para ele a longo prazo ... :-) Eu também não sabia muito sobre a diferença de cache de opcode / não opcode. Como opção pessoal, não quero passar pela sobrecarga de criação de classes de wrapper ou modificação da fonte dos meus aplicativos para ajudá-los a se adaptarem ao ambiente de cache.
rahul286
6
Note-se que, desde o PHP 5.5 integrado Zend Opcache como cache "oficial" opcode, eu acho que é improvável que eles vão mudar para APC para PHP 6.
Matteo Tassinari
1
Para corrigir isso: o PHP 5.5 é fornecido com o Zend Opcache. Não haverá PHP 6. Em vez disso, haverá um PHP 7. O APC deve ser considerado quase (?) Obsoleto.
Jisse Reitsma
6

Apenas para observar que as coisas mudaram um pouco e parece que a APC não será incluída no núcleo do PHP 6.

A APC tem desenvolvimento lento e parece que nunca será compatível com o PHP 5.5. Por isso, parece que os caras do PHP definirão a extensão de cache de código de código Zend OPCache como a extensão PHP CORE. Você pode ler mais aqui http://wiki.php.net/rfc/optimizerplus .

Nota importante: O Zend OPCache não possui cache de dados do usuário como o APC; portanto, se você precisar de cache de dados do usuário, poderá usá-lo junto com o Memcache.

Nemke
fonte
1
Ele também invalida todo o cache quando ele fica cheio (entradas inválidas NÃO são removidas) - portanto, se você tiver mais código do que memória ou implantar com freqüência, espere ver picos de desempenho.
Symcbean #
3

Se estiver executando a versão PHP pelo menos 5,50, o OpCache é sua melhor aposta (biblioteca nativa PHP / PECL). Ele deve vir pré-compilado se estiver sendo instalado a partir do binário.

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

Se estiver executando a versão do PHP anterior à 5.5, o APC (cache OpCode nativo do PHP / PECL) seria a opção mais simples, embora seja considerado não mantido e morto:

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

O uso da funcionalidade nativa do OpCache do PHP poupa o trabalho de manter bibliotecas de terceiros.

recurso
fonte
1
Se você estiver executando o PHP <5.5, a primeira coisa que você deve fazer é atualizá-lo.
Michael Hampton
@ Michael-Hampton :: De fato! Mas, em alguns casos raros, você não pode atualizar o PHP sem atualizar o sistema operacional, o que pode até significar um novo requisito de hardware. Exemplo - Eu trabalho para uma empresa que executa servidores IBM i-series, versão 6somethings. Nossa versão do PHP é 5.4.3. Como a IBM conta com o Zend para transportar versões do PHP, o PHP 5.6 requer uma versão mais nova do IBM-i OS - 7.1 ou mais recente (e subsequentemente uma versão mais recente do servidor Zend PHP), que requer novos servidores Power-8 e assim por diante ... meh.
recurs
0

O Memcache armazena em cache pares de chave / valor, não opcodes. Você pode usá-lo em conjunto com um dos caches do opcode.

user10699
fonte
Parece pela resposta de SirStan (abaixo) que o memcache pode precisar de mim para modificar meus aplicativos PHP. Na verdade, estou usando o Wordpress e modificar seu código principal não será uma boa ideia.
precisa saber é o seguinte