Frage

Ich habe das gut erlebt und die schlechten Seiten von Messaging-Systemen in realen Produktionsumgebungen , und ich muß zugeben, dass eine gut organisierte Tabelle oder Schema der Tabellen einfach jedes Mal schlägt jede andere Form von Messaging-Warteschlange, denn:

  1. Die Daten werden auf einem Tisch dauerhaft gespeichert. Ich habe so viele Java (jms) Anwendungen gesehen, die Nachrichten für nicht abgefangene Ausnahmen oder andere Fehler auf dem Weg verlieren oder verschwinden.
  2. Warteschlangen neigen zu füllen. Db Speicher ist praktisch unbegrenzt, statt.
  3. Die Tische sind leicht zugänglich, während Sie esotic Instrumente zu nutzen, haben aus einer Warteschlange zu lesen.

Was ist Ihre Meinung zu jedem Ansatz?

War es hilfreich?

Lösung

Der Ausdruck jedes Mal schlägt hängt völlig ab, was Ihre Anforderungen zu beginnen waren. Sicherlich ist es nicht jedes Mal für jeden schlagen würde.

Wenn Sie ein einzelnes System bauen, die bereits eine Datenbank verwendet, Sie haben nicht sehr hohe Durchsatzanforderungen Leistung und Sie müssen nicht mit anderen Teams oder Systemen kommunizieren dann sind Sie wahrscheinlich Recht.

Für eine einfachen, niedrigen thoughput, meist Single-Threaded-stuff, Datenbank ist eine total gute Alternative zu Nachrichtenwarteschlangen.

Wenn eine Nachrichtenwarteschlange leuchtet, wenn

  • Sie eine hohe Leistung, sehr gleichzeitiger und skalierbare Load-Balancer, so dass Sie Zehntausende von Nachrichten pro Sekunde gleichzeitig über mehrere Server hinweg / Prozesse (unter Verwendung einer Datenbanktabelle verarbeiten würden Sie mit etwas Glück ein paar hundert pro Sekunde zu verarbeiten und Verarbeitung mit mehreren Threads ist ziemlich schwer, wie ein Prozess neigt die Nachrichten-Warteschlangentabelle)
  • sperrt
  • Sie müssen zwischen verschiedenen Systemen kommunizieren mit verschiedenen Datenbanken (so haben keinen Schreibzugriff auf Ihre Systeme Datenbank auf andere Leute in verschiedenen Teams etc auszuteilen)

Für einfache Systeme mit einer einzigen Datenbank, Team und ziemlich bescheidenen Leistungsanforderungen - sicher eine Datenbank verwenden. Verwenden Sie das richtige Werkzeug für den Job, etc.

Jedoch wo Nachrichtenwarteschlangen leuchten in großen Organisationen ist, wo es viele Systeme, die miteinander kommunizieren müssen (und so wollen Sie nicht eine Geschäftsdatenbank ein zentraler Punkt des Scheiterns oder der Ort der Version der Hölle sein) oder wenn Sie hohe Leistungsanforderungen haben.

In Bezug auf Leistung eine Nachrichten-Warteschlange wird immer eine Datenbanktabelle schlagen - als Nachrichtenwarteschlangen speziell für den Job ausgelegt sind, und verlassen Sie sich nicht auf pessimistische Tabellensperren (die für eine Datenbank Implementierung einer Warteschlange erforderlich sind - das zu tun Load Balancing) und wird eifrig Laden von Nachrichten an Warteschlangen ausführen den Netzwerk-Overhead einer Datenbank zu vermeiden.

In ähnlicher - Sie würde nie eine Datenbank verwenden Load Balancing von HTTP-Anfragen über Ihre Web-Server zu tun - wie es zu langsam sein würde - wenn Sie hohe Leistungsanforderungen für Load-Balancer haben Sie würden nicht eine Datenbank entweder verwenden .

Andere Tipps

