0

Ich muss eine arquitecture implementieren zum Aussortieren, das Problem durch das folgende Bild dargestellt Relais:Wie http Web-Anfrage zu auf Prämisse api auf Basis von Web-Sockets

Cloud to On-Premise API

Grundsätzlich habe ich eine implementieren öffentliche API in der Cloud (Azure), aber die Daten befinden sich auf lokalen Computern. Die On-Premise-Computer stellen eine Swagger-API bereit, die die Daten bereitstellt. Jeder On-Premise-Computer verfügt über eine eindeutige Kennung (Installationskennung), über die die Anforderungen weitergeleitet werden können.

ich entwickelt habe, eine Lösung auf der Grundlage des Relaismodul von Azure Service Bus nach dem Ansatz vorgeschlagen, in den folgenden Link:

Secure Internet Access to an On-Premise API

Die Lösung basiert auf dem Relaismodul von Azure Service Bus aussortieren meine Problem und passt die meisten meiner Bedürfnisse, aber es hat ein Problem, die Latenz ist schrecklich.

Ich habe die öffentliche API und den Service-Bus-Endpunkt in der gleichen geografischen Region eingesetzt und eine einfache Anfrage GET/Unternehmen dauert durchschnittlich 1,5 Sekunden, die Verarbeitungszeit in der On-Premise-API ist sehr gering, nur ein paar miliseconds ..

Um die Latenz niedrig zu halten, habe ich über die Verwendung von Web-Sockets nachgedacht, aber ich weiß nicht, ob der beste Ansatz das Szenario berücksichtigt, denn für jede Anfrage an die öffentliche API würde ich müssen einen Web-Socket-Kanal zu der On-Premise-API innerhalb des ApiControllers öffnen und auf dessen Lebenszyklus achten (schließen Sie es, bevor Sie die Antwort zurückgeben).

Offensichtlich sollte jeder ApiController in der On-Premise-API in diesem Szenario Unterstützung für Web-Sockets und http gleichzeitig bereitstellen. Eine andere Lösung wäre es, einen http-Proxy zu implementieren, der die ursprüngliche Anforderung von der öffentlichen API an die lokale API weiterleitet, aber aus meiner Sicht wird die bestmögliche Latenz erreicht, wenn ein Kommunikations-P2P ohne Konnektivität verwendet wird Manager in der Mitte, deshalb liegt mein Fokus jetzt auf Web Sockets.

Ich möchte die Standards so weit wie möglich erfüllen, aus diesem Grund möchte ich "pure" Web-Sockets verwenden, das heißt Signaler nicht verwenden.

Einmal, ich mein Problem ausgesetzt, die Lösung und die Alternativen sind meine Fragen wie folgt:

  1. Wie kann ich einen Web-Buchse innerhalb einer Aktionsmethode einer ApiController Klasse öffnen und die Original-Relais HTTP-Anforderung von der öffentlichen API an die lokale API?

  2. Wie kann ich Unterstützung in der lokalen API für beide Protokolle HTTP und WebSockets bereitstellen. Die On-Premise-API sollte HTTP-Anforderungen, aber auch WebSocket-Anforderungen verarbeiten können.

  3. Meine erste Wette ist die Verwendung von System.Net.WebSockets, aber ich würde gerne wissen, ob existiert eine Websockets-Bibliothek, die glänzt, wenn mit ASP.NET Web API integriert ist.

Antwort

0

eine einfache Anfrage GET/Unternehmen nimmt 1.5 Sekunden im Durchschnitt die Bearbeitungszeit in dem Vor-Ort-API ist sehr gering, nur ein paar miliseconds

Sie verwenden Azure-Relay-Dienst sicher zu Dienstleistungen für die öffentliche Cloud aussetzen, soweit ich weiß, Wir würden nicht die gleiche Latenz erreichen wie ein Server vor Ort, da viele Faktoren eine Rolle spielen (zum Beispiel muss sich der Client zuerst beim Service Bus Relay authentifizieren).

Außerdem, this article mit Beispiel erläutert, wie benutzerdefinierte HTTP-Handler zum Akzeptieren von Client-WebSocket-Anforderungen erstellen, können Sie darauf verweisen, um Ihre API-Anwendung für die Verarbeitung von WebSocket-Anforderungen zu ändern.

Verwandte Themen