Реализовав кластер, я увидел, что производительность от его использования возросла в 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.
ссылка на оригинал статьи http://habrahabr.ru/post/208914/
Добавить комментарий