57 Stimmen

In welchen Bereichen sind nachrichtenorientierte Middlewares wie AMQP nützlich?

Welches Problem wird mit MOM (Message Oriented Middleware) gelöst? Skalierbarkeit? Integration?

In welchem Bereich werden sie typischerweise eingesetzt und in welchen Bereichen sind sie typischerweise pas verwendet?

Verwendet Google beispielsweise eine solche Lösung für seine Hauptsuchmaschine oder für GMail?

Wie sieht es mit großen Websites wie Walmart, eBay, FedEx (ziemlich genau ein Java-Shop) und buy.com (ziemlich genau ein MS-Shop) aus? Löst MOM dort einen Bedarf?

Macht es Sinn, wenn Sie eine Webapp schreiben, bei der Sie die Serverseite kontrollieren und eine homogene Umgebung haben (z.B. Dutzende von Amazon EC2-Instanzen, auf denen alle Linux + Java JVMs laufen), und die Clients, nun ja, Webbrowser sind?

Ist es sinnvoll für Desktop-Anwendungen, die mit einem Server kommunizieren müssen?

Oder ist es "nur" für große Unternehmen gedacht, in denen man typischerweise eine bunte Mischung aus unzähligen verschiedenen Systemen hat, die auf die eine oder andere Weise miteinander kommunizieren müssen?

Ich bin etwas verwirrt, wofür sie nützlich sind, und ich denke, dass ich ihre Verwendung besser verstehen könnte, wenn ich Beispiele dafür hätte, wo sie angebracht sind und wo nicht.

33voto

alexis Punkte 2019

Das ist eine gute Frage.

Die wichtigsten Verwendungszwecke von Messaging sind: Skalierung, Auslagerung von Arbeit, Integration, Überwachung, Ereignisbehandlung, Routing, Vernetzung, Push, Mobilität, Pufferung, Warteschlangenbildung, Aufgabenteilung, Warnungen, Verwaltung, Protokollierung, Batch, Datenlieferung, Pubsub, Multicast, Audit, Zeitplanung, ... und mehr. Im Grunde: alles, wo Sie Daten benötigen, aber keine Datenbankabfrage machen wollen. (Caching ist eine andere, längere Geschichte).

Eine andere Betrachtungsweise ist, dass viele Anwendungen in der Vergangenheit unter der Annahme entwickelt wurden, dass Benutzer (Menschen) Aktionen durchführen, die durch die Ausführung einer Transaktion in einer Datenbank erfüllt werden (einschließlich Lese- und Schreibvorgänge). Heutzutage werden jedoch viele Aktionen nicht vom Benutzer initiiert. Stattdessen werden sie von der Anwendung initiiert. Zum Beispiel: "Sag mir, wann das Buch, das ich kaufen möchte, vorrätig ist". Diese Art von Problemen lässt sich am besten durch eine Art von Nachrichtenübermittlung lösen. Ob man es nun Middleware, Web-Push oder Echtzeit-Salatdressing nennt, spielt keine Rolle. Es ist alles Messaging.

Wenn Sie Anwendungen in die Lage versetzen, Ereignisse auszulösen oder auf sie zu reagieren, ist die Skalierung viel einfacher, da Ihre Architektur auf lose gekoppelten Komponenten basieren kann. Es ist auch viel einfacher, diese Komponenten zu integrieren, wenn Ihre Nachrichtenübermittlung auf einem stabilen, skalierbaren, wartungsfähigen Tool basiert, das vorzugsweise offene Standard-APIs und -Protokolle verwendet.

Ich hoffe, das hilft. Wir versuchen, eine Liste mit nützlichen Links zum Thema Messaging zu erstellen aquí

Bitte kontaktieren Sie uns bei Fragen und Kommentaren zu diesem Thema, wir sind sehr leicht zu finden.

14voto

alexis Punkte 2019

Um auf Ihre spezifischen Fragen einzugehen:

In welchen Bereichen werden sie in der Regel eingesetzt und in welchen nicht?

Wie Datenbanken tauchen auch Messaging-Systeme überall auf.

Verwendet Google beispielsweise eine solche Lösung für seine Hauptsuchmaschine oder für GMail?

Google verwendet viel selbst entwickelte Technologie, aber viele seiner Open-Source-Beiträge und bekannten Anwendungsfälle lassen vermuten, dass Messaging für einige der wichtigsten Dienste von zentraler Bedeutung ist (oder sein sollte).

Was ist mit großen Websites wie Walmart, eBay, FedEx (ziemlich genau ein Java-Shop) und buy.com (ziemlich genau ein MS-Shop)? Löst MOM dort einen Bedarf?

Sehr sogar.

Ein Beispiel für einen Anwendungsfall ist die Skalierung von Webseitenanfragen. Wenn der Benutzer eine Webanforderung stellt, legt der Webserver diese in eine Warteschlange für die Hintergrundverarbeitung ein. Das bedeutet, dass der Webserver weiterarbeiten kann, während die Anfrage bearbeitet wird. Das bedeutet auch, dass der Webserver nicht wissen muss, wie die Anfrage bearbeitet wird, was die Systemwartung, die Aktualisierung und das Rollback sehr viel einfacher macht, da die wichtigsten Teile "entkoppelt" sind.

