2013-01-11 5 views
6

Sto valutando nodejs per una piccola porzione della nostra applicazione Web in cui sembra che sarebbe una buona soluzione. So che il nodo è giovane e in rapido movimento, ma sembra che sia finalmente arrivato alla categoria "pronto per la produzione". Comunque, a go-go su google, la maggior parte delle informazioni che vedo sulle distribuzioni di produzione hanno un anno e continuano a mettere in guardia su come il nodo fragile può essere e può uscire inaspettatamente, seguito da alcune soluzioni da riavviare. Questo non mi spaventa da solo, ma sembra esserci una mancanza di parole ufficiali sul "modo giusto" per mettere il nodo là fuori in modo affidabile.Qual è la best practice corrente per un'implementazione di produzione del nodo in AWS

+0

Mi piacerebbe sapere anche questo. Ho sentito parlare dell'utilizzo di forever per eseguire il nodo, ma il gioco è fatto. –

risposta

4

cluster sembra essere una buona opzione, anche se a seconda del sistema operativo potrebbe avere scarse prestazioni di bilanciamento del carico. Una versione molto semplice potrebbe essere qualcosa di simile:

var cluster = require('cluster') 

if(cluster.isMaster) { 
    var i, worker, workers; 
    for(i = 0;i < numWorkers;i++) { 
    worker = cluster.fork(); 
    workers[worker.process.pid] = worker; 
    } 
    cluster.on("exit", function(deadWorker) { 
    delete workers[deadWorker.process.pid]; 
    worker = cluster.fork(); 
    workers[worker.process.pid] = worker; 
    }); 
} 
else { 
    //be a real server process 
} 

Questa è una bella opzione, perché entrambi ti dà una certa stabilità riavviando i processi di morte, e ti dà più processi che condividono il carico. Si noti che cluster modifica fondamentalmente server.listen in modo che i lavoratori stiano tutti ascoltando gli eventi provenienti dal master, che sta eseguendo l'ascolto. Da qui deriva il bilanciamento del carico "libero".

documentazione Cluster può essere trovato qui: http://nodejs.org/api/cluster.html

Può anche essere la pena di avere il processo principale di gestire un paio di segnali, se si vuole essere in grado di attivare determinati eventi, come ad esempio l'uccisione e il riavvio di tutti i processi, o uccidendo tutti i processi e spegnendo.

+0

Questo è contrassegnato come sperimentale. Hai qualche esperienza con questo in produzione? –

+1

@RussellLeggett Sì, lavoro su Trello (https://trello.com) che usa 'cluster' in un modo abbastanza simile a questo. Lo abbiamo usato per oltre un anno e l'unico problema che abbiamo riscontrato (con 'cluster') è stato il problema di bilanciamento del carico che ho menzionato nel mio post. –

+1

@RussellLeggett Credo che "Stabilità: Sperimentale" si riferisce alla stabilità dell'API tra le versioni dei nodi, piuttosto che alla stabilità di marcia, ma potrei sbagliarmi. –

0

Attualmente sono in procinto di portare un'applicazione nodo.js alla produzione per un'applicazione social media altamente scalabile. Per creare una soluzione di distribuzione non banale attualmente sto utilizzando AWS Elastic Beanstalk. La documentazione del nodo AWS può essere trovata qui [http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.html].

Ho provato questo nei miei ambienti di test e anche se funziona, non è un processo semplice o facile da seguire. In particolare, ho avuto alcuni problemi con la configurazione usando i Virtual Private Clouds per i miei ambienti. Inoltre, poiché il servizio è in qualche modo nuovo, non sono disponibili molte informazioni e consigli per la risoluzione dei problemi, che potrebbero essere risolti acquistando supporto da Amazon.

dispiegamento Un fagiolo magico elastico non sembra fornire la seguente:

  • Se hai i requisiti di un ambiente di sviluppo gratuito-tier.
  • Implementazione EC2 scalabile per applicazioni di nodo e architetture di nodi.
  • Distribuzione coerente in tutti gli ambienti (ad es. Dev, test, uat, produzione).
  • Monitoraggio.
  • Repeat-abilità e automazione per le implementazioni.
Problemi correlati