Moderne App-Entwicklung - Messaging

Messaging-Lösungen verbinden die Komponenten Ihrer App, sodass sie Daten zuverlässig austauschen, transparent skalieren und ein hohes Maß an Verfügbarkeit erreichen können.Mit ihnen können Sie die Verarbeitung von Data Producer entkoppeln, nicht verarbeitete Nachrichten effizient puffern und Nachrichtendauerhaftigkeit, Verarbeitungsskalierbarkeit und Anwendungsresilienz bereitstellen.

Nachrichtenorientierte Anwendungen umfassen eine Reihe von Architekturen: Die Datenübertragung zwischen Komponenten kann Teil einer genau definierten verteilten und konvergierten Verarbeitungspipeline sein oder Komponenten können Nachrichten in mehreren unabhängigen Downstream-Systemen veröffentlichen, die sich unabhängig entwickeln. Es gibt drei allgemeine moderne Messaging-Modelle, die jeweils gemeinsame und unterschiedliche Anwendungsanforderungen erfüllen:

Ereignisstreaming

Event Streaming-Anwendungen erfassen Datenstreams mit hohem Volumen und hoher Geschwindigkeit, die in Echtzeit verarbeitet werden müssen. Die Rohdaten müssen verarbeitet werden, um Erkenntnisse zu extrahieren, die von anderen Anwendungskomponenten, zur Überwachung oder zur späteren Analyse verwendet werden können.

Beschreibung von maf-messaging-streaming.png folgt
Beschreibung der Abbildung maf-messaging-streaming.png

maf-messaging-streaming-oracle.zip

In diesem Beispiel verwendet die Ereignisstreaminganwendung Oracle Cloud Infrastructure Streaming oder Oracle Transactional Event Queues (TEQ) als zugrunde liegende Messaging-Lösung, Oracle Cloud Infrastructure Functions für die Echtzeitverarbeitung und Oracle Autonomous Database als Sicherungsspeicher.

Veröffentlichen-Abonnieren

Publish-Subscribe oder Pub/Sub ist ein Kommunikationsmuster, bei dem Daten-Producer Daten in bestimmten Themen veröffentlichen, die dann von einer beliebigen Anzahl nachgelagerter Verbraucher konsumiert werden können, indem sie diese Themen abonnieren. Die Kopplung zwischen Erzeugern und Verbrauchern ist ganz locker, so dass sich die Verbraucher unabhängig entwickeln können, ohne die vorgelagerten Erzeuger zu beeinträchtigen.

Beschreibung von maf-messaging-publishers-subscriber.png folgt
Beschreibung der Abbildung maf-messaging-publishers-subscriber.png

maf-messaging-publishers-subscriber-oracle.zip

In diesem Beispiel wird gezeigt, wie Sie mit Oracle Cloud Infrastructure Streaming oder Oracle TEQ ein Pub-/Subnachrichtenmuster implementieren.

Nachrichtenwarteschlange

Message Queuing ermöglicht die verteilte zustandsbehaftete Verarbeitung, bei der Upstream- und Downstream-Komponenten eng gebunden sind und gemeinsam einen Anwendungsworkflow implementieren. Die Messaginglösung muss Semantik wie mindestens einmalige Zustellung unterstützen, um sicherzustellen, dass Nachrichten nicht verloren gehen, bevor sie konsumiert werden.

Beschreibung von maf-messaging-queuing.png folgt
Beschreibung der Abbildung maf-messaging-queuing.png

maf-messaging-queuing-oracle.zip

Dieses Beispiel veranschaulicht, wie Sie mit Oracle Cloud Infrastructure Queue oder Oracle TEQ Nachrichtenqueuing implementieren.

Designprinzipien

