Hallo zusammen!
Ich habe mit der Ăbersetzung eines kleinen Buches begonnen:
««,
Autor: Jakub Korab, Verlag: OâReilly Media, Inc., Erscheinungsdatum: Juni 2017, ISBN: 9781492049296.
Aus der Einleitung des Buches:
«⊠Dieses Buch wird Ihnen beibringen, ĂŒber Systeme zum Austausch von Nachrichten ĂŒber Broker nachzudenken, indem zwei beliebte Broker-Technologien, Apache ActiveMQ und Apache Kafka, verglichen und gegenĂŒbergestellt werden. Es werden Anwendungsbeispiele und Entwicklungsimpulse dargelegt, die dazu fĂŒhrten, dass deren Entwickler völlig unterschiedliche AnsĂ€tze im selben Bereich â dem Nachrichtenaustausch zwischen Systemen mit einem vermittelnden Broker â verfolgten. Wir werden diese Technologien von Grund auf untersuchen und die Auswirkungen verschiedener Designoptionen auf diesem Weg herausarbeiten. Sie werden ein tiefes VerstĂ€ndnis fĂŒr beide Produkte erlangen, wissen, wie sie zu nutzen sind und wie nicht, und verstehen, worauf zu achten ist, wenn Sie in Zukunft andere Technologien fĂŒr den Nachrichtenaustausch betrachten. âŠÂ»
Bis jetzt ĂŒbersetzte Teile:
Ich werde die fertigen Kapitel nach und nach veröffentlichen.
KAPITEL 1
EinfĂŒhrung
Der intersystemliche Nachrichtenaustausch ist eines der am wenigsten verstandenen Bereiche der IT. Als Entwickler oder Architekt sind Sie möglicherweise gut mit verschiedenen Frameworks und Datenbanken vertraut. Es ist jedoch sehr wahrscheinlich, dass Sie nur flĂŒchtig mit dem Funktionsweise von brokerbasierten Nachrichtenaustauschtechnologien vertraut sind. Wenn Sie sich so fĂŒhlen, brauchen Sie sich keine Sorgen zu machen, Sie sind in guter Gesellschaft.
Die Menschen haben normalerweise nur sehr begrenzten Kontakt mit der Messaging-Infrastruktur. Oft wird auf ein System zugegriffen, das lange Zeit zuvor erstellt wurde, oder es wird ein Distributionspaket aus dem Internet heruntergeladen, installiert in der PROD und daraufhin beginnt man, Code dafĂŒr zu schreiben. Nach dem Start der Infrastruktur in der PROD können die Ergebnisse uneindeutig sein: Nachrichtenverlust bei AusfĂ€llen, das Senden funktioniert nicht so, wie Sie es erwartet haben, oder die Broker 'hĂ€ngen' Ihre Producer oder senden keine Nachrichten an Ihre Consumer.
Klingt bekannt?
Ein verbreitetes Szenario ist, dass Ihr Messaging-Code eine Zeit lang hervorragend funktioniert. Bis er plötzlich ausfĂ€llt. Diese Phase schĂŒrt die Wachsamkeit und vermittelt ein falsches SicherheitsgefĂŒhl, was zu noch mehr Code fĂŒhrt, der auf falschen Vorstellungen ĂŒber das grundlegende Verhalten der Technologie basiert. Wenn etwas nicht mehr funktioniert, stehen Sie der unangenehmen Wahrheit gegenĂŒber: Sie haben das grundlegende Verhalten des Produkts oder die Kompromisse, die die Autoren getroffen haben, nicht wirklich verstanden, wie beispielsweise Leistung gegen ZuverlĂ€ssigkeit oder TransaktionalitĂ€t gegen horizontale Skalierbarkeit.
Ohne ein tiefes VerstĂ€ndnis dafĂŒr, wie Broker arbeiten, treffen Menschen scheinbar vernĂŒnftige Behauptungen ĂŒber ihre Messaging-Systeme, wie zum Beispiel:
- Das System wird niemals Nachrichten verlieren.
- Nachrichten werden sequenziell verarbeitet.
- Die HinzufĂŒgung von Consumer wird das System schneller machen.
- Nachrichten werden nur einmal zugestellt.
Leider basieren einige dieser Behauptungen auf Annahmen, die nur unter bestimmten UmstÀnden gelten, wÀhrend andere einfach falsch sind.
Dieses Buch wird Ihnen beibringen, ĂŒber Messaging-Systeme auf Basis von Brokern nachzudenken, indem es zwei beliebte Broker-Technologien vergleicht und gegenĂŒberstellt: Apache ActiveMQ und Apache Kafka. Hier werden Anwendungsbeispiele und Entwicklungsanreize dargestellt, die dazu gefĂŒhrt haben, dass ihre Entwickler völlig unterschiedliche AnsĂ€tze im gleichen Bereich â Messaging zwischen Systemen mit einem zwischengeschalteten Broker â gewĂ€hlt haben. Wir werden diese Technologien von Grund auf betrachten und den Einfluss verschiedener Designoptionen auf diesem Weg hervorheben. Sie werden ein tiefes VerstĂ€ndnis beider Produkte gewinnen, verstehen, wie sie eingesetzt werden sollten und wie nicht, und lernen, worauf Sie bei der PrĂŒfung anderer Messaging-Technologien in der Zukunft achten sollten.
Bevor wir beginnen, lassen Sie uns die Grundlagen durchgehen.
Was ist ein Messaging-System und wozu wird es benötigt?
Damit zwei Anwendungen miteinander kommunizieren können, mĂŒssen sie zunĂ€chst eine Schnittstelle definieren. Die Definition dieser Schnittstelle umfasst die Auswahl eines Transport- oder Protokolls, wie HTTP, MQTT oder SMTP, und die Abstimmung der Nachrichtenformate, ĂŒber die die Systeme kommunizieren werden. Dies kann ein strenger Prozess sein, wie die Definition eines XML-Schemas mit Anforderungen an die Payload-Kosten der Nachricht, oder es kann viel weniger formell sein, wie eine Vereinbarung zwischen zwei Entwicklern, dass ein bestimmter Teil der HTTP-Anfrage eine Client-ID enthalten wird.
Sobald das Nachrichtenformat und die Reihenfolge des Versands zwischen den Systemen abgestimmt sind, können sie miteinander interagieren, ohne sich um die Implementierung des anderen Systems kĂŒmmern zu mĂŒssen. Die inneren AblĂ€ufe dieser Systeme, wie Programmiersprache oder verwendeter Framework, können sich im Laufe der Zeit Ă€ndern. Solange der Vertrag selbst aufrechterhalten wird, kann die Interaktion ohne Ănderungen auf der anderen Seite fortgesetzt werden. Diese beiden Systeme sind durch diese Schnittstelle effektiv entkoppelt.
Nachrichtenaustauschszenarien sehen typischerweise einen Vermittler zwischen zwei Systemen vor, die interagieren, um den Sender von einem oder mehreren EmpfÀngern weiter zu entkoppeln. Dabei ermöglicht das Nachrichtensystem dem Sender, eine Nachricht zu senden, ohne zu wissen, wo sich der EmpfÀnger befindet, ob dieser aktiv ist oder wie viele Instanzen es gibt.
Betrachten wir einige Analogien zu den Arten von Problemen, die ein Nachrichtenaustauschsystem löst, und fĂŒhren wir einige grundlegende Begriffe ein.
Punkt-zu-Punkt
Alexandra geht zur Post, um Adam ein Paket zu senden. Sie tritt an den Schalter heran und ĂŒbergibt dem Angestellten das Paket. Der Angestellte nimmt das Paket entgegen und gibt Alexandra eine Quittung. Adam muss zum Zeitpunkt des Versands des Pakets nicht zu Hause sein. Alexandra ist zuversichtlich, dass das Paket irgendwann in der Zukunft an Adam geliefert wird und kann ihre anderen GeschĂ€fte fortsetzen. SpĂ€ter erhĂ€lt Adam das Paket.
Dies ist ein Beispiel fĂŒr ein Nachrichtenaustauschmodell punkt-zu-punkt. Das Postamt fungiert hier als Mechanismus zur Verteilung von Paketen und gewĂ€hrleistet, dass jedes Paket genau einmal zugestellt wird. Der Einsatz des Postamtes trennt den Akt des Versendens des Pakets von der Zustellung des Pakets.
In klassischen Messaging-Systemen wird das «Point-to-Point»-Modell durch Warteschlangenimplementiert. Eine Warteschlange fungiert als FIFO-Puffer (First In, First Out), auf den sich ein oder mehrere Verbraucher abonnieren können. Jede Nachricht wird nur einem der abonnierten Verbraucherzueingestellt. Warteschlangen versuchen normalerweise, die Nachrichten gerecht zwischen den Verbrauchern zu verteilen. Nur ein Verbraucher erhÀlt die betreffende Nachricht.
Auf Warteschlangen wird der Begriff «zuverlĂ€ssig» («durable») angewendet. ZuverlĂ€ssigkeit Dies ist eine Eigenschaft des Services, die garantiert, dass das Messaging-System Nachrichten speichert, solange keine aktiven Abonnenten vorhanden sind, bis ein Verbraucher sich fĂŒr die Zustellung von Nachrichten anmeldet.
ZuverlĂ€ssigkeit wird oft mit Persistenz verwechselt, und obwohl diese beiden Begriffe austauschbar sind, erfĂŒllen sie unterschiedliche Funktionen. Die Persistenz definiert, ob das Messaging-System eine Nachricht in irgendeiner Art von Speicher zwischen dem Empfang und der Zustellung an den Verbraucher aufzeichnet. Nachrichten, die in eine Warteschlange gesendet werden, können persistent oder nicht persistent sein.
Das Point-to-Point-Messaging wird verwendet, wenn der Anwendungsfall eine einmalige Verarbeitung der Nachricht erfordert. Ein Beispiel wĂ€re die Einzahlung von Geld auf ein Konto oder die AusfĂŒhrung einer Lieferbestellung. Wir werden spĂ€ter besprechen, warum das Messaging-System allein nicht in der Lage ist, einmalige Zustellung zu gewĂ€hrleisten und warum Warteschlangen bestenfalls eine Zustellgarantie bieten können mindestens einmal.
Publisher-Subscriber
Gabriella wÀhlt die Konferenznummer. Solange sie mit der Konferenz verbunden ist, hört sie alles, was der Sprecher sagt, zusammen mit den anderen Teilnehmern des Anrufs. Wenn sie sich trennt, verpasst sie alles, was gesagt wird. Wenn sie sich erneut verbindet, hört sie erneut, was gesagt wird.
Dies ist ein Beispiel fĂŒr ein Nachrichtenaustauschmodell Publish-Subscribe. Die Konferenzschaltung fungiert als Broadcast-Mechanismus. Die sprechende Person kĂŒmmert sich nicht darum, wie viele Personen derzeit an dem Anruf teilnehmen â das System stellt sicher, dass jeder, der gerade verbunden ist, hört, was gesagt wird.
In klassischen Messaging-Systemen wird das Messaging-Modell «Publish-Subscribe» durch Themen. Das Topic bietet denselben Broadcasting-Mechanismus wie die Konferenzschaltung. Wenn eine Nachricht an das Topic gesendet wird, wird sie verteilt an alle abonnierenden Benutzer.
Topics sind in der Regel nicht zuverlĂ€ssig (nondurable). Wie ein Zuhörer, der nicht hört, was wĂ€hrend eines Konferenzanrufs gesagt wird, wenn der Zuhörer sich abmeldet, verpassen Topic-Abonnenten alle Nachrichten, die in dem Moment gesendet werden, wo sie offline sind. Aus diesem Grund kann gesagt werden, dass Topics eine Zustellgarantie bieten, nicht mehr als einmal fĂŒr jeden Verbraucher.
Messaging-Modelle vom Typ âVeröffentlichung-Abonnementâ werden normalerweise verwendet, wenn die Nachrichten informativen Charakter haben und der Verlust einer Nachricht nicht besonders bedeutsam ist. Zum Beispiel kann ein Topic Temperaturdaten von einer Gruppe von Sensoren einmal pro Sekunde ĂŒbertragen. Ein System, das an der aktuellen Temperatur interessiert ist und sich auf das Topic abonniert hat, wird sich nicht sorgen, wenn es eine Nachricht verpasst â eine weitere wird in KĂŒrze gesendet.
Hybride Modelle
Die Website des Shops stellt Nachrichten ĂŒber Bestellungen in eine âNachrichtenschlangeâ. Der Hauptverbraucher dieser Nachrichten ist das AusfĂŒhrungssystem. DarĂŒber hinaus muss das Auditsystem Kopien dieser Bestellnachrichten fĂŒr die nachtrĂ€gliche Nachverfolgung haben. Beide Systeme dĂŒrfen keine Nachrichten verpassen, auch wenn die Systeme selbst fĂŒr eine gewisse Zeit nicht verfĂŒgbar sind. Die Website muss keine Kenntnisse ĂŒber andere Systeme haben.
Einsatzszenarien erfordern hĂ€ufig eine Kombination der Messaging-Modelle âVeröffentlichung-Abonnementâ und âPunkt-zu-Punktâ, zum Beispiel wenn mehrere Systeme eine Kopie der Nachricht benötigen und sowohl ZuverlĂ€ssigkeit als auch Persistenz erforderlich sind, um den Verlust einer Nachricht zu verhindern.
In diesen FĂ€llen ist ein EmpfĂ€nger (destination) erforderlich (allgemeiner Begriff fĂŒr Warteschlangen und Topics), der die Nachrichten hauptsĂ€chlich wie ein Topic verteilt, sodass jede Nachricht an ein separates System gesendet wird, das an diesen Nachrichten interessiert ist, aber auch, wo jedes System mehrere Verbraucher bestimmen kann, die eingehende Nachrichten empfangen, was eher einer Warteschlange Ă€hnelt. Die Art des Lesens in diesem Fall ist einmal fĂŒr jede interessierte Partei. Diese hybriden Adressaten verlangen oft nach ZuverlĂ€ssigkeit (Durability), sodass, wenn der Verbraucher sich trennt, die zu diesem Zeitpunkt gesendeten Nachrichten nach der Wiederverbindung des Verbrauchers angenommen werden.
Hybride Modelle sind nicht neu und können in den meisten Nachrichtenaustauschsystemen angewendet werden, einschlieĂlich sowohl ActiveMQ (ĂŒber virtuelle oder zusammengesetzte Adressaten, die Themen und Warteschlangen kombinieren) als auch Kafka (implizit als grundlegende Eigenschaft des Designs ihres Adressaten).
Jetzt, da wir einige grundlegende Begriffe und das VerstĂ€ndnis dafĂŒr haben, wofĂŒr wir ein Nachrichtenaustauschsystem benötigen könnten, lassen Sie uns zu den Details ĂŒbergehen.
Ăbersetzung von:
Der nĂ€chste ĂŒbersetzte Teil:
Fortsetzung folgtâŠ
Quelle: habr.com
