Eu tenho um novo servidor para jogar e estou olhando para uma tela em branco. Eu posso colocar o que eu quiser. Enquanto me sinto confortável com o Apache, continuo ouvindo como o nginx pode lidar com muito mais tráfego que o Apache, por fatores de 10, 100 e até mais. Não apenas isso é "muito, muito mais rápido".
Quando procuro artigos, encontro muitas coisas não relacionadas ao Drupal. Ou, quando me deparei com um artigo relacionado ao Drupal, é 1) o arquivo de configuração de alguém com uma rápida tentativa de explicar como configurá-lo, ou 2) alguém dizendo "não, não use o nginx, vá com o Apache com PHP fcgid "mas nunca há explicação sobre o porquê.
Então, quando se trata de Drupal, qual é a realidade aqui?
Como exemplo, estou procurando algo semelhante ao deste artigo 2bits.com . Aqui, o autor analisou bastante o Apache mod_php vs Apache com fcgid, ponderando os prós e os contras de cada um, e forneceu um estudo de caso para ilustrar o impacto no mundo real. Há informações suficientes neste artigo para que eu tome uma decisão informada sobre qual abordagem seria melhor para minha situação.
Enquanto esse autor compara mod_php a fcgid, estou procurando o mesmo tipo de visão abrangente e real do Apache vs Nginx.
Alguém mudou para o Nginx e ficou "deslumbrado" com a diferença que fez em relação ao Apache? Mesmo para ambientes altamente otimizados que já usam APC, Memcache e cache agressivo como o Varnish, quando a única variável que muda é a substituição do Apache pelo Nginx, faz a diferença suficiente por si só para merecer investir nessa tecnologia alternativa mais nova ?
O site que acessará esse servidor recebe uma média de 2 milhões de PV por mês. Pilha LAMP executando o Cent OS 6. CPU de 4 núcleos com 8 GIGS de ram. Memcached e APC farão parte do mix. Nada de especial na instalação do Drupal - basicamente o vanilla 7 com cerca de 50 módulos.
fonte
Respostas:
Estritamente falando, isso não responde à pergunta que você está fazendo. Espero que seja útil de qualquer maneira.
Apache / Nginx / Lighttpd / outro servidor web. Importa qual eu escolho? Em suma, não .
A resposta muito mais longa:
Se e somente se, você tem uma porcentagem muito grande de usuários fazendo login, caso se preocupe com o desempenho do servidor da web. Se seus usuários forem anônimos, qualquer diferença que você possa derivar, teoricamente, de otimizar nessas camadas empalidece absoluto em comparação com tornar seus recursos melhor armazenáveis em cache. Se seus arquivos css tiverem cabeçalhos de cache adequados, o UA nem sequer os solicitará pela segunda vez. Aquilo importa. Se você pode armazenar em cache suas páginas no Varnish ou em uma solução de software semelhante, servir essa página é uma questão de fazer uma pesquisa de hash e retornar uma grande parte dos dados diretamente da RAM. Aquilo importa. Em ambos os cenários, o daemon HTTP nunca está envolvido, o PHP não é chamado. O Drupal não inicializa. Nenhum conjunto grande de módulos deve ser carregado na RAM, nenhuma consulta de banco de dados demorada é executada.
Quando você executa um carregamento completo da página, de um cache frio, para um usuário conectado, em uma página complexa; muitas coisas estão acontecendo. Sim, o servidor da web está envolvido em lidar com a solicitação recebida, configurando alguns cabeçalhos e devolvendo a resposta. Mas o tempo que leva, nem é relevante no contexto do Drupal executando uma inicialização completa e emitindo sua resposta. Pode haver centenas de consultas de banco de dados sendo executadas. Lógica altamente complexa em PHP é avaliada pelo analisador. Muitos módulos estão sendo carregados na RAM. Melhorar o desempenho de qualquer uma dessas coisas, é muito mais provável que dê uma contribuição séria ao desempenho.
Por uma questão de argumento: digamos que você gastou muito tempo otimizando todo o resto.
Se você possui muitos usuários conectados e já lidou com tudo isso acima, provavelmente pode fazer a diferença, mas otimizando o desempenho ou substituindo o servidor da web. No entanto, adivinhe. Seu site é tão complexo e os padrões de uso de seus usuários específicos são únicos . Não há resposta genérica. Você precisará configurar todos os servidores Web diferentes atrás de um balanceador de carga e ver como eles se comportam no seu cenário .
O exposto acima foi uma tentativa de logicamente chegar à conclusão de que gastar o desempenho do tempo otimizando o servidor da web provavelmente é um mau uso do tempo. Eu adoraria que alguém fizesse buracos no item acima, provavelmente aprenderia algo novo com isso. :)
Algumas outras notas:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
e constatei que ele consistia em 1.512.481 linhas de código. Essa é uma quantidade absolutamente insana de trabalho para melhorar a velocidade do PHP. Acho que é porque a velocidade do PHP é muito importante para eles.fonte
OK, embora essa pergunta já tenha sido respondida, estou exigindo mais uma vez, principalmente porque não gosto das implicações dessas respostas que não fazem diferença e, como desenvolvedor da Web, odeio fazer cache com paixão .
A diferença entre o Apache e o nginx não é tanto "quão rápido eles podem atender a uma solicitação", mas quantas solicitações eles podem atender na mesma quantidade de hardware (especialmente com recursos limitados), o que é algo um pouco diferente.
O Apache é um servidor baseado em processo. Isso significa que bifurca um processo para cada solicitação. Nginx é um servidor baseado em eventos, ou seja, usa um loop de eventos (assíncrono) em vez de processos ou threads.
E enquanto um servidor baseado em processos (como o Apache) pode executar mais ou menos a par com um servidor assíncrono baseado em eventos (como o nginx) sob cargas leves, sob cargas mais pesadas, como por exemplo 10.000.000 pedidos simultâneos, o nginx usa apenas alguns megabytes de RAM, enquanto o Apache requer várias centenas de megabytes apenas para o servidor da web (sem incluir o aplicativo da web, que precisa de muito mais recursos), se é que poderia fazê-lo.
Portanto, sob cargas mais pesadas, você verá o Apache consumir muita memória RAM, o que sem surpresa diminui significativamente o desempenho.
Mais significativamente, um maior consumo de RAM significa que o Apache pode atender a menos solicitações no mesmo hardware que o nginx, o que significa que o Apache requer mais hardware para a mesma quantidade de usuários, o que significa que você tem um TCO mais alto (custo total de propriedade) com Apache do que com nginx, o que reduz seu ROI (retorno do investimento).
Memória total usada por X conexões simultâneas (menos é melhor)
Solicitações que podem ser atendidas por segundo em X conexões simultâneas em 1 conjunto de hardware (mais é melhor)
Fonte: ApacheBench, por dreamhost.com
Veja também este artigo sobre oceano digital .
Aparentemente, isso depende da arquitetura de manipulação de conexão que você escolher para o Apache.
fonte
Eu mudo do Apache para o Nginx / PHP-FPM há alguns meses.
Fiz um teste comparativo com um site drupal e testei vários casos de uso. Em um servidor VPS com 1 CPU e 512 Mo RAM
Drupal com apenas cache
Nginx
Apache
Drupal com cache e impulso
Nginx
Apache
referência para usuário autenticado (carregamento da página)
Nginx
Apache
Mas o poder do Nginx é o sistema de cache
Drupal sem Boost e Nginx com sistema de cache ativado
Você deve usar a configuração do perusio Nginx for Drupal
fonte
Aqui está um teste de desempenho para dez servidores / variantes da Web (por exemplo, Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Três dos testes estão relacionados ao Drupal.
Estou pensando que Hiawatha pode ser a melhor escolha geral. Supõe-se que tenha compatibilidade total com o Drupal , com ênfase na segurança (DoS, XSS, CSRF, prevenção de injeção de SQL) e em velocidades e dimensões semelhantes ao Nginx.
Em dois dos três testes do Drupal, Hiawatha e Nginx superam o Apache em cerca de 150%, mas no teste estático do Drupal, o Apache marginalmente supera o Nginx, enquanto Hiawatha supera o pacote em cerca de 10%.
Eu não penduraria meu chapéu em nenhum desses testes, mas ele oferece uma visão geral do desempenho em diferentes situações de uso. Eu acho que o desempenho por si só não deve ser a única consideração. Estabilidade e segurança podem ser os fatores mais importantes.
fonte
Aqui estão os resultados dos testes de carga do drupal em execução no mesmo hardware, mas com diferentes servidores da web. (nginx e apache)
Aqui está a conclusão deste teste:
fonte