2012-04-16 5 views
0

J'ai plusieurs frontends à mon service écrit dans Node.js et les travailleurs écrits en Ruby. Maintenant, la question est de savoir comment faire communiquer ceux-ci? J'ai besoin de maintenir un pool dynamique de travailleurs pour gérer la charge (engendrer plus de travailleurs lorsque la charge augmente) et les messages sont assez gros ~ 2-3M parce que j'envoie des images aux travailleurs téléchargés par les utilisateurs via les interfaces Node.js. Parce que je veux une bonne mise à l'échelle j'ai pensé à une solution de file d'attente, mais je n'ai trouvé aucune solution existante (ou des guides mal compris) qui fourniront:Solution/Architecture: files d'attente ou autre chose?

  1. Mécanismes de repli. Les solutions que j'ai trouvées jusqu'ici ont un seul point de défaillance - le courtier de messages et il n'y a pas moyen de fournir des solutions de repli.
  2. Sérialisation. Ainsi, lorsque le courtier échoue, les tâches ne sont pas perdues.
  3. Possibilité de transmettre de gros messages.
  4. API facile pour Ruby et Node.js
  5. Une API pour suivre la taille de la file d'attente afin que je puisse réorganiser le pool de travailleurs.
  6. Préférablement léger.

Peut-être que mon approche est erronée? Peut-être que je ne devrais pas utiliser les files d'attente mais d'une autre manière? Ou y at-il une solution de mise en file d'attente qui correspond aux exigences ci-dessus?

+1

Quand vous dites file d'attente pour vous voulez dire quelque chose dans le style de lapin MQ? – Adrian

+0

J'ai vu MQ chez le lapin et ça semble convenir plus ou moins, mais je n'ai pas erlang et je ne l'ai pas dans des paquets si difficiles à déployer. De plus, d'après ce que j'ai lu, cela ajoute beaucoup de latence au cas où vous auriez besoin de transmettre de gros messages. – Daniel

Répondre

1

à la fin de la journée j'ai pris ZeroMQ solution de file d'attente. Implémentation très rapide, robuste et légère. A dû écrire propre courtier, mais c'est les seuls inconvénients de cette solution.

1

Sans doute vous avez besoin d'une file d'attente à l'échelle et vous pouvez suivre cette file d'attente pour engendrer des « travailleurs ».

Apache ActiveMQ est très robuste et prend en charge le protocole REST. Le client Ruby est également disponible pour accéder à la file d'attente.

article intéressant sur RESTful queue using Apache ActiveMQ

Questions connexes