Hersteller / Verbraucher-System mit Datenbank (MySql), ist dies machbar?

8

Ich muss etwas verwenden, um mein System mit mehreren Konsumenten / Produzenten zu koordinieren, die jeweils auf verschiedenen Maschinen mit unterschiedlichen Betriebssystemen laufen. Ich habe Untersuchungen über die Verwendung von MySql, um dies zu tun, aber es scheint lächerlich schwierig.

Meine Anforderungen sind einfach: Ich möchte jederzeit Konsumenten / Produzenten hinzufügen oder entfernen können und somit nicht voneinander abhängig sein. Natürlich würde eine Datenbank die beiden gut trennen.

Ich habe Q4M Message Queuing Plugin für MySql angeschaut, aber es scheint kompliziert zu verwenden.

Ich brauche wirklich etwas Input, wie ich mein System bestmöglich aufbauen kann.

    
johnrl 15.03.2010, 17:36
quelle

4 Antworten

5
  

Ich muss etwas zur Koordination verwenden   mein System mit mehreren   Verbraucher / Produzenten, die jeweils anlaufen   verschiedene Maschinen mit unterschiedlichen   Betriebssysteme

Das ist eine Nachrichtenwarteschlange. Verfolge keine anderen Alternativen. Alles andere (d. H. Die Verwendung einer Datenbank mit Einfügen und Löschen) ist schrecklich langsam und umständlich.

Eine große, langsame Nachrichtenwarteschlange mit einer Datenbank zu erstellen, erweist sich in der Praxis oft als schlecht, weil Datenbanken langsam sind, Datenbanken sehr umfangreich und komplex sind, und Sie Probleme mit Sperren und Konflikten haben, die jede Transaktion potenziell machen langsam, (4) es ist viel mehr Aufwand, als das Problem verdient.

Es gibt zahlreiche Nachrichtenwarteschlangenlösungen.

Wenn Sie Q4M nicht funktionieren lassen können, sollten Sie mit einem anderen fortfahren.

Ссылка

Ссылка

Ссылка

Ссылка

    
S.Lott 15.03.2010, 18:05
quelle
2

Es ist eigentlich (ziemlich) kompliziert, ein solches System zu bauen. (Ich sage fair, weil es natürlich machbar ist).

Wenn Sie mehrere Produzenten und einen Verbraucher haben, ist das ganz einfach. Alle Producer schreiben gleichzeitig und der einzelne Consumer liest Daten, sobald sie sichtbar (committed) sind.

Wenn Sie jedoch die Skalierbarkeit mit mehreren Consumern wünschen, müssen Sie ein Sperrschema erstellen, das nicht trivial ist. (Sie müssen sicherstellen, dass keine Zeile an zwei Verbraucher gesendet wird. Dies ist nicht einfach mit Datenbanktransaktionen und Sperren zu erreichen. Naive Lösungen führen zur Serialisierung aller Nachrichtenübermittlung, als ob Sie nur einen Verbraucher hätten, den wir nicht wollen. ).

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

    
ewernli 15.03.2010 19:30
quelle
1

Ich halte es für möglich, ohne Software von Drittanbietern.

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 (lesen und löschen) auch mit Transaktionen.

Aufgrund der Transaktionsanforderung ist InnoDB die logische Wahl der Speicher-Engine. Auch müssen Sie sorgfältig die Isolationsstufe wählen. Meine erste Schätzung ist "serialisierbar", um Phantom-Lesevorgänge zu vermeiden, aber vielleicht ist auch ein schwächerer Pegel möglich.

Wenn Leistung und Skalierbarkeit ein Problem darstellen, sollten Sie eine "echte" Messaging-Lösung in Betracht ziehen. Wenn Sie Ihr Gerät ausrollen, führt dies höchstwahrscheinlich zu Problemen bei der Leistung und / oder Skalierbarkeit.

    
Daniel Rikowski 15.03.2010 17:47
quelle
0

Es hängt von Situationen ab.

In meinem Fall erstellt der einzige Hersteller Tausende Nachrichten pro Tag, und mehrere Verbraucher konsumieren diese Nachrichten in den folgenden 24 Stunden, die jeweils mehrere Minuten dauern. Also, ich denke, die MySQL würde meine Anforderung erfüllen, und ich kann die Transaktionen verwenden, um die Konsistenz zwischen den Verbrauchern sicherzustellen.

Ich hoffe, es wird helfen.

    
bourneli 23.03.2015 09:39
quelle