Frage

Ich muss verwenden etwas Um mein System mit mehreren Verbrauchern/Herstellern zu koordinieren, laufen jeweils auf verschiedenen Maschinen mit unterschiedlichen Betriebssystemen. Ich habe nach MySQL nachgefragt, um dies zu tun, aber es scheint lächerlich schwierig.

Meine Anforderungen sind einfach: Ich möchte jederzeit Verbraucher/Hersteller hinzufügen oder entfernen können und sollten daher überhaupt nicht voneinander abhängen. Natürlich würde eine Datenbank die beiden gut trennen.

Ich habe mich mit dem Queuing -Plugin der Q4M -Meldung für MySQL angesehen, aber es scheint kompliziert zu verwenden.

Ich brauche wirklich einige Eingaben, um mein System bestmöglich zu konstruieren.

War es hilfreich?

Lösung

Ich muss etwas verwenden, um mein System mit mehreren Verbrauchern/Herstellern zu koordinieren, die jeweils auf verschiedenen Maschinen mit unterschiedlichen Betriebssystemen laufen

Das ist eine Nachrichtenwarteschlange. Verfolgen Sie keine anderen Alternativen. Alles andere (dh eine Datenbank mit Einfügen und Löschungen) ist furchtbar langsam und umständlich.

Das Erstellen einer großen, langsamen Nachrichtenwarteschlange mit einer Datenbank ist in der Praxis häufig schlecht, da (1) Datenbanken langsam sind, (2) Datenbanken riesig und komplex sind. 4) Es ist viel mehr Overhead als das Problem verdient.

Es gibt zahlreiche Lösungen für Nachrichtenwarteschlangen.

Wenn Sie den Q4M nicht zum Laufen bringen können, sollten Sie zu einem anderen übergehen.

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/

Andere Tipps

Es ist tatsächlich (ziemlich) kompliziert, ein solches System zu erstellen. (Ich sage fair, weil es natürlich machbar ist).

Wenn Sie mehrere Produzent haben und eines Verbraucher, es ist einfach. Alle Produzenten schreiben gleichzeitig und der einzige Verbraucher las Daten, sobald sie sichtbar sind (engagiert).

Aber wenn Sie Skalierbarkeit mit wollen mehrere Verbraucher, Sie müssen ein Sperrschema erstellen, das nicht trivial ist. (Sie müssen sicherstellen, dass keine Zeile an zwei Verbraucher versandt wird. Dies ist mit Datenbanktransaktionen und -Sresseln nicht einfach zu erreichen. Naive Lösungen führen zur Serialisierung aller Nachrichtenbereitstellungen, wie Sie es nur einen Verbraucher hatten, den wir nicht wollen. ).

Ich würde vorschlagen, eine integrierte Lösung zu verwenden. Sie können auch lesen diese Frage über eine ähnliche Frage.

Ich denke, es ist ohne Software von Drittanbietern machbar.

Mein erstes Design würde so aussehen:

  • Der Produzent schreibt Daten in die Datenbank
  • Um Konsistenz zu gewährleisten, muss es Transaktionen verwenden
  • Der Verbraucher verarbeitet die Daten (gelesen und löscht) auch mit Transaktionen.

Aufgrund der Transaktionen ist InnoDB die logische Wahl der Speichermotor. Außerdem müssen Sie die Isolationsstufe sorgfältig auswählen. Meine erste Vermutung ist "serialisierbar", um Phantom -Reads zu vermeiden, aber vielleicht ist auch ein schwächeres Niveau möglich.

Wenn Leistung und Skalierbarkeit ein Problem sind, sollten Sie eine "echte" Messaging -Lösung verwenden. Wenn Sie Ihr One ausführen, wird dies höchstwahrscheinlich zu Problemen mit Leistung und/oder Skalierbarkeit führen.

Es hängt Situationen ab.

In meinem Fall macht der einzige Produzent Tausende Nachrichten pro Tag, und mehrere Verbraucher konsumieren diese Nachrichten in den folgenden 24 Stunden, die jeweils mehrere Miniten zum Abschluss bringen. Ich denke, die MySQL würde meine Anforderungen erfüllen, und ich kann die Transaktionen verwenden, um die Konsistenz zwischen den Verbrauchern zu gewährleisten.

Hoffe es wird helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top