Attualmente sto lavorando a un'applicazione stack Node.js utilizzata da più di 25000 persone, stiamo utilizzando il framework Sails.js in particolare e abbiamo MongoDB L'applicazione è in esecuzione su un'istanza EC2 con 30 GB di RAM, il database è in esecuzione su un cluster basato su AWA Mongolab nella stessa zona è l'EC2. Abbiamo anche ottenuto un'istanza di Elastic Cache Redis con 1,5 GB per l'archiviazione.Come deve essere installato uno stack node.js per un'applicazione molto richiesta?
Quindi il problema principale ed enorme che stiamo affrontando è LATENCY. Quando raggiungiamo un picco di utenti simultanei che richiedono l'applicazione, riceviamo più timeout e applicazioni di vele che superano i 7,5 GB di RAM, le richieste HTTP all'API impiegano più di 15 secondi (il che è inaccettabile) e persino le risposte 502 e 504 inviate da nginx.
Posso notare le operazioni di scrittura Mongo come il nostro problema di latenza principale, tuttavia anche le richieste GET richiedono molto tempo quando è presente un picco di domanda. Non riesco ad accedere ai server di produzione, ho solo ottenuto uno strumento di monitoraggio keymetrics da pm2 (che in realtà è ottimo) e avvisi New Relic.
Quindi, mi piacerebbe conoscere una tabella di marcia per far fronte a questi problemi, forse dovrebbero essere offerte informazioni più dettagliate, per ora posso dire che l'applicazione sembra stabile quando non sono presenti molti utenti.
Quali sono i fattori principali e la configurazione da considerare?
Finora so cosa devo fare, ma io non sono sicuro di dettagli o le how.
IMHO:
- cache, per quanto possibile.
- Ritarda le operazioni di scrittura MongoDB.
- Separare i database Mongo con una maggiore richiesta di scrittura.
- Virtualizzare?
- Ottimizza le impostazioni del nodo.
Sull'ottimizzazione del codice, ho pubblicato un'altra domanda StackOverflow con un esempio di code patterns I'm following.
Quali sono i vostri consigli e opinioni per le applicazioni di produzione?
Sede [questo] (https://www.mongodb.com/blog/post/performance-testing-mongodb-30-part-1-throughput-improvements-measured-ycsb) se si sta utilizzando MongoDB 2.x – robertklep
E a proposito di operazioni di blocco, sincrone o di lunga durata? Clustering per CPU-core? –
@ stdob-- puoi estendere il tuo commento in una risposta, alcuni commenti ed esempi più lunghi sarebbero apprezzati – diegoaguilar