Procurei muito para descobrir essa questão, mas não obtive uma explicação clara. Existe apenas uma diferença que um aplicativo em cluster pode ser dimensionado e um aplicativo bifurcado não?
O site público do PM2 explica que o modo Cluster pode fazer esses recursos, mas ninguém fala sobre os prós do modo Fork (talvez, ele possa ser NODE_APP_INSTANCE
variável).
Eu sinto que o Cluster pode fazer parte do Fork porque o Fork parece ser usado em geral. Então, eu acho que Fork significa apenas 'processo bifurcado' do ponto de PM2 e Cluster significa 'processo bifurcado que pode ser escalonado'. Então, por que devo usar o modo Fork?
pm2 start -i 30 app.js
e deixar o cluster nodejs fazer o trabalho.cluster mode
processo mestre existe um único ponto de falha.Node.js é de thread único.
Isso significa que apenas 1 núcleo de sua CPU Intel quad-core pode executar o aplicativo de nó.
É chamado:
fork_mode
.Nós o usamos para desenvolvimento local .
pm2 start server.js -i 0
ajuda a executar 1 thread de nó em cada núcleo de sua CPU.E balancear automaticamente a carga das próximas solicitações sem estado.
Na mesma porta .
Chamamos-lhe:
cluster_mode
.Que é usado por uma questão de desempenho na produção .
Você também pode optar por fazer isso no desenvolvedor local se quiser testar a resistência do seu PC :)
fonte
A documentação e as fontes são realmente enganosas aqui.
Lendo sobre isso nas fontes, as únicas diferenças parecem ser que eles usam o nó
cluster
ouchild_process
API. Uma vez quecluster
usa o último, você está realmente fazendo o mesmo. Há muito mais costumestdio
passando por aífork_mode
. Além disso,cluster
só pode ser comunicado por meio de strings, não de objetos.Por padrão, você está usando
fork_mode
. Se você passar na-i [number]
opção-, você entrarácluster_mode
, que geralmente visa w /pm2
.Além disso, a
fork_mode
instância provavelmente não pode escutar na mesma porta devido aEADDRINUSE
.cluster_mode
pode. Dessa forma, você também pode estruturar seu aplicativo para ser executado na mesma porta com balanceamento de carga automático. Você tem que construir aplicativos sem estado, então embora, por exemplo, sessões, dbs.fonte
cluster
módulo embutido usachild_process
internamente? e sua sugestão é se eu precisar de flexibilidadestdio
, tenho que usar o modo Fork?stdio
coisa é algo sobrepm2
a implementação de. Não se preocupe com isso. Você deseja usarcluster_mode
na produção porque está fortalecendo sua instância, pois está executando-i [number]
instâncias em segundo plano. Usefork_mode
se o endurecimento não for necessário ou se você quiser registros e outras coisas melhores.cluster_mode
usa mais recursos do seu sistema porque você está executando-i [number]
processos.cluster_mode
, equilíbrio de carga decluster_mode
,cluster_mode
usa mais recursos ...). É por isso que não votei. Você poderia explicar os dois casos de uso simples? Cada caso deve ser razoável por que assumiu seu modo.