Bonne Plate-Forme De Mise En File D'Attente Open Source? [fermé]

Quelqu'un connaît-il un bon et fiable serveur/ plate-forme de file d'attente open source?

je travaille sur un projet dont nous avons besoin pour traiter des millions d'articles d'une file d'attente par jour. Mon défi est que la file d'attente n'est pas un FIFO, ce qui signifie que les nouveaux articles sont classés par ordre de priorité et peuvent être insérés quelque part au milieu de la file d'attente. En outre, pour traiter ces éléments, nous allons utiliser une plate-forme de distribution de serveur parallèle de sorte que la file d'attente doit être accessible à partir de nombreux serveurs.

20
demandé sur e-sushi 2008-08-20 16:56:50

7 réponses

comme @davidnicol mentionne que vous pouvez utiliser une base de données; bien que l'inconvénient avec une base de données fait un grand équilibre de charge à travers de nombreux threads/processus est un peu difficile; vous obtenez souvent un thread de verrouillage de la tête de la file faisant l'expédition un peu filetée simple.

une des principales utilisations d'une file d'attente de messages est généralement d'obtenir un équilibreur de charge fiable - vous pouvez alors exécuter autant de Des Consommateurs Concurrents comme vous voulez tous tirer de la même file pour vous donner massive évolutivité.

Si vous allez le message de file d'attente de la route; puis Apache ActiveMQ est l'implémentation open source la plus populaire et je vous recommande de commencer par ça car c'est le communauté la plus importante et la plus active (ma métrique préférée pour choisir entre des projets open source similaires).

Il existe diverses façons d' implémenter les files d'attente prioritaires avec ActiveMQ - le compromis principal est Pouvez-vous faire face à la latence resequencer pattern introduit ou utilise simplement des sélecteurs et différents processus / pools de consommateurs pour différentes gammes de priorités est une meilleure solution, de faible latence.

alors que l'implémentation du sélecteur n'est pas la plus pure implémentation de la file d'attente prioritaire - elle a tendance à mieux fonctionner dans la pratique car elle évite d'attendre que des messages de priorité plus élevée se libèrent; en plus, elle évite que des messages de faible priorité qui prennent beaucoup de temps à être traités monopolisent votre processeur.

15
répondu James Strachan 2008-09-16 15:16:36

ActiveMQ est un très bon produit : facile à installer, facile à déployer, facile à travailler avec. Clusterizable, de nombreux protocoles de prise en charge, etc. Nous essayons dans la production, semble fiable (avec ses propres problèmes, mais pas tant)

j'ai essayé la messagerie JBoss, mais je l'ai trouvé beaucoup plus difficile à utiliser, et moins mature (c'est une refonte de JBoss MQ et ce n'est pas tout à fait stable et complet...)

[Edit]Désolé, je n'ai pas lu votre question avec assez d'attention... Je n'ai vérifier la spécification JMS : elle implémente un ordre de priorité des messages, mais il n'y a que 10 niveaux de priorité dans JMS, et les implémenteurs ne sont pas obligés de les respecter (Je n'ai pas vérifié ce que fait AMQ) Mais la gestion des priorités peut aussi être réalisée en utilisant des files d'attente différentes...[/Edit]

7
répondu Laurent K 2008-09-02 14:39:27

pas tout à fait open source, mais tout à fait ouvert: Le service de file D'attente D'Amazon. Très fiable, très facile à utiliser.

Open source Ruby: Beanstalkd.

JBoss a Java-Messaging-Service assistance. Voir le message de haricots page.

Apache a un JMS produit; tous les produits Apache sont open source.

5
répondu James A. Rosen 2008-08-20 13:04:51

à côté de ActiveMQ qui devrait fonctionner pour vos demandes, vous pouvez aussi jeter un coup d'oeil à RabbitMQ ou OpenAMQ.

5
répondu Thraidh 2008-09-15 13:14:19

j'aime Gaius l'idée d'Amazones SQS cependant il a un grand retard temps entre les messages. Quelques-uns repères afficher 15-30 secondes un message les autres messages sont aussi lents qu'un message. Donc, si la vitesse est un problème, alors vous pouvez exécuter votre propre maman.

je recommanderais ActiveMQ à partir de Apache. Nous avons fait des benchmarks et ses vitesses sont assez proches des connexions socket. Ne l'ai jamais utilisé sur une grande échelle de production app though.

3
répondu Bernie Perez 2008-08-27 19:51:42

BTW un autre aspect de votre question Est de savoir quelle API utiliser pour parler à n'importe quelle technologie que vous choisissez.

ma recommandation avec n'importe quel middleware ou infrastructure est d'essayer de masquez l'middleware de votre logique d'entreprise comme cet article Le décrit. Garder votre logique d'entreprise séparée de l'intergiciel vous permet de changer l'implémentation de l'intergiciel facilement - car il n'y a vraiment pas de solution unique pour toutes les technologies de l'intergiciel- ils ont tous leurs propres avantages et avantages. inconvénient. Plus les exigences changent - en particulier dans le cas de la charge, du volume, du débit, de la synchronisation et de la latence - de sorte que vous avez parfois besoin de changer de technologie middleware pendant la durée d'un projet

2
répondu James Strachan 2008-09-16 15:20:05

écrivez la vôtre, en utilisant une table mysql indexée sur le temps d'insertion et la priorité. Bien que ça ne donne pas de pop atomique. Un peu de magie orientée transaction pour obtenir de la pop atomique -- un champ de drapeau. Mettez à jour l'élément du haut avec un champ de drapeau null pour avoir l'identificateur unique de votre client, commit, sélectionnez l'élément avec l'identificateur unique, puis supprimez-le lorsqu'il est fait avec l'élément. Maintenant, vous avez non seulement un système de file d'attente, mais un tableau de bord de gestion aussi parce que vous pouvez voir qui travaille sur quoi en sélectionnant tous les éléments de la table de file d'attente avec des options Non null.

-2
répondu davidnicol 2008-09-15 13:43:02