2012-11-28 33 views
9

Node.js ve http-proxy ile bir yük dengelemeyi kodlamaya çalışıyorum. 2 sunucu arasında gelen talep işlemlerini paylaşan bir loadBalancer istiyorum. httpd proxy kullanarak node.js ile yük dengeleme

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); 

bunu yaparken, bu SERV1 ve serv2 için dönüşümlü istekleri göndermek bir LoadBalancer yapmıştır diye düşündüm. Ancak, bunu denediğimde, belirli bir sırada 2 sunucuyu istemiş gibi görünüyor. Ayrıca, isteklerin çoğu, localhost düğüm sunucusuna (127.0.0.1:3000)

Birisi bu davranışı açıklayabilir mi?

cevap

7

İstediğiniz gibi yuvarlak bir robin yapmış olmalı, ancak çok saf yuvarlak bir robin. Gördüğünüz şey, favicon.ico isteğinizin, tek bir sunucuda normalden daha yüksek bir istek paylaşmasıdır. Örneğin.

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

Yani kaydetmekte olduğunuzu nasıl bağlı olarak, teknik olarak her sunucu istekleri aynı sayıda elde edildiğinde bu sunucu 1, tüm istekleri oluyor görünecektir. Ayrıca, öğelerinizi düğümden alıyorsanız, varlıklarınızın da yuvarlak robin içine dahil edileceğini unutmayın. Dolayısıyla, her bir görüntü veya dosya isteği de farklı bir düğüm örneğine teslim edilir.

+0

müthiş bir açıklama. favicon.ico node.js isabetli değil mi? evetse, istek nasıl ele alınır? – Amareswar

+1

@Amareswar 'favicon.ico tarafından kastettiğinizden emin değilseniz node.js' tarafından vurulmuyor. Node.js, favicon isteklerini kesinlikle ele alabilir, ancak örneğin açık yolları yalnızca ifade olarak kaydediyorsanız, günlüklerinde bir favicon.ico isteği göremeyebilirsiniz. –

+0

anladı. Bu benim şüphemdi. – Amareswar