Подтвердить что ты не робот

Разница в кластере и вилке в PM2

Я много искал, чтобы выяснить этот вопрос, но я не получил ясного объяснения. Есть ли только одна разница в том, что кластерное приложение можно масштабировать, а разветвленное приложение не может быть?

Общественный сайт PM2 объясняет, что режим кластеров может выполнять эту функцию, но никто не говорит о преимуществах режима Fork (возможно, он может получить NODE_APP_INSTANCE переменная).

Мне кажется, что Cluster может быть частью вилки, потому что Fork, похоже, используется в целом. Итак, я полагаю, что Fork означает просто "разветвленный процесс" с точки PM2, а Cluster означает "разветвленный процесс, который можно масштабировать". Тогда почему я должен использовать режим Fork?

4b9b3361

Ответ 1

Основное различие между fork_mode и cluster_mode заключается в том, что он заказывает pm2 для использования child_process.fork api или cluster api.

Что это значит внутренне?

Режим вилки

Возьмите fork режим в качестве основного нереста процесса. Это позволяет изменить exec_interpreter, так что вы можете запустить сервер php или python с pm2. Да, exec_interpreter - это "команда", используемая для запуска дочернего процесса. По умолчанию pm2 будет использовать node, так что pm2 start server.js будет делать что-то вроде:

require('child_process').spawn('node', ['server.js'])

Этот режим очень полезен, потому что он дает много возможностей. Например, вы можете запустить несколько серверов на заранее установленных портах, которые затем будут сбалансированы по нагрузке с помощью HAProxy или Nginx.

Режим кластера

cluster будет работать только с node как exec_interpreter, поскольку он будет обращаться к модулю кластера nodejs (например: isMaster, fork и т.д.). Это отлично подходит для управления процессами с нулевой конфигурацией, потому что процесс будет автоматически разветвляться в нескольких экземплярах. Например, pm2 start -i 4 server.js запустит 4 экземпляра server.js и пусть модуль кластера справится с балансировкой нагрузки.

Ответ 2

Node.js является однопоточным.

Это означает, что только 1 ядро ​​вашего четырехъядерного процессора Intel может выполнить приложение node.

Он вызвал: fork_mode.

Мы используем его для локального dev.

pm2 start server.js -i 0 помогает вам запускать 1 node поток на каждом ядре вашего процессора.

И автозагрузка-баланс запросы без апатрита.

На одном и том же порту.

Назовем это: cluster_mode.

Используется для производительности при производстве.

Или событие на локальном dev.

Если вы хотите подчеркнуть тест ур ПК:)

Ответ 3

Документация и источники действительно вводят в заблуждение.

Чтение этого в источниках, по-видимому, единственные различия, что они используют либо API node cluster, либо child_process. Поскольку cluster использует последнее, вы на самом деле делаете то же самое. Существует гораздо больше пользовательских stdio, проходящих вокруг текущей гостиницы fork_mode. Также cluster можно передавать только с помощью строк, а не объектов.

По умолчанию используется fork_mode. Если вы пройдете -i [number] -option, вы перейдете в cluster_mode, который вы обычно нацеливаете на w/pm2.

Также экземпляр fork_mode, возможно, не может прослушивать один и тот же порт из-за EADDRINUSE. cluster_mode может. Таким образом, вы также можете структурировать приложение для работы на том же порту, который автоматически загружается. Вы должны создавать приложения без состояния, тогда как, например, сеансов, dbs.