Inhaltsverzeichnis
Frageninhalt
Lösung
tl;dr
Problembeschreibung
Heim Backend-Entwicklung Golang Stellt eine Antwort auf eine HTTP-Anfrage bereit, nachdem eine andere Anfrage empfangen wurde

Stellt eine Antwort auf eine HTTP-Anfrage bereit, nachdem eine andere Anfrage empfangen wurde

Feb 09, 2024 pm 01:06 PM
数据丢失

收到另一个请求后提供 HTTP 请求的响应

php-Editor Erdbeere Bei der Entwicklung von Webanwendungen müssen wir häufig HTTP-Anfragen verarbeiten und entsprechende Antworten bereitstellen. Wenn wir eine Anfrage erhalten, müssen wir eine angemessene Antwort generieren, die auf dem Inhalt und Zweck der Anfrage basiert. Dies kann verschiedene Vorgänge wie das Abfragen der Datenbank, das Verarbeiten von Formulardaten, den Aufruf anderer APIs usw. umfassen. In diesem Artikel untersuchen wir, wie HTTP-Anfragen in PHP verarbeitet und entsprechende Antworten bereitgestellt werden, um den Benutzern eine bessere Interaktion und Benutzererfahrung zu bieten. Unabhängig davon, ob Sie eine einfache statische Webseite oder eine komplexe Webanwendung erstellen, ist es wichtig zu verstehen, wie HTTP-Anfragen verarbeitet und Antworten generiert werden.

Frageninhalt

Mein Anwendungsfall besteht darin, die Antwort auf eine HTTP-Anfrage bereitzustellen, nachdem eine andere Anfrage von einem separaten Server empfangen wurde.

  1. Ich möchte dies auf die bestmögliche Weise tun und dabei die Skalierbarkeit im Auge behalten.
  2. Wir verwenden Golang 1.19 und das Gin-Framework.
  3. Der Server verfügt über mehrere Pods, sodass Kanäle nicht funktionieren.
  4. Alle Anfragen werden abgebrochen, die erste Anfrage wird nach 60 Sekunden abgebrochen.

Meine aktuelle Lösung besteht darin, einen gemeinsamen Cache zu verwenden, bei dem jeder Pod den Cache ständig überprüft. Ich glaube, ich kann dies optimieren, indem ich das System so kanalisiere, dass es regelmäßig nach abgeschlossenen Antworten sucht, anstatt den Cache einzeln zu überprüfen.

Ich würde auch gerne wissen, wie man es in anderen Programmiersprachen umsetzt.

PS: Dies ist eine designbasierte Abfrage und ich habe den Ruf, hier Kopfgelder zu teilen, also frage ich hier. Wenn die Frage unklar ist, können Sie sie gerne bearbeiten.

Lösung

tl;dr

Problembeschreibung

Angenommen, Ihre Serveranwendung heißt server_app und verfügt über 3 Pods:

+---------------------+
     |  server_app_service |
     +---------------------+
     |  server_app_pod_a   |
     |  server_app_pod_b   |
     |  server_app_pod_c   |
     +---------------------+
Nach dem Login kopieren

Ihr Dienst erhält eine Anfrage mit dem Namen "request a" und beschließt, diese an server_app_pod_a weiterzuleiten. Jetzt leitet Ihr server_app_pod_a die Anfrage an ein Gateway weiter und wartet auf eine Art "request a" 的请求,并决定将其传递给 server_app_pod_a。现在,您的 server_app_pod_a 将请求转发到某个网关,并等待某种通知,以继续处理客户端的响应。正如您所知,无法保证当网关执行 request b 时,服务会再次将其传递给 server_app_pod_aBenachrichtigung

, um mit der Verarbeitung der Antwort des Clients fortzufahren. Wie Sie wissen, gibt es keine Garantie dafür, dass, wenn das Gateway request b ausführt, der Dienst es erneut an server_app_pod_a weiterleitet. Selbst wenn Sie dies tun, wird die Statusverwaltung der Anwendung zu einer schwierigen Aufgabe.

Messaging

request“b”Wie Sie vielleicht bemerkt haben, habe ich das Wort „Benachrichtigung“ im vorherigen Absatz fett gedruckt, denn wenn Sie wirklich darüber nachdenken, sieht eher wie eine Benachrichtigung mit einer Nachricht

