TL; DR
Возможно ли иметь два разных мастера кластера, которые не являются общими глобальными?Например, создание нового экземпляра myCluster = new cluster()
?
Более длинная версия
После использования нового модуля кластера в NodeJS в течение некоторого времени я столкнулся с проблемой перекрытия двух отдельных кластеров.Две разные библиотеки (пакеты npm) обращаются к одному и тому же мастеру кластера, так как модуль кластера является глобальным в текущем запущенном процессе , независимо от того, откуда вы require
.
При вызове cluster.workers
из любой библиотеки будет перечислен каждый работник, созданный каждой библиотекой.
Все сходят с ума от того, насколько это легко и насколько эффективно, но после того, как столкнулись с проблемой двухВ библиотеках, использующих один и тот же кластер, я беспокоюсь о том, чтобы одна из них мешала другой, используя некоторые глобальные функции кластера, такие как cluster.disconnect()
, или доступ к глобальному рабочему объекту cluster.workers
.Я понимаю, что это достаточно одноразовый модуль «создайте самодостаточный кластер одноразовых работников, который можно легко перезапустить с помощью сторожевого таймера».
Но это самое простое решение для многопоточных задач, иприманки много беспокоит с child_process
.Что если две библиотеки решат, что необходимо использовать cluster
, но не потрудились отследить, какие рабочие принадлежат им, и вместо этого назвали нахальный
Object.values(cluster.workers).forEach(worker => worker.kill())
в качестве своей очистки?
Можно ли иметь два разных "экземпляра" или "пространства имен" для кластеров , чтобы не мешать другим мастерам кластеров?Или модуль кластера - это просто глобальная переменная, которую вы должны принять?
Я углубился в документацию, но из того, что я могу сказать, невозможно создать новый экземпляр кластера, вызвав myCluster = new cluster()
илипередать какую-то уникальную личность разветвленным работникам.Я нахожу удивительным, что нет очевидного решения этой проблемы, особенно учитывая, что она нацелена на корпоративные приложения, где таких проблем не должно быть.
Тенденция (и какое-то время) в программировании заключается в том, чтобы сохранитьвдали от глобальных экземпляров и создавайте самодостаточные экземпляры, которые знают только то, что им нужно знать, так называемые «немые компоненты».Кластер - это довольно новое дополнение к NodeJS, они просто решили внедрить замечательную функцию?
Я был бы очень признателен за ваши мысли или обходные пути по этому вопросу.Прямо сейчас я создаю библиотеку, которая может принести большую пользу от распределения задач, однако я не хочу портить глобальный кластер зависимого пакета.Должен ли я вернуться к низкому уровню child_process
?
Большое спасибо!