Verwenden Sie die folgenden Designprinzipien, um Ihre Messaging-Anwendungen oder -Plattform zu erstellen.
  • Erstellen Sie Apps als Suite von Services, die über REST-APIs kommunizieren

    Verwenden Sie branchenübliche APIs wie Kafka und JMS, um Anwendungsinteroperabilität bereitzustellen und nahtlos Hybrid- und Multicloud-Messaginganwendungen zu erstellen. Oracle Cloud Infrastructure-(OCI-)Streaming stellt eine Kafka-Kompatibilitäts-API bereit, und Oracle Transaction Event Queues (TEQ) unterstützen sowohl Kafka- als auch JMS-APIs. Sowohl Kafka als auch JMS werden von Drittanbieterprodukten weitgehend unterstützt. Beispiel: Mit dem Confluent Kafka JMS Connector können Sie Nachrichten zwischen Oracle TEQ und Kafka übertragen. Sie können auch Kafka Connect verwenden, das im Oracle Container Engine for Kubernetes-Cluster bereitgestellt ist, um eine Verbindung zu Produkten von Drittanbietern herzustellen. Oracle Cloud Infrastructure Queue kann mit der RESTful-API-Definition (mit einer OpenAPI-Spezifikation) oder mit dem standardmäßigen STOMP-Protokoll der Branche aufgerufen werden.

  • Verwenden Sie verwaltete Services, um die Komplexität bei der App-Entwicklung und beim Betrieb zu beseitigen

    Verwenden Sie vollständig verwaltete Services mit integrierter Infrastrukturwartung und Sicherheitspatching wie OCI Streaming, OCI Queue und den Oracle TEQ- und Advanced Queuing-(AQ-)Features der Oracle Autonomous Database (ADB). Diese Services sind mit automatischer Replikation über Availability-Domains hinweg hochverfügbar und unterstützen die Skalierungsautomatisierung bei geänderten Ladevorgängen.

  • App-Tier zustandslos halten

    Messaging-bezogener Status wie die Position in einer Nachrichtenwarteschlange sollte nie in der App oder im lokalen Dateisystem gespeichert werden, da dies zum Datenverlust führen kann, wenn eine App-Instanz ausfällt. Apps können Nachrichteninhalte zur Verarbeitung cachen, aber die Messaging-Lösung sollte für alle Messaging-Daten die einzige Informationsquelle bleiben. Zugehörige Metadaten wie die Position in einer Nachrichtenqueue müssen in einer Datenbank oder im Objektspeicher gespeichert werden, um verlorene Nachrichten zu vermeiden und den idempotenten Vorgang sicherzustellen. Dies erleichtert die Fehlerbehebung und die Skalierung eines Service ohne Fehlerbehebung.

  • Überwachung und Rückverfolgung von Instrumenten durchgängig

    Erhalten Sie ein zuverlässiges Verständnis des Zustands, der Performance und des Betriebszustands Ihrer Anwendung. Mit dem Oracle Cloud Observability and Management Platform-Serviceportfolio erhalten Sie Transparenz und umsetzbare Erkenntnisse über alle Ebenen des Anwendungsstacks, von Datenproduzenten und Verbrauchern bis hin zu den Messaging-Pipelines selbst. Überwachen Sie Warteschlangenlängen und Verarbeitungsdauer, um Fehler und Engpässe zu erkennen und Probleme mit Services zu erkennen, die Themen abonnieren.

  • Beseitigen Sie einzelne Fehlerpunkte durch automatisierte Datenreplikation und Fehlerbehebung

    Sichern Sie Messaging-Daten in einem persistenten Speicher, um gesetzliche und Compliance-Anforderungen zu erfüllen. Regionsübergreifendes Backup für Disaster Recovery verwenden Integrieren Sie Idempotenz in Ihre Messaging-Anwendungen, indem Sie beispielsweise Timeouts für die Nachrichtensichtbarkeit in der OCI-Queue verwenden. Schreiben Sie nicht behebbare Fehler in einen separaten Stream, eine Queue mit ungenutzten Anschreiben oder persistenten Speicher, ohne die primäre Ausführungspipeline zu blockieren.

  • Implementieren Sie einen automatisierten Defense-in-Depth-Ansatz, um Ihre App und ihre Daten zu sichern

    Implementieren Sie Oracle Cloud Infrastructure Identity and Access Management-(IAM-)Policys, damit nur autorisierte Benutzer Daten aus OCI-Streams und -Queues erstellen, senden oder empfangen können. Wenden Sie das Prinzip der Mindestreichbarkeit an, indem Sie den Zugriff auf Messaging-Endpunkte über private Endpunkte und ein Servicegateway sichern, durch das der Zugriff über das Internet eingeschränkt wird. Nutzen Sie die Out-of-the-box-Funktion von OCI Streaming, OCI Queue und TEQ, um Daten im Ruhezustand und bei der Übertragung zu verschlüsseln, um die Datenvertraulichkeit zu erreichen. Wenn Sie jedoch mehr Eigentümer der Schlüsselrotation benötigen, verwenden Sie den Oracle Cloud Infrastructure Vault-Service, um Ihre Masterschlüssel sicher zu verwalten.

