Long Polling Options: Nginx, PHP, Node.js

2

Também publicado aqui: link

Estou criando um aplicativo de pesquisa longa para transmitir pequenas alterações muito rapidamente para, possivelmente, um grande número de usuários. O aplicativo será executado em conjunto com um site executando um cms bastante padrão. Ambos serão executados em um servidor e, para começar, o banco de dados também.

Eu venho muito de um ambiente LAMP e sou definitivamente um desenvolvedor e não um administrador de sistemas. Dito isso, não tenho medo de experimentar algumas coisas novas.

Eu passei o dia pesquisando minhas opções e espero que as pessoas possam responder algumas perguntas e me dar algumas recomendações.

Eu reduzi a isso:

A. Apache and php for the website, Node.js for the app (running on a separate ip)
B. Nginx and php for both the website and app
C. Nginx and php for website, Nginx and Node.js for the app

Então as perguntas:

  1. Como o Nginx lida com o não-multi-threadingness do PHP;). O PHP será um gargalo tanto quanto o Apache teria para longas pesquisas?
  2. Ouvi dizer que uso o nginx como um proxy reverso na frente do Apache e o Node.js, é uma solução melhor do que apenas o nginx? Se sim, porquê?
  3. Qual opção você usou / recomendaria?

Tenha em mente que a facilidade de configuração pode ser um fator, estou bastante confortável com o Apache, mas eu apenas joguei com o Node (tenho um javascript strong) e nunca instalei o Nginx.

Eu ficarei feliz em fornecer esclarecimentos se alguém precisar deles.

    
por thelastshadow 12.01.2012 / 18:31

1 resposta

2

Tendo acabado de concluir um aplicativo envolvendo vários proxies reversos do nginx, eu estaria mais inclinado a escolher sua segunda ou terceira opção. ... ou talvez algo ligeiramente diferente. Vamos dividi-lo em pontos individuais a considerar:

Arquivos estáticos

Para servir arquivos estáticos (para o site ou para o aplicativo), o nó e o nginx são as opções claras, pois não se aplicam a cada nova solicitação, como o Apache. O nó é mais rápido do que o nginx ao servir arquivos estáticos, mas dependendo da quantidade de tráfego que você verá, isso pode não ser uma diferença significativa.

Eu escolheria nginx como o servidor voltado para o público e solicitações de proxy reverso para outras coisas, conforme necessário. Mesmo que seja um pouco mais lento que o nó para servir arquivos estáticos, sua flexibilidade e facilidade de configuração compensam isso. PHP, se você optar por usá-lo, é mais rápido (configurado corretamente) com nginx do que com o Apache, e os arquivos de configuração do nginx são semelhantes aos do Apache, mas mais concisos. Não deve ser muito estranho quando você mergulha nele.

SSL

Se você planeja usar SSL, salve-se agora e receba a versão mais recente do nginx para poder usar a versão mais recente do módulo SPDY do Google. Atualmente, a última versão é 1.7.3. Alguns gerenciadores de pacotes estão um pouco atrasados, então você pode ter que compilar a partir da fonte. Se esse for o caso, verifique se os sinalizadores --with-http_spdy_module --with-http_ssl_module são usados, entre outros. Aqui está um guia para isso, bem como configurar a configuração arquivos para usar o SPDY.

Como todos os seus pedidos passam pelo nginx e um único nome de domínio, você só precisa configurar o SSL em um só lugar. Todas as solicitações com proxy reverso não precisam ser HTTPS, porque ocorrem internamente. Se você fizer o node.js executar seu aplicativo, apenas terá que se certificar de que ele apenas ouça o host local e não atenda solicitações externas diretamente.

Aplicativo

O nó é uma boa opção para o código do aplicativo e a pesquisa longa que você deseja realizar. Também é bastante simples fazer proxy dessas solicitações longas de pesquisa por meio do nginx. Com essas duas opções de nginx ...

client_body_timeout 1m;
client_header_timeout 1m;

... você pode ajustar o tempo limite de solicitações. Você desejará certificar-se de que o código do seu aplicativo coloque um fim nos pedidos antes do nginx. Caso contrário, você receberá um 504 Gateway Timeout em vez de um 200 ok . Se o tempo limite do nginx estiver definido para 60 segundos, você deverá encerrar e reiniciar uma solicitação de pesquisa longa a cada 55 segundos ou mais.

Website

Se você não está preparado para usar o PHP, node.js ou um gerador de site estático escrito em node.js também pode funcionar para as suas necessidades. Docpad é um que eu uso, mas existem muitas ótimas opções. Pacotes de nós como o Grunt facilitam a automação de implementação. Algumas das coisas que eu uso para isso são HTML, CSS e JavaScript minification e cache rebentando.

    
por 28.07.2014 / 04:32