- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

Модуль устроен просто — для начала он запускает мастер-процесс, в котором стартует то количество воркеров, которое вам необходимо (по-умолчанию, по два процесса на ядро), а затем отвязывает мастер-процесс от 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 [2]
Логи нагрузочных тестов ab [1]

Автор: asheee

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/node-js/52655

Ссылки в тексте:

[1] в 1,5 раза: https://gist.github.com/shuvalov-anton/8399476

[2] node-clusterize-cli: https://github.com/shuvalov-anton/node-clusterize-cli

[3] Источник: http://habrahabr.ru/post/208914/