Architektur

Das folgende Diagramm zeigt, wie Sie mit OCI Streaming das Ereignisstreaming implementieren können
Beschreibung von maf-messaging.png folgt
Beschreibung der Abbildung maf-messaging.png

maf-messaging-oracle.zip

Verwenden Sie OCI Streaming, um die Ereignisstreaming- und Pub-/Subnachrichtenmuster zu implementieren, und Oracle Cloud Infrastructure Queue, um Nachrichtenqueuing zu implementieren. Mit Oracle Autonomous Database können Sie verarbeitete Ereignisdaten persistieren. OCI-Funktionen können zur Verarbeitung von Ereignisdaten verwendet werden, bevor sie von Downstream-Anwendungskomponenten verwendet oder in der Datenbank persistiert werden.

Implementieren Sie die Netzwerkisolation mithilfe dedizierter Subnetze für Ihre Anwendung und die Datenbank sowie für die Messaging-Services. Sichern Sie den Zugriff auf Ihre Streams mit privaten Endpunkten. Mit Oracle Cloud Infrastructure Identity and Access Management-(IAM-)Policys den Zugriff auf Queues einschränken

Verwenden Sie Oracle Cloud Infrastructure Object Storage zur langfristigen Nachrichtenaufbewahrung. Verwenden Sie einen serverlosen Service wie Service Connector, um Daten nahtlos von OCI Streaming in Object Storage zu verschieben, und aktivieren Sie das regionsübergreifende Backup von Object Storage, um ein mehrseitiges Backup zu erhalten. Implementieren Sie eine regionsübergreifende Disaster Recovery-Strategie mit Kafka MirrorMaker 2.0, die in einer fehlertoleranten Oracle Container Engine for Kubernetes-(OKE-)Umgebung bereitgestellt ist, um Daten zwischen Streams asynchron zu replizieren. Dieses Setup ermöglicht ein Recovery Time Objective (RTO) und ein Recovery Point Objective (RPO) von Minuten. Verwenden Sie Remote-VCN-Peering, um minimale Latenz während der Datenübertragung sicherzustellen.

Verwenden Sie tote Anschreibenqueues, um problematische Nachrichten zu isolieren. Dead Letter Queues werden automatisch erstellt, wenn Sie eine Queue erstellen. Mit Dead Letter Queues können Sie vermeiden, dass nicht erfolgreiche Nachrichten die primäre Ausführungspipeline blockieren. Nachrichten in der Queue mit Deadbriefen können dann analysiert werden, um zu ermitteln, warum sie nicht erfolgreich waren.

Integrieren Sie Idempotenz in Anwendungen, indem Sie die Offsets der verarbeiteten Nachrichten im externen Speicher wie Object Storage speichern. Duplikate durch Abfragen des externen Speichers erkennen und verwerfen. Kategorisieren Sie Fehler, die leicht wiederherstellbar sind und eine Wiedergabe von Nachrichten ermöglichen.

Diese Architektur verwendet die folgenden Services und Technologien:

  • Streaming

    Oracle Cloud Infrastructure Streaming bietet eine komplett verwaltete, skalierbare und dauerhafte Storage-Lösung, mit der Sie fortlaufende und hochvolumige Datenstreams aufnehmen können, die Sie in Echtzeit verwenden und verarbeiten können. Sie können Streaming für die Aufnahme großer Datenmengen verwenden, z.B. Anwendungslogs, betriebliche Telemetrie, Clickstream-Webdaten oder für andere Anwendungsfälle, bei denen kontinuierlich und sequenziell Daten in einem Messagingmodell für das Veröffentlichen/Abonnieren erzeugt und verarbeitet werden.

  • Queue

    Die Oracle Cloud Infrastructure-Warteschlange bietet ein skalierbares System zur Verarbeitung von Nachrichten und zur Bearbeitung komplexer Verwaltungsaufgaben, wie garantierte Verarbeitung, Nachverfolgung und Clientisolation. Dieser zentralisierte Service verwaltet auch die Nachrichtenreihenfolge und den Verarbeitungsstatus, sodass zustandslose Clientprozesse die Cursorverfolgung auslagern können.

  • Funktionen

    Oracle Cloud Infrastructure Functions ist eine vollständig verwaltete, mehrmandantenfähige, hochskalierbare, bedarfsgesteuerte Functions-as-a-Service-(FaaS-)Plattform. Sie wird von der Open-Source-Engine des Fn-Projekts unterstützt. Mit Funktionen können Sie Ihren Code bereitstellen und ihn entweder direkt aufrufen oder als Reaktion auf Ereignisse auslösen. Oracle Functions verwendet Docker-Container, die in Oracle Cloud Infrastructure Registry gehostet werden.

  • Servicekonnektoren

    Oracle Cloud Infrastructure Service Connector Hub ist eine Cloud-Nachrichtenbusplattform, die das Verschieben von Daten zwischen Services in OCI orchestriert. Mit Service-Connectors können Sie Daten aus einem Quellservice in einen Zielservice verschieben. Mit Service-Connectors können Sie optional eine Aufgabe (wie eine Funktion) angeben, die für die Daten ausgeführt werden soll, bevor sie an den Zielservice zugestellt wird.

    Mit Oracle Cloud Infrastructure Service Connector Hub können Sie schnell ein Loggingaggregations-Framework für Security Information and Event Management-(SIEM-)Systeme erstellen.

Datenbankorientierte alternative Architektur

Diese Architektur verwendet Transactional Event Queues (TEQ), um Messaging-Muster in modernen Anwendungen zu implementieren. TEQ ist ein integriertes Feature von Oracle Autonomous Database.

Beschreibung von maf-messaging-alternate.png folgt
Beschreibung der Abbildung maf-messaging-alternate.png

maf-messaging-alternate-oracle.zip

Diese Architektur vereinfacht die Nutzung externer Streaming- oder Queueing-Services und ermöglicht Transaktionsnachrichtenfunktionen, mit denen gängige Microservices-Muster vereinfacht werden.

TEQ kombiniert Daten- und Nachrichtenverarbeitung in einer skalierbaren Infrastruktur, die Lebenszyklusmanagement, Sicherheit und Disaster Recovery vereinfacht und gleichzeitig eine hohe Performance bietet. TEQ unterstützt gängige Messaging-Muster wie Streaming, Queuing und Pub/Sub. Mit TEQ können Sie Transaktionen für Messaging- und Datenbankvorgänge implementieren und Messaging-Muster wie Transaktions-Outbox und exakt einmaliges Messaging mit wenig oder ohne zusätzlichen Code einfach implementieren. Oracle TEQ bietet exakt einmaliges Messaging für Anwendungen, die in der Datenbank ausgeführt werden. Dies bedeutet, dass Sie keine Nachrichten-IDs verwalten müssen, um nach den doppelten Nachrichten zu suchen oder idempotente Consumer auf Anwendungsebene zu erstellen. TEQ unterstützt sowohl kleine Nachrichten, die in der Ereignisverarbeitung typisch sind, als auch größere Payloads im Zusammenhang mit Geschäftsworkflows und kann auch als sicheres Event-Mesh fungieren.

