Задать вопрос
DIITHiTech
@DIITHiTech
Fullstack javascript developer

Какие реализации балансировщиков нагрузки на NodeJS сейчас лучшие и насколько они адекватно работают?

Как то все покрыто мраком тут в случае с node. Хотелось бы ознакомится с лучшими реализациями, которые хоть где то реально используются. Выдача гугла пестрит тьмой балансировщиков на ноде, но качество их под вопросом- нет никакой информации о публичных тестах, алгоритмах по которых они распределяют нагрузку. Каждый проверять - жизни не хватит=) Пока адекватную балансировку хотя бы в рамках одной машины, между процессами. Балансировщик нужен именно на Ноде, ибо надо допилить его так, чтобы процессу доставались только определенные запросы, другому другие и т.д
Есть ли реализации учитывающие загрузку цп, озу и количество открытых соединений по процессах? Хотя бы от такого оттолкнутся..
  • Вопрос задан
  • 2238 просмотров
Подписаться 7 Оценить Комментировать
Решения вопроса 2
romanzhak
@romanzhak
Mathematician
pm2.js
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Учитывать загрузку ЦП и ОЗУ обычно не нужно, это только для эзотерических задач. Для балансировки в рамках одной машины хватает рандомного раскидывания или приклеивания по IP (IP sticky) хватает библиотеки cluster (или более низкоуровневой child_process) для передачи хендлов сокетов из центрального процесса в дочерние через системный механизм IPC (interprocess communication) для обработки. Например, вот тут как я это делаю: /lib/impress.js#L636-L646 в Impress Application Server. Если выходить за рамки одной машины, то чисто нодовская балансировка не годится, нужно применять двухуровневую балансировку, хардварное решение типа F5 Load balancer + внутри машины еще и распределение между процессами через IPC. Софтварные балансировщики на ноде в режиме нескольких машин ни чем не лучше чем Reverse proxy, в этом случае nginx даст Вам лучшие результаты, чем нодовские решения, это точно, он может еще и терминировать SSL очень эффективно и дальше уже передавать в ноду просто HTTP, снижая нагрузку на нодовский сервер. Как на nginx, так и на хардварных решениях, вполне можно сделать любой URL-реврайтинг, стики и объединение нескольких сервосов и портов в один, но хардварные на порядок производительнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
nginx
чем тупее будет балансер - тем лучше он будет выполнять свои задачи

upstream upstream1{}
upstream upstreamX{}
...

location /api/v1/todo1 {
     proxy_pass http://upstreamN;
}

location /api/v1/todoX {
     proxy_pass http://upstreamN;
}
Ответ написан
Комментировать
mr_T
@mr_T
Web-разработчик
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы