Um aplicativo PHP se beneficiaria de ser servido de uma unidade RAM?

2

Eu sou responsável por hospedar um aplicativo PHP que seja grande e lento, mas fácil de escalar. O aplicativo é totalmente estático, com armazenamento em disco gravável necessário. Nós analisamos o aplicativo e o gargalo principal parece vir do carregamento do aplicativo e não do trabalho que o aplicativo faz. O aplicativo não usa muita CPU, embora use uma boa quantidade de memória (pense no Magento).

Atualmente, distribuímos uma série de servidores com os mesmos arquivos PHP no disco rígido e um balanceador de carga na frente deles. Fácil, mas caro.

Eu tenho lido sobre discos RAM e os benefícios de IO que eles oferecem, e queria saber se eles estariam bem compatível com aplicativos PHP.

Como os aplicativos PHP são carregados do disco para cada solicitação e muitas vezes envolvem muitos arquivos diferentes (em vez de serem mantidos na memória como em um aplicativo Java), imagino que o desempenho do disco pode ser um gargalo grave.

Colocar os arquivos PHP em um disco RAM e usar o ponto de montagem como raiz de documentos do Apache oferece benefícios de desempenho? Um script de inicialização pode criar a unidade de RAM e copiar os arquivos (que são de texto simples e pequeno) de um local permanente para a unidade de RAM temporária.

Isso faz sentido, ou devo confiar apenas no kernel do Linux para armazenar em cache os arquivos apropriados na memória?

    
por Tom Marthenal 08.07.2012 / 08:22

4 respostas

7

Não, um ramdisk realmente prejudicaria o PHP (quando combinado com soluções melhores, como um acelerador PHP).

A melhor maneira de melhorar o desempenho do PHP é usar um acelerador PHP. Estes são módulos que se conectam ao mecanismo da web (apache httpd por exemplo) e armazenam em cache o bytecode compilado de scripts PHP. Este cache é então armazenado no RAM. O resultado é que futuras chamadas para o script PHP não vão para o disco, o código de byte pré-compilado é extraído do cache. O que significa que você não ganha nada usando um ramdisk e acaba consumindo memória RAM que poderia ser usada em outro lugar.

Dependendo da sua distro e de qual mecanismo de servidor web você está usando, é provável que você já tenha um acelerador de PHP em execução.

.

Veja 2 bons artigos da Wikipédia sobre o assunto:
Acelerador do PHP
Lista de aceleradores PHP

    
por 08.07.2012 / 09:37
4

Eu ficaria inclinado a pensar que, se você tem uma máquina com RAM suficiente, o cache de disco do SO fará o mesmo no cache do conteúdo apropriado (se não melhor, porque não armazenará em cache os arquivos que < em> não são utilizados), mas você deve compará-lo em um servidor de teste, depois de verificar se você está, de fato, atingindo o disco excessivamente (com sar).

    
por 08.07.2012 / 08:32
2

O maior porco do PHP é, para cada pedido que o intérprete tem que

  1. buscar o arquivo do sistema de arquivos
  2. leia
  3. traduza para o formato executável
  4. executá-lo

Com APC , você pode pular todas as etapas e ir direto para a execução. Se você tiver problemas de desempenho e, especialmente, depois de observar os resultados de criação de perfil mencionados, instale e configure o APC. Você ficará surpreso com os ganhos de desempenho obtidos.

Eu enfrentei o problema de otimizar um grande conjunto de wikis para a organização Howtopedia ; depois dos comunicados de imprensa, a cobertura do jornal que recebiam era sistematicamente levando a carga do sistema para 100%. Configurar o APC com apenas 25 MB de cache trouxe a carga do sistema diretamente para menos de 5%. Mais alguns ajustes básicos para menos de 1%.

Ao mesmo tempo, uma vez que a maioria das etapas 1 a 3 faz a introdução de latência, o tempo de resposta dos usuários melhorou drasticamente.

Algumas dicas adicionais para o cenário que você descreve:

  • conceda à APC um segmento de cache de 25 MB ou mais (verifique se o seu sistema operacional permite segmentos SHM desse tamanho). A política de substituição de cache que o APC usa garante que o conteúdo mais solicitado esteja no cache, portanto, isso provavelmente fornecerá uma taxa de acertos acima de 95%. Aumentar a memória alocada resulta em benefícios exponencialmente menos significativos.
  • com o aplicativo predominantemente estático mencionado, desative apc.stat para obter mais desempenho. Isso permite que a APC pesquise arquivos PHP diretamente no cache, sem ter que verificar o sistema de arquivos se eles foram modificados desde a última execução. Cada solicitação é atendida inteiramente da memória, o sistema de arquivos nunca é alcançado, resultando em desempenho dramático.
  • depois de ter o APC em execução, o gargalo de desempenho pode passar para o aplicativo. Especialmente, banco de dados e sistema de arquivos, se você usar qualquer um. O Memcached pode ajudá-lo a abordar aqueles com alterações relativamente pequenas no código do seu aplicativo.
por 08.07.2012 / 14:18
0

Não, não será, se a RAM já é o gargalo.

    
por 23.08.2013 / 15:27