Das Entfernen externer Streaming- oder Queueing-Services vereinfacht das Statusmanagement. Ereignisse und Nachrichten werden in derselben Datenbank gespeichert, die von der Anwendung verwendet wird. So können Sie auf einfache Weise Konsistenz bei Ihren Ereignissen, Nachrichten und Anwendungsänderungen erreichen und aufrechterhalten. Wenn ein Fehler auftritt, der ein Point-in-Time Recovery oder ein Disaster Recovery erfordert, wird alles (Ereignisse, Nachrichten und Anwendungsdaten) automatisch in einem konsistenten Status wiederhergestellt.

TEQ profitiert von der High Availability von Autonomous Database. Messaging-Daten in TEQ werden automatisch durch die regionsübergreifende Replikation von ADB mit Autonomous Data Guard gesichert und geschützt. Sie können Oracle TEQ mit Oracle Real Application Clusters und Oracle Active Data Guard hochverfügbar bereitstellen, wobei beide integrierte Funktionen von Oracle Autonomous Database sind. Oracle Real Application Clusters bieten Verfügbarkeit innerhalb einer Region, während Oracle Active Data Guard regionsübergreifenden Disaster Recovery-Schutz bietet.

Verwenden Sie diese Architektur, wenn Ihre Anwendung eine der folgenden Aktionen ausführt:

  • Nachrichtenwarteschlangen müssen implementiert werden, und Semantik wie Transaktionsausgang ist erforderlich
  • Keine unabhängige Skalierung der Datenbank und des Messaging-Substrats erforderlich

Diese Architektur verwendet die folgenden Services und Technologien:

  • Transaktionsereigniswarteschlangen (TEQ) und Advanced Queuing (AQ)

    Transactional Event Queues (TEQ) und Advanced Queuing (AQ) sind robuste und funktionsreiche Message Queuing-Systeme, die in Oracle Database integriert sind. Transactional Event Queues (TEQ) sind eine leistungsstarke, partitionierte In-Memory-Implementierung mit mehreren Ereignisstreams pro Queue. Advanced Queuing (AQ) ist für einfachere Workflow-Anwendungsfälle geeignet. Diese Features nutzen Oracle Database, um Nachrichten dauerhaft zu speichern und hohe Durchsatz- und Skalierbarkeit sicherzustellen.

  • Funktionen

    Oracle Cloud Infrastructure Functions ist eine vollständig verwaltete, mehrmandantenfähige, hochskalierbare, bedarfsgesteuerte Functions-as-a-Service-(FaaS-)Plattform. Sie wird von der Open-Source-Engine des Fn-Projekts unterstützt. Mit Funktionen können Sie Ihren Code bereitstellen und ihn entweder direkt aufrufen oder als Reaktion auf Ereignisse auslösen. Oracle Functions verwendet Docker-Container, die in Oracle Cloud Infrastructure Registry gehostet werden.

Nicht empfohlene Architekturen

  • Monolithische Nachrichten- und Service Bus-Anwendungen

    Messaging-Lösungen wie RabbitMQ unterstützen möglicherweise die Integration mit anderen Komponenten über offene Standards und APIs. Diese Lösungen erfordern jedoch erheblichen Verwaltungsaufwand für KMU und bieten möglicherweise keine verteilte Redundanz und High Availability ohne selbstverwaltete komplexe Topologien.

  • Kafka-Cluster in einer selbstverwalteten Cloud- oder On-Premise-Umgebung

    Diese Lösung bietet zwar Skalierbarkeit und hohe Verfügbarkeit, erfordert jedoch erhebliche spezialisierte Entwicklerkenntnisse und umfangreichen Verwaltungsaufwand für KMU. Gehen Sie sorgfältig vor, bevor Sie diese Option auswählen, da die Produktionszeit und das Risiko hoher Gesamtbetriebskosten (Gesamtbetriebskosten) nicht überschritten werden.

