Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Asynchrone Kommunikation
Umgekehrt sendet der Client bei asynchroner Kommunikation eine Anfrage an einen Dienst, erhält aber keine sofortige Antwort. In diesem Fall erhält der Client normalerweise nur eine Bestätigung, dass die Anfrage akzeptiert wurde.
Zu den Vorteilen der asynchronen Kommunikation gehören:
-
Unterstützung ereignisgesteuerter Architekturen — Eignet sich hervorragend für die Ereignisbeschaffung und CQRS-Muster (Command Query Responsibility Segregation).
-
Besseres Ressourcenmanagement — Fähigkeit der Dienste, Anfragen auf der Grundlage ihrer Kapazität zu bearbeiten.
-
Verbesserte Fehlerisolierung — Entkopplung von Diensten, wodurch Kaskadenausfälle verhindert werden.
-
Umgang mit Spitzenlasten — Besserer Umgang mit Datenverkehrsspitzen durch Message Queuing.
Zu den Nachteilen gehört die Komplexität. Beispiel:
-
Wenn der Client das Ergebnis des asynchronen Vorgangs benötigt, erfordert die Implementierung eines Mechanismus zum Abrufen oder Empfangen dieses Ergebnisses mehr Aufwand.
-
Es kann schwieriger sein, Fehler bei asynchronen Vorgängen zu beheben, da die Fehlerbehebung die Untersuchung von Protokollen mehrerer Systeme erfordert.
-
Es kann schwieriger sein, asynchrone Operationen zu testen, da das Testen die Koordination zwischen mehreren Systemen und Diensten erfordert.
Zu den Ansätzen für asynchrone Kommunikation gehören Fire and Forget, Claim Check, Callback und bidirektionale Kommunikation.
Abfeuern und vergessen
Beim Fire-and-Forget-Muster sendet ein Client eine Anfrage an den Server und erhält synchron eine Bestätigung, dass der Server die Nachricht erhalten hat und verarbeiten wird. Die eigentliche Verarbeitung hat jedoch noch nicht stattgefunden, und der Client hat keine Vorstellung davon, wann oder wie sie durchgeführt wird. Das folgende Diagramm veranschaulicht dieses Muster.
In diesem Fall sollte der Dienst die Bestätigung erst senden, wenn das Objekt dauerhaft persistent ist. Diese Persistenz könnte als Datenbank-Schreibvorgang oder durch das Einfügen eines Elements in eine Warteschlange implementiert werden.
Weitere Überlegungen:
-
Implementieren Sie Idempotenz, um doppelte Nachrichten zu verarbeiten. Das heißt, jede Nachricht sollte nur einmal verarbeitet werden.
-
Denken Sie bei fehlgeschlagenen Verarbeitungsvorgängen an Warteschlangen für unzustellbare Briefe
. -
Überwachen Sie die Erfolgsquoten der Nachrichtenverarbeitung.
Prüfung der Reklamation
Wenn ein Kunde das Ergebnis eines Serviceanrufs benötigt, können Sie den Service so einrichten, dass er bei Eingang einer Anfrage einen Schadensnachweis ausstellt. Das folgende Diagramm veranschaulicht dieses Muster. Die Anspruchsprüfung wird als Kennung implementiert, die der Dienst in seiner Bestätigung zurückgibt. Der Client kann diese Kennung später verwenden, um den Status der Anfrage zu überprüfen und das Ergebnis abzurufen, wenn die Anfrage abgeschlossen ist.
Clients müssen einen Mechanismus zur Abfrage von Ergebnissen implementieren. Dies kann automatisiert (z. B. kann eine Überprüfung alle n Minuten durchgeführt werden) oder manuell implementiert werden, wobei die Überprüfung als Reaktion auf ein anderes Ereignis oder eine Benutzeraktion durchgeführt wird. Dienste, die das Muster der Anspruchsprüfung implementieren, sollten ausdrücklich angeben, wie lange eine Anspruchsprüfung gültig ist.
Bewährte Verfahren:
-
Implementieren Sie exponentielles Backoff für Abfragen.
-
Legen Sie eine angemessene Gültigkeitsdauer (TTL) für Forderungsprüfungen fest.
-
Stellen Sie Status-Endpunkte für die Fortschrittsverfolgung bereit.
Callback
Im Rückrufmuster sendet ein Kunde eine Anfrage an einen Service und gibt dem Service einen Standort an, an den er sich wenden kann, wenn die Bearbeitung abgeschlossen ist. Der Client wartet nicht auf ein Ergebnis und die Verarbeitung wird fortgesetzt. Der Service ist dafür verantwortlich, den Standort zu kontaktieren, wenn die Bearbeitung abgeschlossen ist, und das Ergebnis bereitzustellen. Übliche Speicherorte für Antworten sind REST APIs oder Warteschlangen. Das folgende Diagramm veranschaulicht das Rückrufmuster.
Implementierung:
-
Implementieren Sie Wiederholungsmechanismen für fehlgeschlagene Rückrufe.
-
Sichern Sie den Standort für den Rückruf wie bei anderen Diensten.
-
Behandeln Sie Rückruf-Timeouts.
Bidirektionale Kommunikation
Um die bidirektionale Kommunikation zu implementieren, müssen Sie eine statusbehaftete Verbindung zwischen einem Client und einem Dienst herstellen, sodass sowohl der Client als auch der Dienst Nachrichten senden und verarbeiten können. Dies wird im folgenden Diagramm veranschaulicht. Obwohl die Kommunikation asynchron ist, muss der Dienst in der Lage sein, eine offene Verbindung für jeden Client zu unterstützen.
Überlegungen zur Implementierung:
-
Nachrichtenreihenfolge
-
Sequenznummern
-
Partitionsstrategien
-
Nachrichtenreihenfolge
-
-
Statusverwaltung
-
Muster bei der Beschaffung von Veranstaltungen
-
Aussöhnung der Staaten
-
Konsistenzmodelle
-
-
Fehlerbehandlung
-
Wiederholungsrichtlinien
-
Ausweichstrategien
-
Überwachung und Beobachtbarkeit
-
Korrelation IDs
-
Nachverfolgung von Nachrichten
-
Leistungsmetriken
-
Indikatoren für den Systemzustand
-