worker-Warteschlange für nodejs?
Ich bin in den Prozess von Anfang an zu schreiben, ein worker-Warteschlange für Knoten mit Knoten - cluster-API und mongoose.
Ich bemerkt, dass eine Menge libs vorhanden sind, die dies bereits tun, aber mit redis und Verzweigung. Gibt es einen guten Grund für die Gabel im Vergleich der cluster-API?
Bearbeiten und jetzt finde ich auch dieses: https://github.com/xk/node-threads-a-gogo - zu viele Optionen!
Möchte ich lieber nicht hinzufügen, redis, um die Mischung, da ich bereits verwenden, mongo. Auch meine Anforderungen sind sehr Locker, ich würde gerne Ausdauer aber gehen könnte, ohne dass es für die erste version.
Teil zwei der Frage:
Was sind die stabilsten/verwendet nodejs worker-Warteschlange libs heraus dort heute?
stabil/gebraucht worker-Warteschlange: zeroMQ
es gibt keine nodejs Bindungen für zeromq - im-suchen nach einer lib mit Knoten-Unterstützung, die idealerweise nicht erforderlich, einen separaten server. etwas Licht-Gewicht.
Können Sie erweitern ein wenig auf Ihren Fall... die Knoten-threads-a-gogo zu haben scheint, die sehr spezifische use cases. Wenn in Ihrem Anwendungsfall passt, es scheint wie eine gute Passform. Der link in der Antwort selbst verweist auf die Notwendigkeit für einen sehr speziellen Anwendungsfall. Die beste Antwort ist davon abhängig, was deine event-Schleife mit sich bringt und die Art der Architektur wird es laufen...
InformationsquelleAutor mkoryak | 2013-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben u versucht https://github.com/rvagg/node-worker-farm?
Es ist sehr leicht und erfordert keinen separaten server.
InformationsquelleAutor rafaelcastrocouto
Folgen wollte, bis auf diese. Meine Lösung war eine Rollen Sie Ihre eigenen cluster-impl wo einige meiner cluster-Beschäftigten sind engagierte Arbeit der Arbeitnehmer (dh Sie müssen nur code auf jobs arbeiten).
Benutze ich agenda für job-scheduling.
Cron-Typ-jobs werden durch den cluster-master. Der rest der Arbeitsplätze in den nicht-Arbeiter-Clustern, wie Sie benötigt werden. (Verifizierungs-E-Mails etc.)
Vorher war ich mit kue aber ließ es, weil der rest meiner app verwendet mongodb und ich habe nicht wie mit redis, die nur für das job scheduling.
InformationsquelleAutor mkoryak
Ich persönlich bin teilweise zu cluster-master.
https://github.com/isaacs/cluster-master
Der Grund, warum ich wie cluster-master ist, denn es enthält sehr wenig neben hinzufügen in die Logik für die Verzweigung in Ihrem Prozess und geben Ihnen die Fähigkeit zu verwalten, die Anzahl der Prozesse du laufen hast, und ein bisschen logging/recovery zu Booten! Ich finde übermäßig aufgeblähten Prozess-management-Bibliotheken neigen dazu, instabil zu sein, und manchmal auch die Dinge verlangsamen.
Diese Bibliothek wird für Sie gut sein, wenn die folgenden Bedingungen erfüllt sind:
Der Grund für die oben genannten Liste ist der Grund, warum threads-a-gogo kann für Sie gut sein, für die entgegengesetzten Gründen. Wenn Sie ein paar stellen in Ihrem code, wo es eine Menge Arbeit zu tun, innerhalb Ihrer event-Schleife, so etwas wie Themen-a-gogo, der gestartet wird, ein "thread", die speziell für diese Arbeit ist genial, denn Sie werden nicht die Entscheidung, vor der Zeit, wie viele Arbeiter, um zu laichen, sondern laichen Sie, um Arbeit zu tun, wenn nötig. Hinweis: dies kann auch schlecht sein, wenn es das Potenzial für eine Menge von Ihnen, um zu laichen, wenn Sie starten Sie starten zu viele Prozesse können die Dinge tatsächlich bog, aber ich schweife ab.
Zusammen zu fassen, wenn dein Modul ist weitgehend asynchrone schon, was Sie wirklich wollen, ist ein worker-pool. Minimieren Sie die Stillstandszeiten, wenn Sie Ihren Prozess nicht überwacht Ereignisse, und Sie zu maximieren die Menge von Prozessor Sie verwenden können. Es sei denn, Sie haben einen sehr anstrengenden synchroner Aufruf, eine einzelne node event-Schleife, die haben Schwierigkeiten der Einnahme von Vorteil, noch einen single-core-Prozessor. Unter diesen Umständen sind Sie am besten aus mit den cluster-master. Was ich empfehlen ist dabei ein wenig benchmarking und sehen, wie viel von einem single-core-Ihrem Programm verwenden können, unter der "worst-case-Szenario". Lassen Sie uns sagen, das ist 33% von einem core. Wenn Sie einen quad-core-Maschine, die Sie dann erzählen, cluster-master zu starten, werden Sie 12 Arbeiter.
Hoffe, dass dies geholfen!
InformationsquelleAutor ChrisCM