Введение в управление NodeJS в производственной среде с использованием PM2
Если вы управляете приложением NodeJS в производственной среде, PM2 может значительно облегчить вам жизнь. PM2 - это полнофункциональный инструмент управления процессами для NodeJS в производственных средах.
С PM2 вы можете быть уверены, что процесс вашего приложения автоматически перезапустится, если произойдет сбой. Он также предоставляет удобные инструменты мониторинга и возможность балансировки нагрузки между несколькими кластерами. Мы рассмотрим это и многое другое в этой статье.
Демо-приложение
Чтобы продемонстрировать всю мощь PM2, нам понадобится пример приложения NodeJS для управления. Прежде чем мы начнем, нам нужно будет создать базовый пример приложения NodeJS и Express, которое мы будем запускать с PM2 в следующем разделе.
Первым шагом будет создание нового проекта npm и установка в качестве зависимости Express. Выполните следующие команды в терминале.
mkdir pm2-nodejs-example cd pm2-nodejs-example/ npm init -y npm install --save express
После завершения настройки нам просто нужно добавить несколько строк кода в новый файл. Мы назовем его index.js и добавим следующее к содержимому файла.
Это в значительной степени самая базовая версия приложения NodeJS / Express, которую мы можем создать, но это не так важно для этой демонстрации.
PM2
Чтобы начать работу с PM2, нам сначала нужно установить его глобально через npm. Для установки выполните следующую команду в терминале.
npm install pm2 -g
Теперь, когда он установлен, давайте приступим к процессу, выполнив следующую команду.
Примечание. Возможно, вам потребуется добавить sudo
в команду для запуска от имени пользователя root.
pm2 start index.js // add watch option to automatically restart on file changes pm2 start index.js --watch // provide a name for the process pm2 start index.js --name example-api
Мы видим из распечатки в терминале, что наш процесс является единым, и видим некоторую дополнительную информацию о процессе. Если вы хотите увидеть список текущих команд, вы можете запустить следующую команду.
pm2 list
Вы можете остановить, перезапустить и удалить процесс с помощью следующих команд и либо передать идентификатор процесса, либо «все» в качестве аргумента.
pm2 stop all pm2 restart 0 pm2 delete all
Теперь перейдем к мониторингу. Выполните следующее, чтобы открыть представление мониторинга PM2.
pm2 monit
Это дает нам простой способ профилировать наше приложение NodeJS в производственной среде и просматривать другую полезную информацию.
Журналы
PM2 также предоставляет возможность просматривать журналы вашего приложения прямо в вашем терминале. Выполните следующую команду для потоковой передачи текущих журналов.
pm2 logs
Затем, если вы отправите несколько запросов в наш пример API, вы увидите, что новые сообщения поступают в поток журнала.
У нас также есть следующие команды, чтобы очистить все файлы журналов и перезагрузить журналы.
pm2 flush pm2 reloadLogs
Кластерный режим
Мы можем запустить наше приложение в кластерном режиме. Это означает, что PM2 будет запускать несколько процессов и запросы балансировки нагрузки между этими разными процессами.
Выполните следующую команду, чтобы работать в кластерном режиме с максимальным количеством процессов.
Примечание. Если у вас еще работают какие-либо процессы, вам нужно удалить их все с помощью pm2 delete all
pm2 start index.js -i max
Максимальное количество процессов определяется количеством ядер на компьютере, на котором вы работаете. Например, у моего ноутбука 8 ядер, поэтому, когда я запускаю максимальное количество кластеров, у меня одновременно выполняется 16 процессов. Итак, 2 процесса на ядро.
Теперь давайте вернемся и снова потрим логи, а затем откроем второй терминал и выполним следующую команду для имитации группы запросов, поступающих на наш сервер.
curl -s "http://localhost:3000?[1-1000]"
По мере выполнения этих запросов вы сможете увидеть в журналах, какой идентификатор процесса отвечает на поступающие запросы.
Если мы снова откроем представление мониторинга, мы увидим, что у нас есть еще несколько опций в меню.
Это лишь малая часть того, что может делать PM2, но это хороший пример для начала работы с PM2 для управления производственными процессами NodeJS. Спасибо за внимание!