Я много искал, чтобы разобраться в этом вопросе, но не получил четкого объяснения. Есть ли только одно отличие: кластерное приложение можно масштабировать, а разветвленное - нельзя?
Публичный сайт PM2 объясняет, что кластерный режим может выполнять эту функцию, но никто не говорит о плюсах режима Fork (возможно, он может быть NODE_APP_INSTANCE
переменным).
Мне кажется, что Cluster может быть частью Fork, потому что Fork, похоже, используется в целом. Итак, я полагаю, что Fork означает просто «разветвленный процесс» с точки зрения PM2, а Cluster означает «разветвленный процесс, который можно масштабировать». Тогда зачем мне использовать режим вилки?
pm2 start -i 30 app.js
и позволить кластеру nodejs выполнять работу.cluster mode
главном процессе есть единственная точка отказа.Node.js - однопоточный.
Это означает, что только 1 ядро вашего четырехъядерного процессора Intel может выполнять приложение узла.
Это называется:
fork_mode
.Мы используем его для местных разработчиков .
pm2 start server.js -i 0
помогает запустить 1 поток узла на каждом ядре вашего процессора.И автоматическая балансировка нагрузки для поступающих запросов без сохранения состояния.
В том же порту .
Мы называем это:
cluster_mode
.Которая используется для производительности на производстве .
Вы также можете сделать это на локальном разработчике, если хотите провести стресс-тест своего ПК :)
источник
Документация и источники здесь действительно вводят в заблуждение.
Читая об этом в источниках, кажется, единственная разница заключается в том, что они используют либо узел,
cluster
либоchild_process
API. Посколькуcluster
используется последний, вы фактически делаете то же самое. Просто в тавернеstdio
происходит намного больше обычаевfork_mode
. Такжеcluster
может передаваться только через строки, а не объекты.По умолчанию вы используете
fork_mode
. Если вы передадите-i [number]
опцию -option, вы попадете в тоcluster_mode
, к чему обычно стремитесь w /pm2
.Также
fork_mode
экземпляр, вероятно, не может прослушивать тот же порт из-заEADDRINUSE
.cluster_mode
может. Таким образом, вы также можете структурировать свое приложение для работы на одном порту с автоматической балансировкой нагрузки. Тогда вы должны создавать приложения без состояния, например, sessions, dbs.источник
cluster
встроенный модуль используетchild_process
внутренне? и ваше предложение: если мне нужна гибкостьstdio
, я должен использовать Fork-mode?stdio
что-то вродеpm2
реализации. Не беспокойся об этом. Вы хотите использоватьcluster_mode
в производственной среде, потому что это укрепляет ваш экземпляр, поскольку он запускает-i [number]
экземпляры в фоновом режиме. Используйте,fork_mode
если в закалке нет необходимости или вам нужны лучшие журналы и прочее.cluster_mode
использует больше ресурсов вашей системы, потому что вы выполняете-i [number]
процессы.cluster_mode
, балансировка нагрузкиcluster_mode
,cluster_mode
использование большего количества ресурсов ...). Вот почему я не голосовал. Не могли бы вы объяснить оба простых варианта использования? В каждом случае должно быть обоснование, почему он выбрал свой режим.