2013-07-30 6 views
6

Chciałbym skonfigurować 4 różne instancje node.js, każdy na własnym rdzeniu. Czy plik node.js nakłada nowe instancje na ten sam rdzeń, czy też ustawia je na nowych rdzeniach?Wiele instancji node.js na różnych rdzeniach

Instancje nie są powiązane i przyjmują żądania indywidualnie. Chciałbym, aby obciążenie procesora było równomiernie rozłożone. Nie mogłem znaleźć ostatecznej odpowiedzi na to pytanie.

+0

mógłby Pan pls dodać jakiś szczegół scenariusza, który chcesz osiągnąć? –

+0

@VivekBajpai Mam 4 serwery nodejs działające wiecznie, w godzinach szczytu każdy może doświadczyć dużego obciążenia, myślę, że każda z nich skonfigurowana na własny rdzeń pomoże w godzinach szczytu. – GameDevGuru

+0

Czy uruchamiasz go wewnątrz serwera wirtualnego, takiego jak EC2 lub dedykowanych serwerów rzeczywistych? –

Odpowiedz

7

Ogólnie system spróbuje zrobić to samodzielnie, aby zmaksymalizować wykorzystanie procesora. Jeśli jednak chcesz kierować na konkretny procesor, powinieneś sprawdzić TaskSet. Ustawiła powinowactwo tego procesu.

Istnieje również kilka przydatnych pytań, które omawiają ten sam temat. Spójrz.

  1. Upstart: each process on different core Nodejs

  2. Node.js - targeting a cpu core

  3. Node.js on multi-core machines

  4. In AmazonEC2 cpu core and nodejs

  5. How to deploy Node.js in cloud for high availability using multi-core

  6. Multi node modlue to utilize cpu

Jest też moduł, Cluster, że może być również bardzo przydatny dla wykorzystania procesora. Pozwala to na rozwidlenie wielu procesów w celu rozdzielenia obciążenia na wiele rdzeni.


UPDATE


Wreszcie, mam coś podobnego wdrożone zgodnie z OP.


Przypadek 1.


  1. mam dedykowanego Sever z 8 rdzeni procesora.
  2. Mam wdrożony wątek pojedynczego węzła i użyłem modułu Cluster do współdzielenia obciążenia pracą (opisana przez pl47ypus PS: dzięki za odpowiedź).
  3. Wynik jest dobry, ale czasami wątek podrzędny może przestać reagować, więc zdecydowałem się wypróbować stary proces, którego użyłem w poprzedniej aplikacji.

Przypadek 2.


  1. samym serwerze, mam wdrożony 8 procesy node.js z różnych portów.
  2. Następnie umieszczam nginx przed nimi, nasłuchując na porcie 80 z procesem roboczym 8.
  3. Wynik jest lepszy niż przypadek 1, a także bardzo łatwy do skonfigurowania nginx, również najbardziej stabilny.

Proponuję również wypróbować niektóre z wymienionych rozwiązań i monitorować system w każdym przypadku; jak procesor, użycie pamięci i io. Wreszcie, z twoich testów zobaczysz najlepsze rozwiązanie dla twojego przypadku użycia. Każda aplikacja ma własne wymagania, więc lepiej jest spróbować znaleźć to, czego potrzebują twoje aplikacje.

0

spróbuj tego:

var cluster = require('cluster') 
    , numCPUs = require('os').cpus().length; 

if(cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.pid + ' died'); 
    }); 

    return; 
} 

kompletny kod here

również spojrzeć here

+1

Czy przeczytałeś pytanie, nie pytając, jak zrobić wielowątkowość w nodejs, pytając, jak uruchomić inną instancję procesu węzła na innym rdzeniu. Czy użycie klastra jest przydatne? –

+0

jest to cytat z dokumentacji nodejs api "Moduł klastra pozwala łatwo utworzyć sieć procesów, które wszystkie współużytkują porty serwera." czy chcesz uzyskać dostęp do wszystkich procesów przez ten sam port? (http://nodejs.org/api/cluster.html#cluster_cluster) – pl47ypus

+0

Przede wszystkim moduł klastra jest eksperymentalną drugą rzeczą na początku dokumentu http://nodejs.org/api/cluster.html#cluster_cluster wyraźnie wspomina "Pojedyncza instancja Węzła działa w jednym wątku. Aby skorzystać z systemów wielordzeniowych, użytkownik będzie czasami chciał uruchomić klaster procesów węzłów, aby obsłużyć obciążenie" Więc poczytajcie wyraźnie ", co jest bardzo użyteczne przy uruchamianiu wielu instancja tego samego procesu, aby zrównoważyć obciążenie " –