Question

Je dois utiliser quelque chose pour coordonner mon système avec plusieurs consommateurs / producteurs chacun fonctionnant sur des machines différentes avec différents systèmes d'exploitation. J'ai fait des recherches sur l'utilisation de MySql pour ce faire, mais il semble ridiculement difficile.

Mes exigences sont simples: je veux être en mesure d'ajouter ou supprimer des consommateurs / producteurs à tout moment et donc ils ne devraient pas dépendre les uns des autres du tout. Naturellement, une base de données séparerait les deux bien.

J'ai cherché à faire la queue plug-in message Q4M pour MySql mais il semble compliqué à utiliser.

J'ai vraiment besoin d'entrée sur la façon de construire mon système le mieux possible.

Était-ce utile?

La solution

  

Je dois utiliser quelque chose pour coordonner   mon système avec plusieurs   consommateurs / producteurs chacun sa course   différentes machines avec différentes   systèmes d'exploitation

C'est une file d'attente de messages. Ne pas poursuivre d'autres alternatives. Tout le reste (à savoir, en utilisant une base de données avec insert et supprime) est affreusement lent et lourd.

Construire une grande file d'attente de messages lent avec une base de données tourne souvent mal dans la pratique parce que (1) les bases de données sont lentes, (2) les bases de données sont énormes et complexes, (3) que vous avez verrouillage et problèmes de contention qui font chaque transaction potentiellement lent, (4), il est beaucoup plus que le problème au-dessus mérite.

Il existe de nombreuses solutions de file d'attente de messages.

Si vous ne pouvez pas faire le travail de Q4M, vous devriez passer à un autre.

http://en.wikipedia.org/wiki/Message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

Autres conseils

Il est en fait (assez) compliqué de construire ce système. (Je dis assez, parce qu'il est bien sûr faisable).

Si vous avez producteur multiples et un consommateur, il est facile. Tout producteur écrire en même temps, et les données lues seul consommateur dès qu'ils sont visibles (engagés).

Mais si vous voulez l'évolutivité avec plusieurs consommateur, vous devrez créer un système de verrouillage qui n'est pas trivial. (Vous devez vous assurer qu'aucune ligne se dépêcha deux consommateurs. Ce n'est pas facile à réaliser des transactions de base de données et les serrures. Solutions Naive conduire à la sérialisation de toute livraison de messages, comme vous aviez seulement un consommateur, que nous ne voulons pas. ).

Je suggère d'utiliser une solution intégrée. Vous pouvez également lire cette question sur une question similaire.

Je pense qu'il est possible sans logiciel tiers.

Ma première conception ressemblerait à ceci:

  • Le producteur écrit des données dans la base de données
  • Pour garantir la cohérence, il doit utiliser des transactions
  • Le processus de consommation des données (lecture et suppression) également en utilisant les transactions.

En raison de l'exigence de transactions InnoDB est le choix logique du moteur de stockage. Aussi, vous devez choisir soigneusement le niveau d'isolation. Ma première supposition est « sérialisable » pour éviter les lectures fantômes, mais peut-être un niveau plus faible est également possible.

Si les performances et l'évolutivité est un problème, vous devriez envisager d'utiliser une solution de messagerie « réel ». Le déploiement de votre un dirigerez les plus susceptibles de problèmes de performance et / ou l'évolutivité.

Cela dépend des situations.

Dans mon cas, le seul producteur faire des milliers messages par jour, et plusieurs consommateurs consomment ces messages dans les 24 heures suivantes, chacun prendre plusieurs minites pour terminer. Donc, je pense que le mysql répondait à mes besoins, et je peux utiliser les transactions pour assurer la cohérence entre les consommateurs.

Je espère que ça vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top