Ich habe Tabellen zum ersten Mal verwendet, dann zu einer vollwertigen msg Warteschlange Refactoring, wenn (und ob) es gibt Grund -., Die trivial ist, wenn Ihr Design ist vernünftig

Die größten Vorteile sind a.) Es ist einfacher, (b. Es ist ein besserer Audit-Trail, weil Sie die anderen Tabellen zu verbinden haben, c.), Wenn Sie die Datenbank-Tools wirklich gut kennen, sind sie einfacher zu bedienen als die Message Queue-Tools, d.) ist es im allgemeinen ein bisschen einfacher, einen Test / dev Umgebung in einem Kontext einrichten, das bereits für Ihre Anwendung vorhanden ist (wenn gleiche Vertrautheit gilt).

Oh, und e.) Für vielleicht Sie und andere, es ist nicht ein anderes Produkt zu lernen, installieren, konfigurieren, verwalten und zu unterstützen.

IMPE, es ist nur so zuverlässig, abschaltbare, und Sie können konvertieren, wenn es besser skalierbar muss.

  1. Die Daten werden auf einem Tisch dauerhaft gespeichert. Ich habe so viele Java (jms) Anwendungen gesehen, die Nachrichten für nicht abgefangene Ausnahmen oder andere Fehler auf dem Weg verlieren oder verschwinden.

    Welche JMS-Implementierung? Sun verkauft zuverlässige Warteschlange, die Nachrichten nicht verlieren. Vielleicht gekauft Sie nur einen käsigen JMS-konformes Produkt. IBM MQ ist extrem zuverlässig, und es gibt JMS Bibliotheken, darauf zuzugreifen.

  2. Warteschlangen neigen zu füllen. Db Speicher ist praktisch unbegrenzt, statt.

    Ähm ... Wenn Ihre Warteschlange füllt, es klingt wie etwas kaputt ist. Wenn Ihre Anwendungen abstürzen, das ist nicht eine gute Sache, und Warteschlangen haben wenig damit zu tun. Wenn Sie eine wirklich schlechte JMS-Implementierung erworben haben, kann ich sehen, wo Sie mit ihm unzufrieden sein könnten. Es ist ein Wettbewerbsmarkt-Platz. Suchen Sie einen besseren WS-Manager. Sun JCAPS hat einen wirklich guten WS-Manager, der früher die SeeBeyond-Nachrichtenwarteschlange.

  3. Die Tische sind leicht zugänglich, während Sie esotic Instrumente zu nutzen, haben aus einer Warteschlange zu lesen.

    Das paßt nicht mit meiner Erfahrung. Die Tische sind durch diese eigenartige „andere Sprache“ (SQL) zugegriffen wird, und verlangen, dass ich die Struktur Zuordnungen von Tabellen zu Objekten und Datentypzuordnungen von VARCHAR2 zu String bewusst sein. Ferner habe ich eine Art von Zugriffsschicht (JDBC oder ein ORM, die JDBC verwendet) verwenden. Das scheint sehr, sehr komplex. Eine Warteschlange wird durch MessageConsumers zugegriffen und MessageProducers mit einfachen sendet und empfängt.

Es klingt, als ob die Probleme, die Sie erlebt haben, um Messaging nicht angeboren sind, sondern sind Artefakte von schlecht implementiert Messaging-Systeme. Baut Messaging-Systeme härter als Datenbanksysteme bauen? Ja, wenn alles, was Sie jemals tun ist, Datenbanksysteme bauen.

  • Der Verlust Nachrichten abgefangene Ausnahmen? Das ist kaum die Schuld der Nachrichtenwarteschlange. Die Anwendungen, die Sie verwenden sind schlecht entwickelt. Sie sind zu entfernen Nachrichten aus der Warteschlange vor der Verarbeitung abgeschlossen ist. Sie benutzen keine Transaktionen oder Journaling.
  • Nachrichtenwarteschlangen aufzufüllen, während DB-Speicher „praktisch unendlich“ ist? Sie reden, als Speicherplatz obwohl die Verwaltung waren etwas, das Datenbanken nicht erforderlich. Message Queue-Server erfordert Verwaltung, wie Datenbankservern zu tun.
  • Esoteric Instrumente aus einer Warteschlange zu lesen? Vielleicht, wenn Sie asynchrone Methoden esoterisch finden. Vielleicht, wenn Sie Serialisierung und Deserialisierung esoterisch finden. (Zumindest, das sind die Dinge, die ich esoterische gefunden, als ich Messaging war zu lernen. Wie viele scheinbar esoterischen Technologien, sie sind eigentlich ganz banal, wenn man sie zu verstehen und sie zu verstehen ist ein wichtiger Teil des erfahrenen Entwickler-Bildung.)

