Кластеризация nodejs web-сервера с помощью node-clusterize-cli

в 12:43, , рубрики: cli, clustering, clusterization, node.js, Серверное администрирование, метки: , , ,

Последние полгода я занимаюсь разработкой достаточно большого web-приложения, под капотом которого ревет и дымится NodeJS. Когда дело дошло до деплоя на продакшн я задумался: «почему бы мне не использовать несколько тредов с инстансом приложения?».

Реализовав кластер, я увидел, что производительность от его использования возросла в 1,5 раза, что очень даже не плохо, учитывая малый объем потраченных усилий. Но я решил не останавливаться на этом, и сделать удобный CLI для работы с кластером, чтобы отвязать код, который отвечает за запуск кластера от конкретного приложения. Кроме того, очень хотелось демонизировать кластер, чтобы он висел себе молча в процессах, поднимал упавшие воркеры, писал в логи, и никого больше не отвлекал.

Так появился node-clusterize-cli.

Механизм работы

Модуль устроен просто — для начала он запускает мастер-процесс, в котором стартует то количество воркеров, которое вам необходимо (по-умолчанию, по два процесса на ядро), а затем отвязывает мастер-процесс от CLI интерфейса и оставляет его работать аки демона. Кроме того, мастер-процесс слушает сообщения об ошибках, которые могут произойти в воркерах, и автоматически перезапускает павших товарищей. За то, чтобы каждый запрос обрабатывался случайным процессом отвечает модуль из API NodeJS под названием «cluster».

Использование

В общем-то, все банально:

<code>// Установка глобального модуля
$ npm i -g node-clusterize-cli
// Запуск кластера
$ clusterize --app ./app.js --workers 32 --log ./cluster.log
</code>

Так же, для удобства есть метод для получения списка запущенных кластеров, и метод для их убийства:

<code>// фактически, алиас `ps -eo pid,comm | grep "clusterize master"`
$ clusterize list 
53416 app.js
// алиас на `kill -9 CLUSTER_PID`
$ clusterize kill 53416
</code>

Подробнее можно посмотреть в подсказке — clusterize -h и readme на GitHub.

репозиторий на GitHub
Логи нагрузочных тестов ab

Автор: asheee

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js