Балансировка нагрузки с помощью node.js с использованием http-proxy

Я пытаюсь закодировать балансировку нагрузки с помощью node.js и http-proxy. Мне нужен loadBalancer, который разделяет обработку входящих запросов между двумя серверами.

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

Я думал, что сделав это, он сделал бы loadBalancer, который отправляет запросы поочередно на serv1 и на serv2.

Однако, когда я пробую это, кажется, что запрашиваются 2 сервера в произвольном порядке. Кроме того, большинство запросов отправляются на мой сервер узла localhost (127.0.0.1:3000).

Кто-нибудь может объяснить такое поведение?


person Florent    schedule 28.11.2012    source источник


Ответы (1)


Это должно выполнять циклический алгоритм, как вы просили, однако это очень наивный циклический алгоритм. Вы можете видеть, что ваши запросы favicon.ico помещают более высокую, чем обычно, долю запросов на один сервер. Например.

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

Таким образом, в зависимости от того, как вы ведете журнал, будет казаться, что сервер 1 получает все запросы, хотя технически каждый сервер получает одинаковое количество запросов. Также имейте в виду, что ваши активы также будут включены в круговой алгоритм, если вы обслуживаете их из node. Таким образом, каждый запрос изображения или файла также будет передан другому экземпляру узла.

person Timothy Strimple    schedule 29.11.2012
comment
классное объяснение. favicon.ico не попал в node.js? если да, то почему обработанный запрос не отображается? - person Amareswar; 26.02.2013
comment
@Amareswar Не уверен, что вы подразумеваете под «favicon.ico не поражен node.js». Node.js, безусловно, может обрабатывать запросы favicon, но если вы просто регистрируете явные маршруты, например, в экспресс, вы можете не увидеть запрос favicon.ico в своих журналах. - person Timothy Strimple; 26.02.2013
comment
понятно. Это было моим сомнением. - person Amareswar; 27.02.2013