Heim >Backend-Entwicklung >Golang >Ist es möglich, in Go einen Dienst zu erstellen, der sowohl einen Nachrichtenstrom (von Kafka) konsumiert als auch REST-API-Anfragen liest?

Ist es möglich, in Go einen Dienst zu erstellen, der sowohl einen Nachrichtenstrom (von Kafka) konsumiert als auch REST-API-Anfragen liest?

王林
王林nach vorne
2024-02-12 18:06:05910Durchsuche

是否可以在 Go 中创建一个既使用消息流(来自 Kafka)又读取 REST API 请求的服务?

Frageninhalt

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
  • REST-API-Anfrage lesen
  • Nur in 1 Dienst, wie in Go.

Ist das eine gute Idee?

Workaround

Ja, Sie können definitiv einen Go-Dienst schreiben, der Kafka nutzt und einen REST-Endpunkt verfügbar macht. Dies ist jedoch keine ideale Designentscheidung.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen