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

от автора

Последние полгода я занимаюсь разработкой достаточно большого 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

ссылка на оригинал статьи http://habrahabr.ru/post/208914/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *