Estou usando o lighttpd como proxy front-end para meu servidor de aplicativos personalizado baseado em HTTP. Preciso configurar o lighttpd para um grande número (digamos cerca de 5.000) conexões http simultâneas que possuem um grande tempo limite e configuração KeepAlive. Cada conexão ficará praticamente ociosa. Imagine um servidor de chat baseado em HTTP.
Meu servidor HTTP está usando interação tipo http-push Comet (veja Wikipediahttp://en.wikipedia.org/wiki/Comet_(programação)). Especificamente, o cliente AJAX envia uma solicitação GET à qual o servidor não responde imediatamente. Em vez disso, o servidor espera com a conexão HTTP aberta até precisar enviar uma mensagem ao cliente com o novo estado e, em seguida, envia a resposta HTTP à solicitação GET. O cliente processa a resposta e envia outra solicitação GET, que mais uma vez o servidor não responderá imediatamente.
No entanto, para efeito de questão, a natureza exata dos pedidos não é necessária. O que é necessário é essencialmente uma configuração lighttpd que permita um grande número de conexões proxy HTTP simultâneas de baixa largura de banda abertas ao mesmo tempo.
Como configuro o lighttpd 1.4.19. Estou executando no Ubuntu 8.04. lighttpd está fazendo proxy de solicitações para meu servidor de aplicativos, bem como para meu backend Django.
Devo simplesmente definir
server.max-keep-alive-requests = 5000
e encerrar o dia?Deveria
server.max-fds = 5000
ou algum número maior?Que considerações de memória existem?
Talvez eu deva proteger meu servidor de aplicativos para que ele possa ser usado sem o proxy lighttpd (não estou tão confiante em minha programação, tendo-o voltado diretamente para o mundo, sem um proxy confiável)?
Alega-se que o lighttpd pode lidar com 10.000 conexões simultâneas. Como faço para configurá-lo para fazer metade desse número, a maioria dos quais está ociosa?
Responder1
Lembre-se de que cada conexão proxy usa (no mínimo) dois FDs, um para o cliente e outro para o servidor que está sendo proxy. Considere também ~5-50 FDs para sobrecarga.
Quanto ao restante da sua pergunta, eu diria que você precisa testar seu aplicativo em seu ambiente para encontrar as melhores configurações para você.
Responder2
Você precisará do Lighttpd-1.5.x (praticamente do SVN) para fazer isso corretamente, porque o proxy em 1.4.x não irá multiplexar a E/S do bit de comunicação de back-end Lighttpd <--> em 1.4.x.
Pelo que eu sei, descobri que o Lighttpd-1.5.x é o único proxy reverso capaz de fazer isso.
Você deseja usar mod_proxy_core
and mod_proxy_backend_http
, e usar proxy-core.max-keep-alive-requests
and proxy-core.max-pool-size
(observe como eles são prefixados com "proxy-core." em vez de "server."):http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore
Eu testei isso com 20.000 conexões keep-alive simultâneas (backend Lighttpd <->) e funciona bem.