12
votes

File d'agente pour Nodejs?

Je suis en train de commencer à écrire une file d'attente ouvrière pour le nœud à l'aide de l'API de cluster et de la mangouste du noeud.

J'ai remarqué que beaucoup de libres existent déjà, mais en utilisant Redis et Forking. Y a-t-il une bonne raison de faire des fourchettes par rapport à l'aide de l'API de cluster?

edit et maintenant je trouve aussi ceci: https://github.com/ xk / nœud-threads-a-gogo - trop d'options!

Je préférerais ne pas ajouter de Redis au mélange depuis que j'utilise déjà Mongo. De plus, mes exigences sont très lâches, j'aimerais la persistance mais pouvait y aller sans elle pour la première version.

Partie deux de la question: Quelles sont les plus stables / utilisées Nodejs WEILLER WEURED WEULE LIBS TOWE?


4 commentaires

Beaucoup d'entre eux ont probablement commencé lorsque le cluster n'était pas disponible ou ne préfère pas l'utiliser car il est toujours marqué «expérimental». Il est tout à fait possible qu'une implémentation de la file d'attente ouvrière avec le cluster et les domaines serait meilleure que la méthode de la fourchette.


File d'attente de travailleur stable / d'occasion: Zeromq


Il n'y a pas de liaisons de Nodejs pour ZeromQ - im Recherche d'une liberté avec support de nœud qui ne nécessite idéalement aucun serveur séparé. Quelque chose de poids léger.


Pouvez-vous développer un peu sur votre cas d'utilisation ... Le nœud-threads-a-gogo semble avoir des cas d'utilisation très spécifiques. Si votre cas d'utilisation correspond, cela semble être un bon ajustement. Le lien fourni dans la réponse fait même référence à la nécessité d'un cas d'utilisation très spécifique. La meilleure réponse dépend de votre boucle de votre événement et du type d'architecture qu'il fonctionnera sur ...


3 Réponses :



4
votes

I Personnellement, je suis partial au maître de cluster.

https://github.com/isaacs/cluster-master

La raison pour laquelle j'aime Cluster Master est dû au fait que cela fait très peu d'ajout de la logique pour la préfecture de votre processus et vous permet de gérer le nombre de processus que vous utilisez et un peu de journalisation / récupération pour démarrer ! Je trouve des bibliothèques de gestion des processus trop ballées ont tendance à être instables et parfois même de choses ralentissées.

Cette bibliothèque sera bonne pour vous si ce qui suit est vrai:

  • Votre module est largement asynchrone
  • Vous n'avez pas une énorme quantité de types différents d'événements déclenchant
  • Les événements qui incendient ont de petites quantités de travail à faire, mais vous avez beaucoup d'événements similaires (choses comme des serveurs Web)

    La raison de la liste ci-dessus est la raison pour laquelle les threads-a-gogo peuvent être bons pour vous, pour les raisons opposées. Si vous avez quelques spots dans votre code, où il y a beaucoup de travail à faire dans votre boucle d'événement, quelque chose comme les threads-a-gogo qui lance un "thread" spécifiquement pour ce travail est génial, car vous ne déterminez pas À l'avance, combien de travailleurs se reproduisent, mais plutôt les reprocher à faire du travail en cas de besoin. Remarque: cela peut également être mauvais s'il y a un potentiel de leur potentiel de frayer, si vous commencez à lancer trop de processus, les choses peuvent réellement bouger, mais je me digresse.

    Résumer, si votre module est déjà largement asynchrone, ce que vous voulez vraiment, c'est une piscine de travailleurs. Pour minimiser le temps d'arrêt lorsque votre processus n'écoute pas pour des événements et maximiser la quantité de processeur que vous pouvez utiliser. À moins que vous n'ayez un appel syncroneux très occupé, une boucle d'événement de nœud unique aura des problèmes à tirer parti d'un seul noyau d'un processeur. Dans cette circonstance, vous êtes le mieux avec Cluster-Master. Ce que je recommande, c'est faire un peu de benchmarking et voir la quantité d'un coeur unique que votre programme puisse utiliser dans le "pire des scénarios". Disons que c'est 33% d'un noyau. Si vous avez une machine à quad à quad, vous dites ensuite Cluster Master de vous lancer 12 travailleurs.

    J'espère que cela a aidé!


1 commentaires

Jolie basique et parfaite pour ma situation unique actuelle, mais pour les futures chercheurs ... il a été abandonné.



7
votes

voulait suivre cela. Ma solution a fini par être un rouleau de votre propre groupe implémentant lorsque certains de mes travailleurs en groupe sont des travailleurs d'emploi dédiés (c'est-à-dire qu'ils ont simplement un code pour travailler sur des emplois).

J'utilise agenda pour la planification des travaux.

Les travaux de type cron sont programmés par le maître de cluster. Le reste des emplois sont créés dans les clusters non travailleurs tels qu'ils sont nécessaires. (e-mails de vérification, etc.)

Avant d'utiliser kue mais l'a laissé tomber parce que le reste de mon application utilise mongodb et je n'ai pas fait J'aime avoir à utiliser Redis juste pour la planification du travail.


0 commentaires