Aspekte der Nachrichten die es besser als Datenbanken machen:

  • Die asynchrone Verarbeitung. Nachrichtenwarteschlangen benachrichtigen wartenden Prozesse, wenn neue Nachrichten eintreffen. Um diese Funktionalität in einer Datenbank zu erreichen, müssen die Warten Prozesse die Datenbank abzufragen.
  • Die Trennung von Bedenken. Der Kommunikationskanal von den Implementierungsdetails des Nachrichteninhaltes entkoppelt ist. Nur der Absender und der Empfänger müssen etwas über das Format des Datenstroms innerhalb einer bestimmten Nachricht kennen.
  • Fehlertoleranz. . Messaging kann funktionieren, wenn Verbindungen zwischen Servern intermittierend sind. Nachrichtenwarteschlangen können Nachrichten lokal speichern und nur darauf, sie auf Remote-Servern, wenn die Verbindung unter Spannung steht.
  • Systemintegration. In der Windows-Welt, zumindest, Messaging in das Betriebssystem integriert. Es verwendet das Sicherheitsmodell des OS, ist es durch die Werkzeuge des OS verwaltet, etc.

Wenn Sie nicht über diese Dinge benötigen, müssen Sie wahrscheinlich Messaging nicht.

Hier ist ein einfaches Beispiel für eine Anwendung für Messaging: Ich bin jetzt ein System bauen, wo Benutzer, über mehrere Netzwerke verteilt sind ziemlich komplizierte Sätze von Transaktionen Eingabe, die gedruckte Ausgabe verwendet werden, um zu produzieren. Ausgang Generation ist rechnerisch teuer und nicht Teil des Workflows; das heißt, die Nutzer interessieren sich nicht, wenn die Ausgabe erzeugt wird, nur, dass es funktioniert.

So serialisiert werden wir die Transaktionen in eine Nachricht und es in einer Warteschlange löschen. Ein Verfahren auf einem Server ausgeführt packt Nachrichten aus der Warteschlange, erzeugt die Ausgabe, und speichert die Ausgabe in einem Abbildungssystem.

Wenn wir eine Datenbank als unser Nachrichtenspeicher verwendet, würden wir mit einem Schema haben zu kommen, eine Transaktion Format zu speichern, die jetzt nur der Absender und der Empfänger kümmern uns um, wir sicher, dass jede Workstation, auf die machen bräuchten Netzwerk permanent persistente Verbindungen zum Datenbankserver hatte, hätten wir nicht die Fähigkeit haben, diese Transaktion Last auf mehrere Server zu verteilen, und unsere Ausgangsserver würde abfragen müssen, um Arbeitsplätze pro Tag, um die Datenbank tausende Male warten, um zu sehen, ob es neu waren zu verarbeiten .

Warteschlangen bieten zuverlässige Messaging. Der Store-and-Forward, getrennt Natur der Schlange stehen sie als Datenbanken viel besser skalierbar machen, nicht mehr robust zu nennen.

Und Warteschlangen sollen nicht wirklich für die dauerhafte Speicherung von Informationen verwendet werden. - ist es am besten, sie als temporärer inboxes zu denken, im Gegensatz zu Datenbanken

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