Подтвердить что ты не робот

Node.JS встроенный кластер или кластер PM2?

Что лучше?

Я активировал режим кластеризации Nodejs с рабочими, но теперь я обнаружил, что PM2 делает то же самое. Я использую keymetrics для просмотра статистики с моего веб-сервера, и я заметил, что когда я запускаю свой NodeJS node (со встроенным кластером) без использования функции кластера PM2, Keymetrics сообщает о 20/30 МБ используемого Ram.

Если я деактивирую кластеризацию (внутри node), и я включаю кластер PM2, keymetrics сообщает о 300 МБ использования Ram.

Теперь, какой метод лучше, и почему с встроенным кластерным ключом отчитывается только 30 МБ использования плунжера?

4b9b3361

Ответ 1

Я использую PM2. Есть несколько причин, по которым это лучше.

  • В отличие от использования кластеризации ядра, ваш код мало нуждается в модификации для использования PM2. Логика кластеризации не относится к каждому приложению, которое мы когда-либо создавали.
  • Он масштабируется из командной строки. Я могу просто запустить pm2 scale my-app +1, чтобы добавить другого рабочего в реальном времени после развертывания.
  • Вы все равно должны использовать PM2, чтобы поддерживать работоспособность. Таким образом, кластеризация предоставляется бесплатно.

Я не могу воспроизвести что-нибудь рядом с вашим номером 300MB. На самом деле, у меня недавно появилось негерметичное приложение, в котором я должен был использовать --max-memory-restart, и даже в этой ситуации использование памяти обычно оставалось ниже 100MB. Хотя это нисколько не удивит меня, если кластер PM2 использовал больше памяти, просто потому, что он много делает для вас из коробки.

Мое предложение было бы не досрочно оптимизировать. Используйте PM2, пока вам не понадобится сжать каждую каплю памяти/производительности из ваших систем (определенно, не до того, как у вас будет много трафика). В этот момент вы можете выяснить, какой минимальный минимум вам нужен из кластеризации, и можете самостоятельно реализовать только те части.

Ресурсы

Ответ 2

Это зависит от того, как работает ваше Node-приложение. Если ваше приложение не имеет состояния, тогда легко использовать режим кластера pm2, так как он не требует больших усилий (или никаких усилий) для изменения кода. Но если ваше приложение использует локальные данные, сеансы или использует сокеты, то рекомендуется использовать встроенный кластерный модуль Node.js и запускать ваше приложение, как правило, используя pm2.

Мое приложение Node использует сокеты и MQTT, поэтому я не могу напрямую использовать кластерный режим pm2 start app.js -i max (pm2 start app.js -i max), так как одно и то же приложение узла будет работать на каждом ЦП, и оно создавало множественное сокетное соединение с клиентом. Поэтому мне приходится управлять кластерами и рабочими вручную, используя кластер Node, и использовать липкие сессии и socket.io-redis, такие как пакеты узлов, для настройки правильного обмена данными между всеми работниками. А затем pm2 start app.js приложение для моего узла, используя pm2 start app.js

Ниже приведены некоторые ссылки, которые могут быть полезны.