2011-07-05 16 views
8

Tengo curiosidad acerca de las incrustaciones horizontales en node.js es posible equilibrar la carga entre varios servidores virtuales, como servidores en la nube Rackspace? He leído sobre el plugin de clúster pero creo que es solo para un solo servidor con una CPU de núcleo múltiple.Node.js es compatible con el equilibrio de carga múltiple en todos los servidores?

+2

nginx? => http://www.shinstudio.com/blog/backend-tech/setting-up-node-js-in-nginx/ – Alfred

+1

Fácil, escriba un proxy de equilibrador de carga de nodo en el nodo. – Raynos

+1

, pero ¿qué pasa con las conexiones de instancias, por ejemplo, múltiples salas de chat cómo enrutar a los usuarios al servidor específico, y qué pasa si los usuarios están distribuidos en los servidores. – Christian

Respuesta

10

Trate roundrobin.js para node-http-proxy:

var httpProxy = require('http-proxy'); 
// 
// A simple round-robin load balancing strategy. 
// 
// First, list the servers you want to use in your rotation. 
// 
var addresses = [ 
    { 
    host: 'ws1.0.0.0', 
    port: 80 
    }, 
    { 
    host: 'ws2.0.0.0', 
    port: 80 
    } 
]; 

httpProxy.createServer(function (req, res, proxy) { 
    // 
    // On each request, get the first location from the list... 
    // 
    var target = addresses.shift(); 

    // 
    // ...then proxy to the server whose 'turn' it is... 
    // 
    proxy.proxyRequest(req, res, target); 

    // 
    // ...and then the server you just used becomes the last item in the list. 
    // 
    addresses.push(target); 
}); 

// Rinse; repeat; enjoy. 
+5

¿Esta implementación proxy la conexión o la conexión del cliente se transfiere al servidor que resultó ser el siguiente? Me pregunto en el contexto del uso de websockets y tengo una conexión persistente. Si todas las conexiones se canalizan a través del equilibrador de carga, entonces todavía tiene un cuello de botella porque el equilibrador de carga se saturará con las conexiones. – jlafay

Cuestiones relacionadas