Pergunta

A fim de aliviar carga povo de Apache muitas vezes sugerem usando lighttpd para servir conteúdo estático.

por exemplo. http://www.linux.com/feature/51673

Nesta configuração Apache passa solicitações de conteúdo estático para trás lighttpd via mod_proxy, enquanto servia-se solicitações dinâmicas.

A minha pergunta é: como é que isto reduzir a carga sobre o servidor? Desde que você ainda tem um processo de apache gerado para cada solicitação que vem, como é que isto impactar positivamente a carga? Do que eu posso ver o tamanho do processo Apache proxy seu pedido através do lighttpd é tão grande quanto seria se estivesse servindo o arquivo em si.

Foi útil?

Solução

Running Lighttpd por trás Apache para servir arquivos estáticos certamente parece braindead para mim. Apache ainda tem que descompactar o HTTP pacotes e analisar a solicitação por meio de sua árvore de análise, enviar pedidos de proxy, e depois Lighttpd tem de voltar a descompactação, bateu o sistema de arquivos e enviar os arquivos de volta através do Apache. Eu nunca ouvi falar de alguém usando uma configuração como esta em produção.

O que você vai ver, é que as pessoas que utilizam um servidor web leve como Nginx como um frontend servidor para servir arquivos estáticos e dinâmicos URLs proxy para Apache. Ou, você pode executar Varnish ou Squid como um cache frontend proxy reverso, de modo que todos os seus arquivos estáticos de alto tráfego (ou seja, imagens, CSS etc. e todas as páginas dinâmicas você' está disposto a enviar cabeçalhos amigável-cache para) são servidos sem memória.

Apache também pode ser otimizado para servir arquivos estáticos - muitas vezes quando ouço as pessoas queixam-se Apache, eles realmente não sei como configurá-lo. Eles só nunca usou o MPM prefork (vs. rosca ou trabalhador) e têm todos os tipos de módulos habilitados (geralmente eles estão correndo de cozinha, pia pacote Apache uma distribuição Linux que constrói tudo como módulos e padrões para permitir 10-20 módulos ou mais). Tune Apache desligando módulos desnecessários / características estúpidas como suporte para .htaccess (que faz Apache digitalizar o sistema de arquivos em cada solicitação!) Em primeiro lugar. (Você também pode executar duas instâncias do Apache, com uma "luz" Apache como frontend que proxies para um "pesado" Apache para solicitações dinâmicas ... talvez o seu frontend é enfiada, mas a sua infra-estrutura é prefork porque você tem que executar thread-inseguro módulos externos como mod_php.)

Re:

Uma vez que você ainda tem um processo de apache gerado para cada solicitação que vem no, como é que este impacto positivo A carga? Do que eu posso ver o tamanho do processo Apache proxy sua solicitação através lighttpd é tão grande como seria se fosse servir o próprio arquivo.

Se você está gerando processos em cada solicitação, então isso significa que você está usando o MPM prefork. Tenha em mente que quando o sistema operacional relata o uso de memória para cada um desses processos, nem todos que a memória é ligado, muitos desses processos estão ociosos. E quando você está falando sobre a velocidade, você está mais preocupado com o pedido de análise e ramos de código interno para uma determinada solicitação (o quanto de processamento é o servidor está fazendo?) Do que com o uso de memória relatado pelo OS.

Por exemplo, se você permitir que algo como mod_php, então cada um desses processos de trabalho está a ir instantaneamente para cima em cerca de 20-40m (dependendo do que está habilitado em seu intérprete PHP), mas isso não significa que Apache está usando que a memória sobre os pedidos estáticos. Claro, se você está otimizando seu servidor para o máximo de concorrência em arquivos estáticos pequenos, em seguida, permitindo mod_php ainda seria muito ruim, você não vai ser capaz de caber quase tantos processos prefork na RAM.

Eu provavelmente poderia chegar a uma "configuração pesadelo" para o Apache que se torná-lo realmente mais lento servir arquivos estáticos de proxy os pedidos para um backend Lighttpd, mas isso implicaria habilitando recursos caros como. htaccess no Apache que são deficientes em Lighttpd, por isso não seria realmente justo.

Outras dicas

  1. Se você ainda tem o poder para servir estático e conteúdo dinâmico a partir do mesma máquina (como eles na sua artigo referenciado fazer), então eu realmente vejo nenhum ponto em que a instalação.
  2. Talvez ele faz reduzir a carga de Apache, porque ele não tem que fazer IO para o disco, mas vai aumentar a carga de Lighttpd em mesma máquina e reduzindo, assim, a carga disponível para apache ...
  3. Talvez o acesso Lighttpd IO é mais leve, do que a de Apache 1.3, mas porque não basta mudar para Apache 2 ou Lighttpd completamente? E se o desempenho realmente começar a chupar, hospedar os arquivos estáticos em outra máquina (media.yourdomain.com).

I pequena introdução sobre como você pode fazer uma configuração de alto desempenho é encontrado aqui: Implantando Django -> rolagem para Scaling alguma página antes do fim

Eu não sei muito sobre funcionamento interno do Apache, mas uma explicação que eu vi é sobre a pressão de memória. Em suma, Apache tenta equilibrar a memória que ele usa para cache e para páginas dinâmicas; mas geralmente acaba com excesso de cache e muito pouco para apps. Se você separá-los para diferentes processos, cada um vai otimizar para o tipo de carga.

Atualmente, o que estou fazendo é usando nginx como front-end. É muito rápido e leve, e projetado especificamente como um proxy frontend; mas também serve arquivos estáticos. Na verdade, uma vez que também pode chamar processos FastCGI, você pode se livrar do Apache e ainda obter os benefícios dos processos de arquivo / app de divisão. (E há alguns extras memcached mágica que parece absolutamente genial)

(Sim, lighttpd também pode ser usado como interface para Apache e / ou FastCGI)

Você não tem um processo Apache gerado para cada solicitação -. Arquivos estáticos (imagens e outros) são obtidos diretamente pelo lighttpd

Use Apache MPM Worker fastCGI isso irá diminuir-lhe o uso de memória do servidor. MPM trabalhador serve conteúdo estático melhor então Prefork e é quase a par com lighttpd quando se trata de conteúdo estático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top