2012-11-12 12 views
9

Sono stato uno sviluppatore di applicazioni web in ruby ​​/ php per un po 'di tempo e sono abituato all'idea del ridimensionamento orizzontale delle istanze del server per gestire più richieste. Ridimensionamento orizzontale: ovvero istanze separate di un'applicazione poste dietro un bilanciatore del carico che non condivide nulla e non sono a conoscenza l'una dell'altra.Ridimensionamento orizzontale NodeJS

La domanda principale che ho è, dal momento che Node.js ed è l'accento sulla evented-IO consente una singola scatola in esecuzione un server per gestire node.js 'migliaia' di richieste simultanee - è il bilanciamento del carico/scala orizzontale usato ridimensionare le applicazioni nodejs? Il ridimensionamento di un'app di nodo è limitato al ridimensionamento verticale (aumento della RAM/potenza di elaborazione del problema)?

La seconda domanda riguarda la scalatura orizzontale e le web socket di node.js. Ho visto un bel po 'di tutorial per la chat di Node.js là fuori che fanno uso di websocket. (preferito: http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial)

Dal WebSockets mantenere efficacemente una linea aperta di comunicazione aperta tra un browser e un server, sarebbe un'architettura in scala orizzontale tipica del mondo PHP/Rubino causare un'applicazione di chat come quello spiegato nel link per rompere - come nuove richieste di connessione websocket sarebbero assegnate a diversi processi/server e non ci sarebbe nessuna risorsa centrale che tiene traccia di tutti i client connessi?

risposta

8

Node.js supporta il ridimensionamento orizzontale nel modo descritto tramite il modulo integrato cluster.

Per quanto riguarda la seconda domanda sull'uso di websockets/socket.io in questo ambiente, è necessario utilizzare qualcosa come Redis per memorizzare lo stato condiviso su più istanze dell'applicazione come descritto here.

+0

Questa è una vecchia domanda, ma sto utilizzando mongodb per archiviare e recuperare tutti i dati delle mie applicazioni di chat. Dal momento che voglio ridimensionare orizzontalmente la mia applicazione in quanto la mia applicazione di chat non funziona quando ho più di un server. Cosa dovrei fare se dovessi rimuovere completamente mongodb e utilizzare redis? O c'è una soluzione migliore. – DragonBorn

1

Le funzionalità del cluster di Node.js sono limitate a un singolo server con più processori. Principalmente sfrutta il numero di processori nel server. Penso che la domanda sia di più sullo scenario quando vogliamo scalare orizzontalmente con più server con una facciata Load Balancer.

+0

E per rispondere alla domanda sul socket, proprio come qualsiasi chiamata al server, la chiamata di creazione socket verrà bilanciata e dirà reach sul nodo Nx, per la durata della presa Web questa connessione TCP viene mantenuta aperta. cioè tutte le comunicazioni da browser a server, da server a browser tramite socket web saranno sempre servite da Nx. – Pramma

0

Se le istanze node.js sono distribuite su più server (ridimensionamento orizzontale), avrà lo stesso scopo, è necessario programmarla correttamente per supportare questo tipo di installazione.

Problemi correlati