270 votes

Pourquoi avons-nous besoin d'un message courtiers comme rabbitmq de la base de données comme postgresql?

Je suis nouveau sur le message courtiers comme rabbitmq que nous pouvons utiliser pour créer des tâches / les files d'attente pour un système de planification comme celery.

Maintenant, voici la question :

  • Je peux créer une table en postgres qui peut être ajouté à de nouvelles tâches et consommés par le programme des consommateurs comme le céleri.

  • Pourquoi sur la terre je veux pour l'installation d'une toute nouvelle technologie comme rabbitmq

Maintenant, je crois échelle peut-être pas la réponse depuis notre base de données comme postgres peuvent travailler dans un environnement distribué.

J'ai googlé pour quels sont les problèmes liés à la base de données pose le problème particulier, j'ai trouvé :

  • interrogation de la base buzy et à faible rendement
  • le verrouillage de la table -> encore une fois à faible rendement
  • des millions de lignes de la tâche -> nouveau scrutin est peu performant

Maintenant, comment est - rabbitmq ou tout autre message broker comme ça résout ces problèmes ? Aussi,

J'ai découvert qu' AMPQ protocole est ce qu'elle suit. Ce qui est génial dans tout cela ?

Peut - reddis également être utilisé comme un broker de message ? [ Je la trouve de plus analogue à memcache puis rabbitmq ]

S'il vous plaît jeter un peu de lumière sur ce !

147voto

Jaigus Points 478

Lapin files d'attente du résident en mémoire et sera donc beaucoup plus rapide que la mise en œuvre de cette dans une base de données. Une (bonne)dédié message de la file d'attente devrait également fournir l'essentiel des files d'attente liés à des caractéristiques telles que la limitation/de contrôle de flux, et la possibilité de choisir différents algorithmes de routage, pour n'en nommer un couple(lapin fournit ces et plus). Selon la taille de votre projet, vous pouvez également le passage de messages composante distincte à partir de votre base de données, de sorte que si l'une des composantes des expériences de charge lourde, il ne faut pas gêner les autres.

Comme pour les problèmes que vous avez mentionnés:

  • interrogation de la base buzy et à faible rendement: à l'Aide de Rabbitmq, les producteurs peuvent pousser les mises à jour pour les consommateurs, ce qui est beaucoup plus performant que l'interrogation. Les données sont simplement transmis au consommateur lorsqu'elle en a besoin, éliminant le besoin de gaspillage des contrôles.

  • le verrouillage de la table -> encore peu performant: Il n'y a pas de table pour verrouiller :P

  • des millions de lignes de la tâche -> nouveau bureau de vote est faible rendement: Comme mentionné ci-dessus, Rabbitmq va plus vite comme il se trouve de la RAM, et fournit le contrôle de flux. Si besoin, il peut également utiliser le disque pour stocker temporairement les messages si elle est à court de RAM. Après la 2.0, le Lapin a amélioré de façon significative sur son utilisation de la RAM. Clustering options sont également disponibles.

En ce qui concerne AMQP, je dirais vraiment une fonctionnalité intéressante est la "bourse", et la capacité pour qu'il voie à d'autres échanges. Cela vous donne plus de flexibilité et vous permet de créer un large éventail d'élaborer des typologies de routage qui peut s'avérer très utile lors de la mise à l'échelle. Pour un bon exemple, voir: http://blog.springsource.com/wp-content/uploads/2011/04/routing-topology.png

et: http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/

Enfin, en ce qui concerne le redis, oui, il peut être utilisé comme un message broker, et peut bien faire. Cependant, Rabbitmq a plus de message queuing de fonctions que le redis, rabbitmq a été construit à partir du sol pour être un plein de fonctionnalités de niveau entreprise dédiée file d'attente de messages. Redis sur l'autre main a été principalement créé pour être une clé de mémoire-valeur en magasin(même si elle fait beaucoup plus que cela maintenant; son même appelé un couteau de l'armée suisse). Encore, j'ai lu/entendu beaucoup de gens obtenir de bons résultats avec le Redis pour les petits projets de taille, mais je n'ai pas entendu parler dans les grandes applications.

Voici un exemple de redis être utilisé dans un long-polling chat de mise en œuvre: http://eflorenzano.com/blog/2011/02/16/technology-behind-convore/

84voto

Craig Ringer Points 72371

Vous n'avez pas besoin de tels outils, mais en utilisant une peut rendre la vie plus facile. Faire la queue dans la base de données semble facile, mais vous découvrirez, dans la pratique, que la haute performance, fiable simultanées de files d'attente est vraiment difficile à faire dans une base de données relationnelle.

C'est pourquoi des outils comme le PGQ existent.

Vous pouvez vous débarrasser des bureaux de vote dans PostgreSQL en utilisant LISTEN et NOTIFY, mais qui ne suffit pas à résoudre le problème de manière fiable en distribuant des inscriptions en haut de la file d'attente à un seul consommateur, tout en préservant hautement fonctionnement parallèle et ne bloque pas les inserts. Toutes simples et des solutions évidentes et vous pensez qu'ils vont résoudre le problème en fait n'est pas dans le monde réel, et ont tendance à dégénérer en moins efficace versions de simple travailleur de la file d'attente de chargement.

Si vous n'avez pas besoin simultané hautement multi-file d'attente de travail récupère ensuite à l'aide d'une seule file d'attente tableau dans PostgreSQL est tout à fait raisonnable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X