aus als wie eine Nachricht an jemanden, der nach Ressourcen fragt. Daher ist meine erste Wahl eine Nachrichtenwarteschlange wie Kafka (wie Sie wissen, gibt es viele davon). Die Idee besteht darin, dass Sie, wenn Sie einen Algorithmus zur Berechnung des eindeutigen Schlüssels einer Anfrage definieren können, im selben Pod über das Ergebnis benachrichtigt werden können. Auf diese Weise wird die Statusverwaltung einfacher und die Chance, Benachrichtigungen im selben Pod zu erhalten, ist höher (natürlich hängt dies von vielen Faktoren ab, z. B. dem Status der Nachrichtenwarteschlange). Schauen Sie sich Ihre Fragen an:
  1. Ich möchte dies auf die bestmögliche Weise tun und dabei die Skalierbarkeit im Auge behalten.

Natürlich können Sie diese Nachrichtenwarteschlangen wie Kafka verwenden, um die Skalierung von Nachrichtenwarteschlangen und Anwendungen zu ermöglichen und Datenverluste zu reduzieren.
  1. Alle Anfragen werden abgebrochen, die erste Anfrage wird nach 60 Sekunden abgebrochen.

Je nachdem, wie Sie Zeitüberschreitungen in Ihrer Codebasis verwalten, ist die Verwendung von Kontext eine gute Idee.

Ich würde auch gerne wissen, wie man es in anderen Programmiersprachen umsetzt.

scala 中,如果您使用一些名为 akka 的特定工具(它提供了 actor 模型编程范例),您可以使用所谓的 akka-cluster-shardingDie Verwendung einer Nachrichtenwarteschlange ist eine allgemeine Idee, die mit fast jeder Programmiersprache funktioniert. Abhängig vom Programmierparadigma der Sprache und den sprachspezifischen Bibliotheken und Tools gibt es jedoch möglicherweise andere Möglichkeiten, dieses Problem zu lösen. Zum Beispiel in

, um dieses Problem zu lösen. Die Idee ist ganz einfach: Wir wissen, dass es eine Art Supervisor geben muss, der den genauen Standort und Status seiner eigenen Abonnenten kennt. Wenn es also eine Nachricht empfängt, weiß es einfach, wohin und an welchen Akteur die Anfrage weitergeleitet werden soll (wir sprechen hier von Akteurmodellprogrammierung). Mit anderen Worten: Es kann verwendet werden, um den Status zwischen den in einem Cluster erzeugten Teilnehmern zu teilen, unabhängig davon, ob sie sich auf demselben Computer befinden oder nicht. Aber aus persönlichen Gründen würde ich mich nicht für eine sprachspezifische Kommunikation entscheiden und bei der allgemeinen Idee bleiben, da dies in Zukunft zu Problemen führen könnte.

Zusammenfassung

Lange genug Erklärung :). Um zu verstehen, wovon ich spreche, verfolgen wir genau dasselbe Szenario, jedoch mit einem anderen Kommunikationsmodell: 🎜
  1. Der Client sendet die Anfrage „a“ an den server_app-Dienst.
  2. Der Dienst wählt einen der Pods (z. B. server_app_pod_b) aus, um die Anfrage zu bearbeiten.
  3. Dann versucht der Pod, einen Schlüssel für die Anfrage zu definieren, leitet ihn zusammen mit der Anfrage an das Gateway weiter und wartet, bis eine Nachricht mit diesem Schlüssel in der Warteschlange veröffentlicht wird.
  4. Das Gateway tut, was es tun soll und sendet die Nachricht mit der Taste an die Nachrichtenwarteschlange.
  5. Genau derselbe Pod serer_app_pod_b empfängt die Nachricht mit dem Schlüssel, ruft die Daten der Nachricht ab und verarbeitet die Anfrage des Clients weiter.

Es gibt vielleicht andere Möglichkeiten, dieses Problem zu lösen, aber das ist es, was ich möchte. Hoffe es hilft dir!

