Como implantar o Node.JS sem interromper o serviço? [fechadas]

3

Existem algumas postagens no blog e perguntas sobre isso, mas são em sua maioria de 2010 ou 2011, e eu esperava por uma resposta mais atualizada (na época de 2014).

Eu tenho um aplicativo Node.JS bastante padrão executando Express, Socket.IO, Passenger, etc. Meu servidor de produção está executando o Ubuntu Server 12.04 LTS. Em um nível alto, meu fluxo de trabalho de implantação é aproximadamente:

  1. Enviar / extrair meu código atualizado para meu servidor de produção usando git
  2. Se necessário, execute qualquer script de construção e / ou instale novas dependências
  3. Reinicie o aplicativo usando forever restart

O aplicativo Node.JS está sendo executado na porta 8080 e eu tenho iptables configurado para encaminhar o tráfego da porta 80 para o aplicativo Node.

Existem alguns problemas com esta configuração. O mais significativo é a interrupção do serviço. Como meu aplicativo está usando WebSockets, sempre que forever reinicia o servidor, todos os usuários conectados perdem sua sessão de WebSockets. O Socket.IO reconecta automaticamente os usuários, mas as informações da sessão dos usuários não são transferidas para a nova instância do servidor. Outro problema é com o tratamento de erros. Se o servidor Node.JS encontrar uma exceção não manipulada (o que é uma realidade infeliz), o forever mata e reinicia o servidor, fazendo com que todos os usuários percam a sessão do WebSockets.

Servidores implantados com tecnologias mais tradicionais, como PHP e Apache, não têm esse problema porque (se eu entendi corretamente) cada conexão é executada em seu próprio encadeamento, portanto, uma nova implementação não afeta os usuários ativos no momento e exceção no PHP interrompe apenas uma sessão do usuário, em vez de matar o servidor para todos.

Então, como implantar o Node.JS sem interromper o serviço para preservar a sessão por usuário?

    
por sffc 20.12.2014 / 01:09

0 respostas