2012-11-28 9 views
9

Ich versuche, ein Loadbalancing mit node.js und http-Proxy zu codieren. Ich möchte einen LoadBalancer, der eingehende Anfrage Behandlung zwischen 2 Servern teilen.Load Balancing mit node.js mit http-Proxy

var http = require('http'), 
httpProxy = require('http-proxy'); 

var servers = [{host :'127.0.0.1', port :3000}, {host : 'remote_adr',port :3000}]; 

    httpProxy.createServer(function (req, res, proxy) { 

    var target = servers.shift(); 
    proxy.proxyRequest(req, res, target); 
    servers.push(target); 


    }).listen(8000); 

Ich dachte, dass dies zu tun, wäre es eine LoadBalancer die Anfragen gemacht haben abwechselnd serv1 und SERV2 senden.

Wenn ich es jedoch ausprobiere, scheint es, die 2 Server in keiner bestimmten Reihenfolge anzufordern. Außerdem werden die meisten Anfragen an meinen lokalen Host-Node-Server gesendet (127.0.0.1:3000)

Kann jemand dieses Verhalten erklären?

Antwort

7

Das sollte ein Round Robin tun, wie Sie angefordert haben, aber es ist ein sehr naives Round Robin. Möglicherweise sehen Sie, dass Ihre favicon.ico-Anfragen einen höheren Anteil an Anfragen auf einem einzelnen Server enthalten. Zum Beispiel.

Server 1: Actual Requests 
Server 2: favicon.ico 
Server 1: Another Request 
Server 2: favicon.ico 
Server 1: Final Request 
Server 2: favicon.ico 

Also je nachdem, wie Sie sich angemeldet haben, wird es erscheinen, dass Server 1 wird alle Anfragen bekommen, wenn technisch jeder Server wird die gleiche Anzahl von Anfragen bekommen. Denken Sie auch daran, dass Ihre Assets auch in das Round-Robin einbezogen werden, wenn Sie sie von Knoten aus bedienen. So wird jedes Bild oder jede Dateianforderung auch an eine andere Knoteninstanz übergeben.

+0

ehrfürchtige Erklärung. favicon.ico wird nicht von node.js gefunden? Wenn ja, wie wird die abgearbeitete Anfrage nicht angezeigt? – Amareswar

+1

@Amareswar Nicht sicher, was du meinst "favicon.ico wird nicht von node.js getroffen". Node.js kann zwar Favicon-Anfragen bearbeiten, aber wenn Sie nur explizite Routen in express protokollieren, sehen Sie möglicherweise keine favicon.ico-Anfrage in Ihren Protokollen. –

+0

haben es geschafft. Das waren meine Zweifel. – Amareswar