Ответ 1
Node -cluster хорош для использования многоядерных процессоров, но когда дело доходит до горизонтального масштабирования (добавление большего количества машин), вам нужно использовать балансировщики нагрузки или обратный прокси. Для обратного прокси-сервера вы можете использовать любой веб-сервер, например Apache или nginx. Если вы хотите полагаться на node и npm, есть модуль nodejitsu: http-proxy. Ниже приведен пример HTTP-прокси для 3 машин, на которых запущено приложение node.
- создайте новый проект node.
- Установите модуль http-proxy.
Новая версия:
npm install --save http-proxy
Если вы предпочитаете более старую версию:
npm install --save [email protected]
- Создайте новый файл js (server.js или что угодно).
Для версии 1.x.x(Новый)
server.js
var http = require('http'),
httpProxy = require('http-proxy');
var addresses = [
{
host: "localhost",
port: 8081
},
{
host: "localhost",
port: 8082
},
{
host: "localhost",
port: 8083
}
];
//Create a set of proxy servers
var proxyServers = addresses.map(function (target) {
return new httpProxy.createProxyServer({
target: target
});
});
var server = http.createServer(function (req, res) {
var proxy = proxyServers.shift();
proxy.web(req, res);
proxyServers.push(proxy);
});
server.listen(8080);
для версии 0.x.x(старый)
server.js
var proxyServer = require('http-proxy');
var servers = [
{
host: "localhost",
port: 8081
},
{
host: "localhost",
port: 8082
},
{
host: "localhost",
port: 8083
}
];
proxyServer.createServer(function (req, res, proxy) {
var target = servers.shift();
proxy.proxyRequest(req, res, target);
servers.push(target);
}).listen(8080);
- Теперь запустите этот файл.
- Запрос, сделанный на localhost: 8080 будет перенаправлен на 8081, 8082 или 8083.
- Вы можете изменить localhosts на IP-адреса ваших компьютеров (и номера портов).
Клиенты, делающие запрос на порт 8080, не знают о существовании серверов на 8081, 8082 и 8083. Они делают запросы к 8080, как будто это единственный сервер и получают от него ответ.
Теперь одна из машин в вашем кластере будет работать как балансир node, а приложение будет размещено на других трех машинах. IP-адрес балансира нагрузки может использоваться как открытый IP-адрес.