Überlegungen

Beachten Sie bei der Implementierung des Messaging-Entwurfsmusters die folgenden Implementierungsoptionen.

Wählen Sie die richtige Messaging-Plattform basierend auf Ihren Anwendungsanforderungen

Foundation-Plattformen und -Services können ähnlich aussehen und allgemeine Features gemeinsam nutzen. Jede Plattform verfügt jedoch über einzigartige Funktionen und Stärken, die Ihren Anwendungsanforderungen besser entsprechen können. Beispiel:

  • Verwenden Sie OCI Streaming- oder Transaktionsereigniswarteschlangen, wenn Ihre Anwendungen eine Echtzeit-Messagingplattform mit hohem Durchsatz benötigen, die Nachrichtenwiedergabe- und Pub-Sub-Fähigkeiten bietet.
  • Verwenden Sie Queues für Transaktionsereignisse, wenn Sie Daten asynchron mit einem skalierbaren und zuverlässigen Point-to-Point-Puffer verschieben müssen.
  • Mit Service Connector Hub (SCH) können Sie die Integration mit Infrastrukturressourcen aktivieren.
  • Verwenden Sie Transactional Event Queues (TEQ) in der Datenbank, wenn Sie neue Microservices mit in Oracle Autonomous Database integriertem Messaging entwickeln.

Public Case-Studien

Oracle Streaming-basierte Architektur

Tango Eye wandelt Überwachungsvideo in umsetzbare Erkenntnisse für den Einzelhandel um.

  • Oracle Cloud Infrastructure (OCI) Streaming services sind ein Publish-Subscribe-Messaging-System mit geringem Wartungsaufwand für verschiedene Microservices. 
  • Oracle Cloud Infrastructure Functions führt serverlose Jobs ohne technischen Überblick aus.
  • Lebenszyklus-Policys für Oracle Cloud Infrastructure Object Storage archivieren und löschen Daten automatisch. So können Kosten reduziert werden, ohne den Wert der KI-basierten Analysen von Tango Eye zu reduzieren.

Oracle TEQ-basierte Architektur

FedEx verwendet die Oracle E-Business Suite und den Geschäftsereignismanager, die mit Oracle TEQ entwickelt wurden, für Debitoren der 15,5 Millionen Pakete, die täglich geliefert werden.

  • FedEx hat E-Business Suite mit Exadata Cloud Service in Oracle Cloud Infrastructure Object Storage verschoben. Workflows und das Geschäftsereignissystem der E-Business Suite basieren vollständig auf dem AQ-(Oracle Advanced Queuing-)Messaging.
  • Oracle AQ ist einfach zu verwenden und für die Workfloworchestrierung geeignet. Bei Ereignissen mit hohem Durchsatz ist Oracle TEQ der Hochleistungs-Drop-in-Ersatz mit mehreren Ereignisstreams pro Queue, die mit Apache Kafka kompatibel sind.

Bereitstellen

Universal Health Organization (UHO) ist eine Beispielanwendung, die den Grundsätzen des Modern App Development Framework entspricht. Insbesondere implementiert er Elemente der Web- oder Mobile-, Messaging- und ereignisgesteuerten Architekturmuster und ist unter GitHub verfügbar.
  1. Gehen Sie zu GitHub.
  2. Klonen Sie das Repository, oder laden Sie es auf den lokalen Rechner herunter.
  3. Befolgen Sie die Anweisungen im Dokument README.

Änderungslog

In diesem Log werden wichtige Änderungen aufgelistet:

Bestätigungen

Authors: Harshad Kasture, Randall Barnes, Matthias Brantner

Contributors: Hassan Ajan, James Emerson, Parvez Syed Mohamed, Sajan Parihar, Wei Hu, Sreya Dutta, Joshua Stanley