Балансировка нагрузки двух отдельных процессов node.js на двух серверах?
Я запускаю небольшое приложение socket.io node.js, которое всегда имеет небольшое количество одновременно работающих пользователей. По большей части, он может работать 100% времени на одном процессе (будь то на моем Linode или Heroku[1]).
Я надеюсь немного обнародовать это в течение нескольких дней, в течение которых я ожидаю приличное количество трафика. Это означает одновременные соединения websocket/xhr-polling. Однако два соединения socket.io не должны связываться друг с другом.
Приложение работало на моем Linode довольно долгое время, но я недавно передал его одному бесплатному геройскому динамо. Даже бегая с xhr-опросом (heroku не поддерживает websockets изначально), это очень быстро.
Мне интересно, как я могу использовать свой Linode для запуска и балансировки нагрузки приложения. Но если это начинает замедляться, подтолкнуть пользователей к запуску Heroku Dyno (или наоборот). Это должно быть возможно с чем-то вроде node-http-proxy, но мне было трудно заставить его работать правильно. Надеюсь, я мог бы настроить его так, чтобы он мог достичь точки, или я мог щелкнуть переключателем, и он начал бы балансировать пользователей на втором сайте.
По сути, я просто смотрю в правильном направлении. Код был бы хорош, но не обязателен. Решение даже не должно быть в узле.
Спасибо!
[1] Я тоже довольно долго пробовал ноджитсу, но просто не нашел его готовым к использованию.
Изменить: я должен просто использовать простой Roundrobin, как объяснено здесь? Что если я захочу отдать предпочтение одному над другим?
1 ответ
Вы можете использовать Форман для этой работы:
PROCFILE
web: node app.js
Затем просто вызовите это в командной строке:
$ foreman start -c web=4
Это создаст 4 экземпляра приложения вашего узла, прослушивающего разные порты.
08:29:41 web.1 | started with pid 2576
08:29:41 web.2 | started with pid 1968
08:29:41 web.3 | started with pid 2712
08:29:41 web.4 | started with pid 5280
08:29:42 web.3 | Express server listening on port 5002
08:29:42 web.1 | Express server listening on port 5000
08:29:42 web.2 | Express server listening on port 5001
08:29:42 web.4 | Express server listening on port 5003
Затем вы можете просто использовать nginx и установить их на свой апстрим.