
Eu li em um site que outro benefício de ter o Lighttpd na frente do Apache é o menor número de processos filhos. O Lighttpd lidará com solicitações de keep-alive e de clientes, enquanto os processos filhos do Apache servem páginas dinâmicas mais rapidamente devido à comunicação de latência muito baixa entre o Lighttpd e o Apache. Estou tentando encontrar o link, mas estou tendo dificuldades.
Dado que já possuo um servidor Lighttpd dedicado para meus conteúdos estáticos (img, vid, css, js, html, etc.) e outro servidor Apache dedicado para minhas páginas dinâmicas (php), gostaria de implementar esta técnica se realmente for tem algum ganho de desempenho.
1) Alguém colocou um Lighttpd na frente do Apache para o mesmo propósito explicado acima?
2) Existe realmente um ganho de desempenho nisso? Quanto?
3) E quanto à sobrecarga do Lighttpd ao lidar com a solicitação ao Apache, realmente vale a pena?
Obrigado!
Responder1
- Tínhamos um leve serviço de conteúdo estático e encaminhamento de solicitações dinâmicas para o Apache no mesmo servidor, mas escutando em outra porta
- o "forward to apache for dynamic" não foi feito para fins de performance, mas apenas para ter um único servidor do ponto do cliente, atendendo tudo. No entanto, se você puder evitar conexões excessivas com o Apache, será um bom benefício colateral. Mais conexões = mais processos = mais memória (especialmente com mod_php). Então, sem números, desculpe.
- a sobrecarga parecia negligente em comparação com o porco que é o Apache
Dito isso, você deve considerar o proxy reverso Varnish em vez de (ou na frente de) lighty como seu frontend. É muito rápido e eficiente. Especialmente interessante para armazenar páginas dinâmicas em cache (ou fragmentos de páginas, usando ESI), ajuda a reduzir a carga de backend e a absorver os picos de tráfego.
E possivelmente use o nginx (com PHP-FCGI) como backend em vez do Apache (embora seja uma tarefa mais complicada do que adicionar um frontend Varnish) (o nginx também pode ser usado como frontend, mas não é tão bom quanto um proxy reverso dedicado como Verniz). Isenção de responsabilidade: não tenho experiência com nginx;)
Responder2
Eu costumava estar na mesma situação, processando o lighttpd próximo ao apache) por reduzir a carga no apache.
É melhor servir conteúdo estático com um servidor web leve, pois requer menos recursos. Também devo mencionar que o PHP requer que o Apache seja executado no modo pré-bifurcado, o que impede que o Apache seja executado com eficiência. Você pode distribuir a carga entre dois servidores da Web configurados de maneira diferente, cada um lidando com o tráfego em que é melhor.
Algumas notas de implementação:
Você tem três opções:
- modifique seu código e segmente o tráfego na camada IP
- não modifique seu código e segmente o tráfego na camada de aplicativo (http)
- fazer com que um dos servidores web passe solicitações que chegam ao outro servidor web para atendimento real
O primeiro é mais rápido, o segundo requer menos configuração, o terceiro é como uma mula.
Eu não consideraria a terceira opção se fosse você, pois ela traz um pesadelo de configuração, além disso, se você configurar algo incorretamente no primeiro servidor web, nada funcionará e será mais difícil identificar onde está o problema.
No passado, eu precisava de uma solução com urgência, então optei pela opção 2 e utilizei um proxy reverso chamadolibrapara segmentar solicitações de conteúdo estático/dinâmico e distribuir a carga para dois servidores web diferentes.
Embora funcione, requer monitoramento ativo do conteúdo http, o que prejudica o desempenho (um daemon extra em execução).
Com a opção 2, você pode obter melhor desempenho utilizando um IP extra para conteúdo estático (static.domain.org) e fazer com que os clientes consultem este static.domain.org para o conteúdo. Ainda será necessário um proxy reverso, mas o proxy não precisa verificar o cabeçalho Host: em nenhuma das solicitações, portanto será mais rápido.
aqui está um trecho de configuração de libra para sua referência:
ListenHTTP
Address 195.175.71.17
Port 80
Client 30
RewriteLocation 2
Service
HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
URL "^/static/content"
BackEnd
Address 127.0.0.1
Port 81
TimeOut 300
End
End
Service
HeadRequire "^[Hh]ost:\s*www.nasa.gov$"
BackEnd
Address 127.0.0.1
Port 80
TimeOut 300
End
End
ListenHTTP