Wie auch immer, die Web-Anfrage wird von einem Backend-Dienst oder möglicherweise von mehreren Diensten verarbeitet, z. B. 'Buchtitel nachschlagen', 'Warenkorb erstellen', 'Werbung abrufen', 'Benutzerkonto prüfen'... Schließlich werden alle Ergebnisse in eine andere Warteschlange gestellt, wo sie vom Webserver abgeholt und vom Benutzer beantwortet werden können. Normalerweise sieht das System eine Zeitüberschreitung von etwa 100 ms vor, so dass alle verspäteten Anfragen einfach weggeworfen werden. Der Benutzer sieht alles, was in diesem Zeitintervall verarbeitet wurde. Dies ist einer der Gründe, warum einige große E-Commerce-Websites Seiten haben, die scheinbar in Etappen geladen werden.

Es gibt viele weitere Anwendungsfälle...

Macht es Sinn, wenn Sie eine Webapp schreiben, bei der Sie die Serverseite kontrollieren und eine homogene Umgebung haben (z.B. Dutzende von Amazon EC2-Instanzen, auf denen alle Linux + Java JVMs laufen), und die Clients, nun ja, Webbrowser sind?

Auf jeden Fall. Wenn Sie eine unbekannte oder unbegrenzte Anzahl von Benutzern, serverseitigen Instanzen und Anwendungslatenzen haben, dann ist es sinnvoll, Messaging zu verwenden, und sei es nur als skalierbares Substrat für nicht blockierende RPC.

Ist es sinnvoll für Desktop-Anwendungen, die mit einem Server kommunizieren müssen?

In vielen Fällen. Ein sehr häufiger Fall ist, wenn der Server Ereignisse an die Desktop-App weiterleitet, z. B. Spielereignisse, Tweets, Preisfeeds im Finanzwesen, Systemwarnungen....

Oder ist es "nur" für große Unternehmen gedacht, in denen man typischerweise eine bunte Mischung aus unzähligen verschiedenen Systemen hat, die auf die eine oder andere Weise miteinander kommunizieren müssen?

Sicherlich nicht nur für diese Fälle der "Altlastenintegration", aber auch sie sind wichtig. Bei RabbitMQ sind die größten Kunden, die wir in Bezug auf den reinen Umfang oder das Nachrichtenvolumen haben, Cloud-Anbieter und große Anbieter von Webanwendungen.

6voto

t0mm13b Punkte 33393

Ich werde nur eine Antwort geben, und zwar aus eigener Erfahrung - sehen Sie sich das an middle-ware Entera, mit dem ich Erfahrung habe, schafft eine mittlere Schicht, in der die Unix-Box, die in C geschriebene Prozesse verwendet, mit dem Mainframe-System (DB2, COBOL) über ein in PowerBuilder geschriebenes Front-End interagiert (ich nenne den Namen der Firma nicht!).

Aus der Beschreibung, die ich gegeben habe, geht hervor, dass Entera eine Middleware ist, die eine Reihe von Dingen beherbergt - reibungslose Integration des Datenflusses unabhängig vom Endian-Format, die Möglichkeit für verschiedene Sprachen, mit dem Middleware-Broker zu sprechen (ein Broker ist ein CORBA o DCE Prozess, der mit 'The Open Group' konform ist und auf einem bestimmten Port lauscht) und wird durch eine IDL was einen Prozess als lokal erscheinen lässt - wenn Sie die in Remoting unter Microsofts .NET Framework verwendete Terminologie verstehen, liegen Sie nicht weit daneben! Die Middleware generiert Stubs, die zur Kompilierungszeit verlinkt werden und verwaltet die Erstellung des Prozesses, das Hosting an einem Port, Multi-Threading zur Laufzeit und auch die modernen Front-Ends (wie .NET, Java, PowerBuilder und sogar das unaussprechliche VB6...ok...VB.NET für die Puristen da draußen) können interagieren, indem sie eine Verbindung zum angegebenen Port an einer bestimmten IP-Adresse öffnen und mit Hilfe der generierten Stubs direkt mit ihm interagieren.

Aus dem Beschriebenen wird ersichtlich, wie den Altsystemen neues Leben eingehaucht werden kann und somit die Skalierbarkeit des Prozesses verbessert werden kann, wobei der größte Nachteil der Kostenfaktor ist, der sich auf mehrere tausend Dollar belaufen kann. Große Unternehmen, die Mainframes als Backend-Verarbeitungssysteme für die Fakturierung verwenden und enorme Umsätze erzielen, können sich offensichtlich ein solch teures Produkt leisten - für sie wäre es so, als würde man Pfennige in ein Wasserbecken werfen... Durch den Einsatz von Middleware, die den Geschäftsprozess verlängert und ihm neues Leben einhaucht, kann das Unternehmen eine ganze Reihe von Jahren in die Zukunft blicken, ohne sich um das Etikett "Legacy" zu sorgen.

