Benefícios de desempenho do uso do NGINX

16

Considerando usar o NGINX para servir o magento - não estou preocupado com detalhes da implementação, mas quero saber se alguém tem coisas boas (ou ruins) a dizer sobre isso. Também é de particular interesse o uso do NGINX para carregar o magento de balanceamento.

Jonathan Bownds
fonte
nós temos 2 lojas rodando em um servidor dedicado com o NginX. Para lojas de alto tráfego, certamente há um benefício, pois o NginX apenas lida melhor com as solicitações e deixa mais recursos para o Magento. Para lojas de baixo tráfego não im certeza de que não há qualquer benefício
Sander Mangel

Respostas:

15

O Nginx é definitivamente uma boa opção para hospedar o Magento, e vem com vários benefícios agradáveis ​​(mas pequenos) que podem ajudar a melhorar o desempenho do site.

A principal diferença entre o Nginx e o Apache é que o Nginx usa o Evented IO sem bloqueio e o Apache apenas usa multithreading / processamento. Qual é a diferença e por que isso importa? Bem, no caso do Apache, digamos que ele tenha 5 threads, ele pode lidar com 5 solicitações de algo a qualquer momento. Se um desses encadeamentos demorar muito para ser concluído, restarão apenas 4 encadeamentos para lidar com outras solicitações recebidas. Se todos os 5 encadeamentos forem bloqueados, nenhuma solicitação de entrada poderá ser tratada até que um seja concluído.

Com o Evented IO, quando um thread recebe uma solicitação de algo, ele dispara um evento e passa diretamente para a próxima solicitação. Quando o evento retorna, ele passa a resposta ao cliente relevante.

Isso é aproximadamente semelhante ao funcionamento do javascript assíncrono. Você aciona uma solicitação AJAX e continua até receber um retorno de chamada.

Essa abordagem moderna é adequada para servir muitos arquivos estáticos pequenos, sem a sobrecarga de gerar muitos threads ou processos do sistema de trabalho.

O outro benefício do Nginx é o baixo consumo de memória. O Apache suporta MUITAS coisas e, ao fazer isso, possui uma alta memória e pegada computacional. Você pode analisá-lo, mas o Nginx é arquitetado do zero para ser enxuto em termos de memória.

As diferenças não são enormes, mas à medida que você aumenta muitos milhares de solicitações, essas pequenas diferenças, em conjunto, fazem uma grande diferença.

Agora é importante lembrar que o maior gargalo de desempenho em um aplicativo Magento é a execução do código PHP. Aqui há uma diferença basicamente insignificante no desempenho entre o Apache e o Nginx. O importante é usar o PHP-FPM e o MPM do trabalhador com Apache (e definitivamente evitar o prefork / mod-php). O principal motivo é que você só chama um intérprete PHP quando precisa executar o código PHP e pode usar um software de cache de código operacional como o APC de maneira eficaz (e esse é o maior aumento de desempenho que você obterá).

Último ponto a ser destacado: alguns módulos / aplicativos esperam que o Apache seja usado e a documentação pode ser direcionada ao uso do ModRewrite ou ao uso de arquivos .htaccess. Embora exista suporte ao estilo ModRewrite no Nginx, não há suporte para soluções de estilo .htaccess por diretório.

Pessoalmente, gosto do Nginx porque ele oferece conteúdo estático de forma eficiente, é muito fácil configurar o PHP-FPM e gosto muito da sintaxe de configuração. Não é uma solução mágica para problemas de desempenho, mas é uma opção flexível e robusta a considerar.

Aaron Bonner
fonte
1
Uma ótima resposta apoiada pelas descobertas da Magento, Inc.: magentocommerce.com/whitepaper
benmarks
Você concorda com Aaron 100%. Também usamos o Nginx para a maioria das implantações Magento, devido à sua capacidade de servidor de conteúdo estático mais rápido e lidar com um número maior de solicitações simultâneas em comparação com o Apache. A única desvantagem que encontramos com o Nginx é em um de nossos projetos, lançando aleatoriamente um erro de tempo limite do gateway 504 (mesmo quando a carga do servidor é muito baixa). Ainda temos que resolver este problema .. a maioria das soluções descritas em vários fóruns não ajudou muito.
Vinci Rufus
1

Eu diria que o benefício de desempenho do Nginx ao usar o Magento é negligenciável. A vantagem de E / S baseada em eventos, conforme mencionado por Aaron, também se aplica ao Apache (ao usar o MPM de evento).

Falando sobre o Magento em geral, a maior parte do processamento (99%) ocorre no PHP e no banco de dados; portanto, otimizar o primeiro 1% fornecerá relativamente pouco benefício.

No entanto, existem outros motivos para escolher o Nginx for Magento, como menor espaço de memória, melhor limite de taxa e suporte a SPDY, entre outros.

Há uma grande desvantagem no Nginx ao converter sites existentes do Magento em execução no Apache, pois muitas instruções .htaccess não são mapeadas diretamente nas instruções do Nginx. Por exemplo, o Nginx não suporta nomes de host em ACLs.

Willem
fonte