2017-01-31 5 views
0

У нас работает сервер на основе NodeJS для обработки входящих запросов от устройств на основе частиц Photon. Связь между сервером и устройствами зашифровывается, когда мы используем библиотеки decrypto в NodeJS. Мы запускаем сервер на 4-ядерном 8-гигабайтном компьютере с использованием NodeJS v0.10.25 и в настоящее время принимаем 220 запросов в секунду (каждый из которых содержит около 1 Кбайт данных). Мы также используем PM2 для балансировки нагрузки. Для каждого полученного запроса мы испускаем событие для его обработки (которое входит в очередь одиночных событий NodeJS?)Проблемы масштабируемости в сервере NodeJS

Но, похоже, что NodeJS с PM2 не может справиться с этой нагрузкой. Он работает некоторое время, но не может обрабатывать все события вовремя. После накопления большого количества ожидающих запросов он останавливает все входящие пакеты и продолжает обрабатывать данные/события, которые он поставил в очередь.

  1. Существуют ли проблемы масштабируемости, сохраняющиеся с серверами NodeJS? Разве NodeJS не предназначен для этой тяжелой нагрузки? Это из-за использования очень старой версии NodeJS (мы немного параноики об обновлении из-за зависимостей)? Кроме того,
  2. Каков наилучший инструмент для балансировки нагрузки NodeJS (можем ли мы повысить производительность с использованием чего-то другого, кроме PM2)?
  3. Каков механизм (библиотеки, код или инструменты), которые мы можем использовать для анализа статистики относительно двигателя NodeJS v8. В частности, нам нужно больше информации о количестве циклов событий в двигателе V8 (что, по моему мнению, всего 1), и о количестве/характере событий в циклах событий, которые ожидаются в любой момент времени.
  4. Известно ли это, что NoseJS отключается от сокетов и останавливает входящие запросы, если очередь циклов событий перегружена? Есть ли способ настроить это поведение?

спасибо заранее

ответ

0

Похоже, используя самую последнюю стабильную версию NodeJS (4.3.2) исправили проблему.

+0

Для вашего интереса, последняя версия LTS - 6.9.5. Вероятно, вам лучше использовать последнюю версию LTS. Версия 4.3.2 была выпущена 3 марта 2016 года, так что она довольно устарела и может содержать уязвимости безопасности. – leroydev