PHP opcode no núcleo via OPCache

O PHP 5.5 introduziu o cache de opcode no núcleo via OPCache. O OPCache era conhecido anteriormente como Zend Optimizer + e, embora livre, era de código fechado. O Zend decidiu abrir o código-fonte da implementação e incluí-lo na distribuição principal do PHP.

O PHP 5.5 introduziu o cache de opcode no núcleo via OPCache. O OPCache era conhecido anteriormente como Zend Optimizer + e, embora livre, era de código fechado. O Zend decidiu abrir o código-fonte da implementação e incluí-lo na distribuição principal do PHP. O OPCache também está disponível como uma extensão através do pecl e é compatível até o PHP 5.2. Enquanto outras soluções de cache de opcode como o APC existem, agora que o OPCache é empacotado com o PHP, ele provavelmente se tornará o padrão daqui para frente.

O que é um cache de opcode e como funciona? Toda vez que um script PHP é requisitado, o script PHP é analisado e compilado em opcode, que é então executado no Zend Engine. Isto é o que permite aos desenvolvedores PHP pular a etapa de compilação necessária em outras linguagens como Java ou C # – você pode fazer alterações em seu código PHP e ver essas mudanças imediatamente. No entanto, as etapas de análise e compilação aumentam seu tempo de resposta e, em um ambiente que não seja de desenvolvimento, muitas vezes são desnecessárias, pois o código do seu aplicativo muda com pouca frequência.

Quando um cache opcode é introduzido, depois que um script PHP é interpretado e transformado em opcode, ele é salvo na memória compartilhada e as solicitações subseqüentes pularão as fases de análise e compilação e alavancarão o opcode armazenado na memória, reduzindo o tempo de execução do PHP.

Quanto benefício você pode esperar de um cache opcode? Como muitas coisas na vida, a resposta é que depende. Para testar o benefício do OPCache, pegamos um aplicativo de demonstração PHP existente usado no AppDynamics e instalamos o OPCache. As configurações do OPCache eram bastante diretas, mas optamos por usar 0 para a taxa de atualização, o que significa que um script nunca será verificado para ver se está atualizado. Embora aplicável a um ambiente de produção, isso significa que você deve excluir o cache opcache ao implantar o novo código.

Para entender o benefício de desempenho da habilitação do OPCache, o agente PHP do AppDynamics foi instalado. O agente PHP detecta automaticamente a topologia do aplicativo e monitora métricas e fluxogramas para transações comerciais, serviços de aplicativos e back-ends em seu aplicativo da Web, injetando instrumentação na instância do servidor da Web ativada para PHP no tempo de execução. Aproveitando as métricas coletadas pelo AppDynamics, podemos ver a diminuição no tempo de resposta que o OPCache oferece.

Depois que o OPCache foi habilitado no aplicativo, houve uma redução de 14% no tempo de resposta para o aplicativo em geral. O AppDynamics tem um recurso chamado ” comparar lançamentos “, que permite selecionar separar intervalos de tempo e comparar métricas principais. Na captura de tela abaixo, estamos comparando dois intervalos de tempo pequenos – 14 de março das 9:00 às 12:00 e 14 de março das 13:00 às 16:00, já que o OPCache estava ativado às 12h10 de 14 de março.

Embora uma redução de 14% no tempo de resposta seja boa, especialmente considerando a quantidade mínima de trabalho necessária para instalar e ativar o OPCache, pode ser menor do que você esperava. A diminuição geral do aplicativo no tempo de resposta obscurece a variação observada em diferentes páginas dentro do aplicativo.

O AppDynamics analisa um conceito chamado transação comercial, que representa uma agregação de solicitações de usuários semelhantes para realizar uma atividade lógica do usuário. Neste aplicativo de demonstração, estávamos gerando carga em quatro transações comerciais específicas: Exibir produto, pesquisa, login e loop. Usando a funcionalidade de comparação de lançamentos do AppDynamics, em vez de focar nas transações de negócios individuais, vemos uma grande variação entre as diferentes transações de negócios no tempo de resposta depois que o OPCache foi introduzido.

Vamos examinar cada transação comercial e determinar por que algumas transações tiveram uma grande redução no tempo de resposta, enquanto outras tiveram uma redução moderada ou mínima no tempo de resposta.

A transação comercial de login teve uma redução substancial no tempo de resposta, 74%.

A transação de negócios Login é relativamente simples, conforme mostrado no mapa de fluxo do AppDynamics abaixo (um mapa de fluxo representa graficamente as camadas, nós e back-ends e o processo flui entre eles em um aplicativo gerenciado). A transação passa por um controlador padrão do Symfony e renderiza um formulário html básico para login – não há bancos de dados ou serviços externos envolvidos. Nesta transação de negócios em particular, a maioria do tempo de resposta foi gasto analisando e compilando o PHP. Depois que essas etapas são removidas por meio de um OPCache, o tempo de resposta cai drasticamente.

A transação comercial Product View apresenta uma redução semelhante no tempo de resposta em 74%.

A transação comercial Product View depende do memcache e do banco de dados MySQL, embora apenas 2% do tempo de requisição seja gasto fora do PHP (depois que o OPCache foi ativado, isso aumentou para 8%) e, portanto, vemos um grande benefício do cache opcode como vimos na transação comercial de Login.

O tempo de resposta da transação de negócios de Pesquisa caiu apenas 8%.

Observando o mapa de fluxo, a maior parte do tempo de resposta é gasto no serviço Java de back-end, com uma pequena quantidade de tempo gasto na rede. A ativação do OPCode resultou em uma redução de 70% no tempo de resposta no PHP, mas como o PHP era apenas 11% do tempo total de resposta, o efeito foi silenciado.

Antes: depois:

A transação comercial Loop não faz parte do aplicativo de demonstração, mas foi adicionada especificamente para este teste. A transação comercial Loop teve apenas uma redução de 6% no tempo.

Loop tem 3 linhas de código – ele faz 10 milhões de loops e incrementa um contador em cada loop. A quantidade de tempo que leva para analisar e compilar o código é pequena em comparação com o tempo que leva para realmente executar o opcode, daí a pequena diminuição no tempo de resposta que permite o armazenamento em cache do opcode.

Para ilustrar a diferença, podemos revisar um gráfico de chamadas de cada transação. O AppDynamics captura capturas instantâneas de determinadas solicitações e uma captura instantânea contém o gráfico de chamadas. Olhando para os gráficos de chamada abaixo para Loop e Login, vemos que o Login tem muito mais código PHP para analisar e compilar:

 

Loop

 

Entrar

Em resumo, os caches opcode fornecem uma maneira rápida de diminuir a latência de seu aplicativo PHP e devem sempre ser ativados em ambientes PHP de produção. A diminuição no tempo de resposta dependerá principalmente de duas coisas: 1. A quantidade de tempo que a solicitação gasta no PHP. Se o seu aplicativo gastar muito tempo aguardando um banco de dados retornar resultados ou depender de serviços Web de terceiros lentos, a diminuição no tempo de resposta de um cache de opcódigo estará no lado inferior. 2. Se seus scripts PHP forem muito básicos, incluindo apenas a quantidade mínima de código para processar a solicitação, em comparação com o uso de uma estrutura, a redução no tempo de resposta também será limitada. Comece atualizando para o PHP 5.5 ou instalando o Zend OpCache hoje.

Fontes:

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

https://blog.appdynamics.com/engineering/why-every-php-application-should-use-an-opcache/

Renato Lucena

Developer PHP, Laravel. Goiania-GO https://www.linkedin.com/in/renato-de-oliveira-lucena-33777133/

Você pode gostar...