2017-02-07 2 views
0

Bare mit mir, wie ich komplett neu Cluster bin und die Dokumentation nicht mit mir klickt.Node.js Cluster, um Daten so oft wie möglich zu verarbeiten

if (cluster.isMaster) 
{ 
    for (let i = 0; i < numCPUs; i++) 
    { 
    cluster.fork(); 
    } 

    for (const file in files) 
    { 
    cluster.workers.send(file); //*** 
    } 
} 
else if (cluster.isWorker) 
{ 
    process.on("message", (msg) => 
    { 
    //...Process data here... 
    }); 
} 

*** ist das, was ich will. Etwas wie cluster.workers.send (...), das eine Nachricht an die Arbeiter sendet und wer nicht beschäftigt ist, wird die Nachricht annehmen. Wenn alle Mitarbeiter beschäftigt sind, wartet die Nachricht darauf, gesendet zu werden, bis ein freier Mitarbeiter verfügbar ist.

+0

Knotencluster erstellt mehrere Instanzen Ihrer Anwendungen. Wenn Sie zulassen möchten, dass nur ein Cluster eine Aufgabe ausführt, können Sie diese mit redis und redlock npm module verwenden. Mit diesem Modul können Sie nur einem Cluster erlauben, einmal eine Aufgabe unter mehreren Gruppen durchzuführen. –

+0

Ich überprüfe Redis und Redlock, aber gibt es eine Möglichkeit, dies zu erreichen, ohne eine zusätzliche Abhängigkeit hinzuzufügen? Das wäre vorzuziehen, wenn möglich mit nicht zu viel Standard – Arman

Antwort

2

Sie benötigen eine Datenbank, um die Warteschlange zu verwalten, wenn Sie eine große Anzahl von Aufgaben haben und redis wird eine gute Wahl dafür sein, wie Vinay Pandya vorschlägt.

Sie möchten zusätzliche Abhängigkeiten verhindern, Sie können ein Warteschlangenarray im Cluster-Master-Prozess verwenden und die Aufgaben zu/von diesem Array verschieben. Um den freien Knoten zu ermitteln, können Sie ein "Knoten" -Objekt pflegen und eine Rückmeldung von jedem Knoten erhalten, um seine Aufgabe zur Aktualisierung zu beenden. Die Rückmeldung kann mit process.send erfolgen.

+0

Ja, Sie haben Recht, aber ich schlage vor, Sie sollten redis anstelle von Speicherobjekt verwenden, weil wenn Sie Ihre Anwendung neu starten alle Objekt wird weg sein. Um Redis zu benutzen, ist Redis so schnell wie Cache-Speicher. –

+0

Absolut. Eine kleine Abhängigkeit zu einer sehr guten Lösung zu haben, tut nicht weh :) –

+0

Also ich denke, ich habe bekommen, was ich ohne Redis über Listener und process.send als Bulent Vural vorgeschlagen erwartet hatte, aber ich habe festgestellt, Clustering verwendet viel mehr Speicher als ich Ich werde mir meine Aufgabe leisten können. Weiß einer von Ihnen, ob das Clustering mit Redis Speicher spart? Im Idealfall, wenn ich 10 GB JSON habe, möchte ich dies im Speicher als 10 GB nicht 10 GB x speichern (# von gegabelten Prozessen), was meiner Meinung nach jetzt passiert. Mit anderen Worten, können alle meine Prozesse eine einzige Instanz von Redis teilen? Vielen Dank. – Arman

Verwandte Themen