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
risposta
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.
Questo è contrassegnato come sperimentale. Hai qualche esperienza con questo in produzione? –
@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. –
@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. –
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.
- 1. Best practice per la memorizzazione delle impostazioni
- 2. Best practice per la memorizzazione di password di produzione per piccoli gruppi
- 3. Best Practice per l'impostazione unica Chef nodo Attributi
- 4. Registrazione comune per nodo, applicazione rapida - best practice?
- 5. Best Practice per la classe di utilità?
- 6. Best practice di backup del database grande
- 7. Best practice per l'autenticazione dell'abra?
- 8. per best practice di loop
- 9. Registrazione per ASP.NET - Best practice
- 10. Qual è la best practice per gli elenchi di sola lettura in NHibernate
- 11. Sincronizzazione dei server IIS in aws ec2 con best practice per la scalabilità automatica
- 12. Best practice per la pronuncia del codice C
- 13. Best practice di RestAngular
- 14. Linee guida per la codifica + Best practice?
- 15. Manipolazione del DOM in angularJS: best practice?
- 16. Best practice per compatibilità legacy
- 17. Best practice per la gestione della ricerca
- 18. Best practice per la modellazione LDAP
- 19. Best practice per gestire l'eccezione in SailsJS
- 20. Best practice per la memorizzazione di flussi di dati costanti
- 21. node.js + best practice boilerplate
- 22. Best practice per l'utilizzo di @ in C#
- 23. Best practice Sitecore
- 24. Best practice del contratto di codice
- 25. API Best practice per Throttling
- 26. Best practice per la crittografia MySQL?
- 27. Best practice per denominare sottoclassi
- 28. Best practice per la visualizzazione dei messaggi di errore
- 29. JavaScript best practice: gestione del codice specifico Firebug
- 30. Hibernate/JPA DB Best practice per lo schema di generazione
Mi piacerebbe sapere anche questo. Ho sentito parlare dell'utilizzo di forever per eseguire il nodo, ma il gioco è fatto. –