Ich habe kürzlich einen Artikel „Datenaustausch zwischen großen Mikrodiensten“ gelesen
In diesem Bild geht es um asynchrone Verbindungen.
Wenn ich mich richtig erinnere, scheint der Dienst „Bestellseite“ in diesem Bild in der Lage zu sein, den Nachrichtenstrom von Kafka und auch REST-API-Anfragen von der Front-End-Anwendung zu lesen. Ich frage mich also, ob es möglich ist, einen Dienst zu schreiben, der beide Aufgaben gleichzeitig erledigen kann:
Nachrichtenstrom von Kafka lesen
Ist das eine gute Idee?
Workaround
Ein Kafka-basiertes Streaming-System ermöglicht die asynchrone Kommunikation zwischen Produzenten und Konsumenten. Allerdings kommunizieren REST-API-basierte Systeme synchron zwischen dem Aufrufer und dem Angerufenen.
Die Verfügbarkeitsgarantien unterscheiden sich zwischen synchroner und synchroner Moduskommunikation. Ein auf Kafka Streams basierendes System verfügt über andere Verfügbarkeitsgarantien als eine REST-API. Bei Streaming-Systemen konzentrieren wir uns auf den Durchsatz der Nachrichtenverarbeitung, während bei der synchronen End-to-End-Kommunikation die Latenz das Hauptanliegen ist (Sie möchten den Anrufer nicht lange auf das Ergebnis warten lassen).
Wenn wir diese beiden Arten von Systemen in einem Dienst zusammenfassen, wird es schwierig sein, die Verfügbarkeit des Dienstes zu ermitteln. Darüber hinaus können asynchrone oder synchrone Teile eines Dienstes in einem lauten Nachbarn auf der anderen Seite abgespielt werden, wodurch der Dienst nicht verfügbar ist.
Im Allgemeinen wird daher empfohlen, REST-basierte APIs und Kafka-Streams als zwei unabhängige Dienste zu behandeln.
Das obige ist der detaillierte Inhalt vonIst es möglich, in Go einen Dienst zu erstellen, der sowohl einen Nachrichtenstrom (von Kafka) konsumiert als auch REST-API-Anfragen liest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!