Supose Ho bisogno di implementare un'applicazione web che avrà un volume elevato di utenti simultanei. Decido di utilizzare node.js perché è molto scalabile, ha buone prestazioni, comunità open source, ecc. Quindi, per evitare colli di bottiglia perché potrei avere milioni di utenti nello stesso ciclo di eventi, decido di utilizzare un cluster di processi per sfruttare la CPU multi-core. Inoltre, ho 3 macchine (principale + 2) perché ho bisogno di manipolare i big-data con Cassandra. Fantastico, questo significa che ho 3 * n processi node.js dove n è il numero di core della cpu (le macchine sono identiche).Come progettare un server web node.js distribuito
Ok, allora comincio una ricerca e finisco con il seguente schema:
- Nginx in ascolto sulla porta 80 e utilizzato solo per servire contenuti statici (img, css, js, ecc).
Inoltra il traffico dinamico a haproxy. So come configurare nginx, ma devo ancora dare un'occhiata a haproxy, quindi dirò che haproxy sta ascoltando sulla porta 4000. Nginx e haproxy sono installati nella macchina principale (il punto di ingresso). - Bilance di carico epossidiche tra le 3 macchine. Si inoltra il traffico sulla porta 4001, vale a dire, i processi Node.JS ascoltano 4001.
- Ogni node.js ha un gruppo di n processi ascoltare 4001.
Se non sbaglio un singolo la richiesta http verrà inoltrata a un singolo processo node.js.
Creare una sessione è abbastanza normale, giusto? Una sessione è solo una mappa e questa mappa è un oggetto e questo oggetto vive in un processo node.js. Haproxy verrà configurato con uno scheduler round-robin, quindi lo stesso utente può essere inoltrato a diversi processi node.js. Come posso condividere lo stesso oggetto di sessione in tutti i processi node.js? Come posso condividere un oggetto globale (questo include nella stessa macchina (cluster node.js) e attraverso la rete)? Come dovrei progettare un'applicazione web distribuita con node.js? Ci sono dei moduli che facilitano le attività di sincronizzazione?
haproxy ha diversi modi di gestire sessioni persistenti, http: // stacko verflow.com/questions/6498030/load-balancing-haproxy-or-other-sticky-sessions. Per un oggetto globale, usa redis o qualcosa del genere. – numbers1311407
Simile a http://stackoverflow.com/questions/5398209/scaling-node-js-across-multiple-cores-servers Anche solo 3 server. –