2012-11-13 26 views
5

Per quanto ho capito, un server Node.js è fondamentalmente un file JavaScript, eseguito dall'eseguibile node. È possibile aggiornare questo file senza interrompere la gestione delle richieste?Come aggiornare i server Node.js in esecuzione?

Suppongo che il nodo eseguibile debba essere arrestato per questo, quindi penso che dovrei usare un proxy inverso. Per esempio:

  1. versione del server originale in ascolto su localhost: 50001
  2. Proxy server ascolta le richieste su interfaccia web: 80 e li inoltra al localhost: 50001
  3. nuova versione del server deve essere avviato su localhost: 50002
  4. Proxy destinazione della deviazione di server dovrebbe essere cambiato in localhost: 50002
  5. versione del server originale deve essere interrotto

È un approccio valido? Come può un tale aggiornamento della versione essere eseguito automaticamente su più macchine server (accessibili dalla stessa LAN)?

+3

io uso https://github.com/isaacs/node-supervisor per le finestre, monitora i cambiamenti dei file e riavviare stesso. Su Linux, uso https://github.com/nodejitsu/forever. – Dev

+3

Entrambi gli strumenti sono ottimi, ma non aiutano a impedire il riavvio del server. –

risposta

10

Una soluzione "puro-node" diverso è quello di utilizzare il built-in cluster modulo:

Il codice viene eseguito come un cluster-client (di molti). Un processo cluster-server si collega alla porta e esegue il bilanciamento del carico automatico tra i client. Quando hai cambiato il codice, puoi inviare un segnale al server del cluster e riavvierà con garbo i tuoi client, senza perdere alcuna connessione esistente.

Qui ci sono alcuni progetti che possono fare la gestione dei cluster-server per voi:

Vantaggi:

  • minor numero di componenti nel tuo stack. (Più facile da implementare/gestire)
  • È possibile avviare automaticamente un processo nodo per ogni core sulla CPU, in modo che il programma possa sfruttare appieno l'hardware sottostante.
  • Non c'è bisogno di imparare la sintassi di configurazione di nginx
+0

Grazie, questo è esattamente ciò di cui ho bisogno! – kol

4

In sostanza, quello che si può (dovrebbe) fare è la seguente:

  • eseguire un server web, come Nginx come reverse proxy
  • utilizzare almeno due casi Node.JS dietro
  • (!)
  • Mettere le sessioni in un database come Redis

Quando è necessario aggiornare il sistema, arrestare uno dei due istanze Node.js, aggiornarlo, e riavviarlo. Quindi fai lo stesso con l'altro.

Fondamentalmente, questo dovrebbe farlo.

Lo svantaggio è che è possibile eseguire contemporaneamente diverse versioni dell'applicazione per un breve periodo di tempo e il database (ad es.) Deve essere in grado di raggiungere questo.

+0

Grazie per la risposta. Ci scusiamo per la revoca dell'accettazione, ma preferirei una soluzione "puro-nodo". Purtroppo non c'è modo di accettare più di una risposta :( – kol

Problemi correlati