Szukałem dużo, aby rozwiązać to pytanie, ale nie otrzymałem jasnego wyjaśnienia. Czy jest tylko jedna różnica między aplikacją klastrowaną a aplikacją rozwidloną nie?
Witryna publiczna PM2 wyjaśnia, że tryb klastrowy może wykonywać te funkcje, ale nikt nie mówi o zaletach trybu wideł (być może może uzyskać NODE_APP_INSTANCE
zmienną).
Czuję, że Cluster może być częścią Fork, ponieważ Fork wydaje się być używany w ogóle. Wydaje mi się, że Fork oznacza po prostu „rozwidlony proces” z punktu PM2, a Cluster oznacza „rozwidlony proces, który można wyskalować”. W takim razie dlaczego powinienem używać trybu wideł?
pm2 start -i 30 app.js
i pozwolić klastrze nodejs wykonać pracę.cluster mode
procesie głównym występuje pojedynczy punkt awarii.Node.js jest jednowątkowy.
Oznacza to, że tylko 1 rdzeń czterordzeniowego procesora Intel może wykonać aplikację węzła.
To nazywa się:
fork_mode
.Używamy go do lokalnego dewelopera .
pm2 start server.js -i 0
pomaga uruchomić 1 wątek węzła na każdym rdzeniu procesora.I auto-load-zrównoważyć te bezpaństwowców pochodzących żądań.
W tym samym porcie .
Nazywamy to:
cluster_mode
.Który jest używany ze względu na wydajność w produkcji .
Możesz także zrobić to na lokalnym deweloperze, jeśli chcesz przetestować swój komputer :)
źródło
Dokumentacja i źródła są tutaj naprawdę mylące.
Czytając o tym w źródłach, jedyną różnicą wydaje się być to, że używają one węzła
cluster
lubchild_process
API. Ponieważcluster
używa tego drugiego, faktycznie robisz to samo. Wstdio
karczmie dzieje się o wiele więcej zwyczajówfork_mode
. Równieżcluster
mogą być przekazywane wyłącznie za pomocą sznurków, nie sprzeciwia.Domyślnie używasz
fork_mode
. Jeśli przejdziesz tę-i [number]
opcję, wejdziesz wcluster_mode
, do której zazwyczaj dążysz w /pm2
.Również
fork_mode
instancja prawdopodobnie nie może nasłuchiwać na tym samym porcie z powoduEADDRINUSE
.cluster_mode
mogą. W ten sposób możesz również tak zorganizować aplikację, aby działała na tym samym porcie, który jest automatycznie równoważony pod względem obciążenia. Musisz wtedy budować aplikacje bez stanu, np. Sesje, dbs.źródło
cluster
wbudowany moduł wykorzystujechild_process
wewnętrznie? a twoja sugestia jest taka, że jeśli potrzebuję elastycznościstdio
, muszę użyć trybu wideł?stdio
rzeczą jest coś zpm2
realizacji „s. Nie martw się tym. Chcesz używaćcluster_mode
w środowisku produkcyjnym, ponieważ wzmacnia twoją instancję, ponieważ działa ona-i [number]
w tle. Użyj,fork_mode
jeśli hartowanie nie jest konieczne lub potrzebujesz lepszych kłód i innych rzeczy.cluster_mode
zużywa więcej zasobów twojego systemu, ponieważ uruchamiasz-i [number]
procesy.cluster_mode
, równoważenie obciążeniacluster_mode
,cluster_mode
zużywa więcej zasobów ...). To jest powód, dla którego nie głosowałem. Czy mógłbyś wyjaśnić oba proste przypadki użycia? Każdy przypadek musi być rozsądny, dlaczego przyjął swój tryb.