Ich habe dies übrigens im Rahmen meiner BSc.-Abschlussarbeit in Wirtschaftsinformatik durchgeführt, die sich mit diesem kommerziellen Frontend befasste. Es gab eine Open-Source-Version der Middleware, die auf Sourceforge verfügbar war. FreeDCE aber die Entwicklungsanstrengungen sind zurückgegangen oder wurden eingestellt.

Edita: @cocotwo: Das ist genau das, was Middleware tut, wie Sie sagten, es ist ein Klempner-Tool ... Nachricht orientierte Middleware ist nicht wirklich von AFAIK gehört, weil ich mir vorstellen würde, die Prozesse (Funktionen) müssten aufgerufen werden, als ob sie lokal sichtbar innerhalb der Anwendungsdomäne des Front-Ends, um es einfach zu interagieren mit zu machen.

Die Verwendung von Nachrichten kann gegenüber RPC-Aufrufen den Vorteil haben, dass die Nachrichten in einer Warteschlange in einem sicheren Bereich aufbewahrt werden, falls eine Netzwerkunterbrechung auftritt - in diesem Aspekt kann ein gewisses Daten-Caching stattfinden, damit das Front-End unabhängig davon fortfahren kann... dies wäre in den Fällen nützlich, in denen der Status einer bestimmten Rechnungs-/Nachweisnummer aktualisiert werden soll - ein einseitiges Schreiben von Daten an das Back-End über die Middleware.

Okay, große Unternehmen verfügen über eine fortschrittliche Systeminfrastruktur, bei der Techniker rund um die Uhr im Einsatz sind, um einen reibungslosen Datenfluss zu gewährleisten, was ebenfalls berücksichtigt werden muss. Das Unternehmen, mit dem ich gearbeitet habe, hatte einen IBM Global Support-Vertrag zu erfüllen, um eine maximale Betriebszeit von 99 % mit sechs Neunen hinter dem Komma zu gewährleisten... mit Hot-Swapping/ausgewogenen Clustern/Spiegelungssystemen vor Ort...

Bei RPC hingegen müsste das Front-End neu gestartet werden, wenn die Verbindung unterbrochen wird, oder das Ereignis der Verbindungsunterbrechung behandeln. Es hängt wirklich davon ab, ob die Middleware, die die Nachrichten in die Warteschlange stellt, jede Nachricht in Echtzeit verarbeitet und die Ergebnisse sofort an das Front-End zurückgibt...

Hier haben beide (Message-Queueing und RPC-bezogene Middleware) ihre Stärken und Schwächen... und auch der Faktor der Kostenreduzierung wie Support, maximale Betriebszeit, Entwicklungsaufwand und Training - das ist hier ein großes Problem, da Middleware wirklich proprietär ist (obwohl sie dem Layout/Standard von 'The Open Group' folgt) und komplex einzurichten und das Ganze über Skripte zusammenzukleben ist.

5voto

user378411 Punkte 51

Gute Antworten und Diskussionen hier. Unser Beratungsteam hat zwei bevorzugte "Messaging"-Lösungen: RabittMQ und NXTera, eine Hochgeschwindigkeits-RPC-Middleware, die moderne Version des oben erwähnten Entera. Meine Partner und ich haben mehrere Lösungen mit RabittMQ entwickelt, es ist das beste Tool, das derzeit in diesem Bereich verfügbar ist. Außerdem arbeite ich zufällig für das Unternehmen, das NXTera/Entera herstellt.

Aus Erfahrung kann ich eindeutig sagen, dass beide Produkte die oben genannten Anforderungen an Zuverlässigkeit und geringen Wartungsaufwand erfüllen. Es gibt Situationen, in denen ein Messaging-Dienst wie RabittMQ die richtige Wahl ist - wenn Publish and Subscribe, zertifizierte Zustellung, Queuing oder Store-and-Forward erforderlich sind.

In anderen Fällen sind RPCs (Remote Procedure Calls) die beste und schnellste Lösung für die transaktionale und verteilte Verarbeitung von Unternehmens- oder Cloud-basierten Anwendungen. Wenn es richtig ist, eine RPC zu verwenden, aber SOAP/.NET (ja, das sind RPC-Implementierungen) zu langsam, teuer oder komplex sind, ist eine leichte Hochgeschwindigkeits-RPC-Middleware wie NXTera/Entera die richtige Wahl für uns.

Es gibt einige Überschneidungen zwischen RPC-Middleware und nachrichtenorientierter Middleware, und wo dies der Fall ist, können Sie beide erfolgreich einsetzen. Aber beide sind starke und zuverlässige Optionen.

Die großen Unternehmen, mit denen ich zusammenarbeite, verwenden sowohl RPC als auch MoM nebeneinander. Was die Internetunternehmen betrifft, so zeigen Google (Protocol Buffers) und Facebook (Thrift), dass RPCs in der modernen web- und cloudbasierten Entwicklung eine Rolle spielen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X