Das obige ist der detaillierte Inhalt vonStellt eine Antwort auf eine HTTP-Anfrage bereit, nachdem eine andere Anfrage empfangen wurde. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Gateio Exchange App Old Version Gateio Exchange App Old Version Download Kanal Gateio Exchange App Old Version Gateio Exchange App Old Version Download Kanal Mar 04, 2025 pm 11:36 PM

Gateio Exchange-App-Kanäle für alte Versionen, die offizielle Anwendungsmärkte von Drittanbietern, Forum-Communities und andere Kanäle abdecken.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Wie Sie eine hohe Verfügbarkeit von MongoDB bei Debian gewährleisten Wie Sie eine hohe Verfügbarkeit von MongoDB bei Debian gewährleisten Apr 02, 2025 am 07:21 AM

In diesem Artikel wird beschrieben, wie man eine hoch verfügbare MongoDB -Datenbank für ein Debian -System erstellt. Wir werden mehrere Möglichkeiten untersuchen, um sicherzustellen, dass die Datensicherheit und -Dienste weiter funktionieren. Schlüsselstrategie: ReplicaSet: Replicaset: Verwenden Sie Replikaten, um Datenreduktion und automatisches Failover zu erreichen. Wenn ein Master -Knoten fehlschlägt, wählt der Replikate -Set automatisch einen neuen Masterknoten, um die kontinuierliche Verfügbarkeit des Dienstes zu gewährleisten. Datensicherung und Wiederherstellung: Verwenden Sie den Befehl mongodump regelmäßig, um die Datenbank zu sichern und effektive Wiederherstellungsstrategien zu formulieren, um das Risiko eines Datenverlusts zu behandeln. Überwachung und Alarme: Überwachungsinstrumente (wie Prometheus, Grafana) bereitstellen, um den laufenden Status von MongoDB in Echtzeit zu überwachen, und

Empfohlenes XML -Formatierungswerkzeug Empfohlenes XML -Formatierungswerkzeug Apr 02, 2025 pm 09:03 PM

XML -Formatierungs -Tools können Code nach Regeln eingeben, um die Lesbarkeit und das Verständnis zu verbessern. Achten Sie bei der Auswahl eines Tools auf die Anpassungsfunktionen, den Umgang mit besonderen Umständen, die Leistung und die Benutzerfreundlichkeit. Zu den häufig verwendeten Werkzeugtypen gehören Online-Tools, IDE-Plug-Ins und Befehlszeilen-Tools.

Laravel Multi-Tenant-Erweiterungsstanz/Mietverhältnis: Wie passen Sie die Host-Adresse einer Mieterdatenbankverbindung an? Laravel Multi-Tenant-Erweiterungsstanz/Mietverhältnis: Wie passen Sie die Host-Adresse einer Mieterdatenbankverbindung an? Apr 01, 2025 am 09:09 AM

Benutzerdefinierte Mieterdatenbankverbindung in Laravel Multi-Tenant-Erweiterungspaket Stanz/Mietverhältnis beim Erstellen von Multi-Mandanten-Anwendungen mit Laravel Multi-Tenant-Erweiterungspaket Stanz/Mietverhältnis, ...

Wie kann sichergestellt werden, dass die Parallelität beim Schreiben von Multi-Process-Protokollen sicher und effizient ist? Wie kann sichergestellt werden, dass die Parallelität beim Schreiben von Multi-Process-Protokollen sicher und effizient ist? Apr 02, 2025 pm 03:51 PM

Effizient behandeln Probleme mit der Parallelitätssicherheit beim Schreiben von Multi-Process-Protokoll. Mehrere Prozesse schreiben gleichzeitig die gleiche Protokolldatei. Wie kann die Parallelität sicher und effizient sichergestellt werden? Das ist ein ...

Vergleich von Redis -Warteschlangen und MySQL -Stabilität: Warum ist Redis für den Datenverlust anfällig? Vergleich von Redis -Warteschlangen und MySQL -Stabilität: Warum ist Redis für den Datenverlust anfällig? Apr 01, 2025 pm 02:24 PM

Vergleich von Redis -Warteschlangen und MySQL -Stabilität: Warum ist Redis für den Datenverlust anfällig? In der Entwicklungsumgebung, die mit PHP7.2- und ThinkPhp -Frameworks verwendet wird, stehen wir häufig vor der Wahl der Zusammenarbeit ...

See all articles