Muster „Gatewayrouting“

Application Gateway

Leiten Sie Anforderungen mithilfe eines einzelnen Endpunkts an mehrere Dienste oder Dienstinstanzen weiter. Dieses Muster ist für Folgendes hilfreich:

  • Verfügbarmachen mehrerer Dienste auf einem einzigen Endpunkt und Weiterleiten von Datenverkehr an den geeigneten Dienst basierend auf der Anforderung
  • Verfügbarmachen mehrerer Instanzen des gleichen Diensts auf einem einzelnen Endpunkt für Lastenausgleich oder Verfügbarkeit
  • Verfügbarmachen unterschiedlicher Versionen des gleichen Diensts auf einem einzelnen Endpunkt und versionsübergreifendes Weiterleiten von Datenverkehr

Kontext und Problem

Wenn ein Client mehrere Dienste, mehrere Dienstinstanzen oder eine Kombination aus beidem nutzen muss, muss der Client aktualisiert werden, wenn Dienste hinzugefügt oder entfernt werden. Betrachten Sie folgende Szenarien:

  • Mehrere unterschiedliche Dienste: Eine E-Commerce-Anwendung stellt beispielsweise Dienste für Folgendes bereit: Suche, Rezensionen, Warenkorb, Auftragsabschluss und Auftragsverlauf. Jeder Dienst verwendet eine andere API, mit der der Client interagieren muss, und der Client muss jeden Endpunkt kennen, um eine Verbindung mit den Diensten herstellen zu können. Wenn sich eine API ändert, muss auch der Client aktualisiert werden. Wenn Sie einen Dienst in zwei oder mehr separate Dienste umgestalten, muss der Code sowohl im Dienst als auch im Client geändert werden.
  • Mehrere Instanzen des gleichen Diensts: Das System kann die Ausführung mehrerer Instanzen des gleichen Diensts in der gleichen Region oder in unterschiedlichen Regionen erfordern. Mehrere Instanzen können für Lastenausgleichszwecke oder zur Erfüllung von Verfügbarkeitsanforderungen ausgeführt werden. Jedes Mal, wenn eine Instanz gestartet oder beendet wird, um auf den Bedarf zu reagieren, muss der Client aktualisiert werden.
  • Mehrere Versionen des gleichen Diensts: Im Rahmen der Bereitstellungsstrategie können neben bereits vorhandenen Versionen neue Versionen eines Diensts bereitgestellt werden. Solche Bereitstellungen werden als Blau-Grün-Bereitstellungen bezeichnet. In diesen Szenarien muss der Client jedes Mal aktualisiert werden, wenn sich der Prozentsatz des Datenverkehrs ändert, der an die neue Version und an den vorhandenen Endpunkt weitergeleitet wird.

Lösung

Platzieren Sie ein Gateway vor einer Reihe von Anwendungen, Diensten oder Bereitstellungen. Implementieren Sie ein Layer-7-Routing für die Anwendung, um Anforderungen an die geeigneten Instanzen weiterzuleiten.

Bei diesem Muster muss die Clientanwendung nur einen einzelnen Endpunkt kennen und mit diesem kommunizieren. Im folgenden Beispiel wird veranschaulicht, wie das Muster „Gatewayrouting“ die drei im Abschnitt „Kontext und Problem“ beschriebenen Szenarien behandelt.

Mehrere unterschiedliche Dienste

Diagramm: Gateway vor einem Suchdienst, einem Auftragsabschlussdienst, einem Auftragsverlaufsdienst, einem Warenkorbdienst und einem Dienst für Rezensionen

Das Muster „Gatewayrouting“ ist in diesem Szenario nützlich, da hier ein Client mehrere Dienste verwendet. Wenn ein Dienst konsolidiert, aufgeteilt oder ersetzt wird, muss der Client nicht unbedingt aktualisiert werden. Der Client kann weiterhin Anforderungen an das Gateway senden, es ändert sich nur die Weiterleitung.

Mit einem Gateway können Sie auch die Back-End-Dienste von den Clients abstrahieren, sodass Clientaufrufe einfach bleiben, aber Änderungen in den Back-End-Diensten hinter dem Gateway möglich sind. Clientaufrufe können an jeden Dienst weitergeleitet werden, der das erwartete Clientverhalten verarbeiten muss. So können Sie Dienste hinter dem Gateway hinzufügen, teilen und neu anordnen, ohne den Client ändern zu müssen.

Mehrere Instanzen des gleichen Diensts

Diagramm: Gateway vor einem Suchdienst in Region 1 und vor einem Suchdienst in Region 2

Anpassungsfähigkeit ist entscheidend für Cloud Computing. Dienste können bei steigendem Bedarf gestartet und bei geringem Bedarf beendet werden, um Kosten zu sparen. Die Komplexität der Registrierung und der Aufhebung der Registrierung von Dienstinstanzen wird im Gateway gekapselt. Die Erhöhung oder Verringerung der Anzahl von Diensten wird vom Client nicht wahrgenommen.

Dienstinstanzen können in einer einzelnen Region oder in mehreren Regionen bereitgestellt werden. Im Muster mit geografischen Knoten erfahren Sie, wie eine Aktiv-Aktiv-Bereitstellung mit mehreren Regionen die Wartezeit verbessern und die Verfügbarkeit eines Diensts erhöhen kann.

Mehrere Versionen des gleichen Diensts

Diagramm: Gateway vor Version 1 eines Suchdiensts und vor Version 1.1 eines Suchdiensts

Dieses Muster kann für Bereitstellungen verwendet werden, da Sie verwalten können, wie Updates für die Benutzer bereitgestellt werden. Wenn eine neue Version Ihres Diensts bereitgestellt wird, kann diese Bereitstellung parallel zur vorhandenen Version erfolgen. Durch Routing können Sie steuern, welche Version des Diensts den Clients präsentiert wird. So können Sie flexibel verschiedene Releasestrategien für Updates nutzen – als inkrementelle, parallele oder vollständige Rollouts. Sollten nach der Bereitstellung eines neuen Diensts Probleme auftreten, können Sie einfach eine Konfigurationsänderung auf dem Gateway vornehmen, ohne dass Clients beeinträchtigt werden.

Probleme und Überlegungen

  • Der Gatewaydienst kann einen Single Point of Failure darstellen. Stellen Sie sicher, dass er ordnungsgemäß auf Ihre Verfügbarkeitsanforderungen abgestimmt ist. Berücksichtigen Sie bei der Implementierung die Aspekte Resilienz und Fehlertoleranz.
  • Der Gatewaydienst kann einen Engpass darstellen. Stellen Sie sicher, dass das Gateway leistungsfähig genug ist, um die Last zu verarbeiten, und dass es sich problemlos gemäß Ihren Wachstumserwartungen skalieren lässt.
  • Führen Sie einen Auslastungstest für das Gateway durch, um sicherzustellen, dass keine kaskadierenden Ausfälle bei den Diensten auftreten.
  • Das Gatewayrouting erfolgt auf Ebene 7. Es kann auf IP, Port, Header oder URL basieren.
  • Gatewaydienste können global oder regional sein. Azure Front Door ist ein globales Gateway. Azure Application Gateway ist dagegen regional. Verwenden Sie ein globales Gateway, wenn Ihre Lösung Bereitstellungen von Diensten in mehreren Regionen erfordert. Erwägen Sie die Verwendung von Application Gateway, wenn Sie über eine regionale Workload verfügen, die eine präzise Steuerung der Datenverkehrsverteilung erfordert. Ein Beispiel wäre etwa die Verteilung von Datenverkehr zwischen virtuellen Computern.
  • Der Gatewaydienst ist der öffentliche Endpunkt für Dienste, vor denen er sich befindet. Schränken Sie ggf. den öffentlichen Netzwerkzugriff auf die Back-End-Dienste ein, indem Sie die Dienste nur über das Gateway oder über ein privates virtuelles Netzwerk zugänglich machen.

Verwendung dieses Musters

Verwenden Sie dieses Muster in folgenden Fällen:

  • Ein Client muss mehrere Dienste nutzen, auf die hinter einem Gateway zugegriffen werden kann.
  • Sie möchten Clientanwendungen durch die Nutzung eines einzelnen Endpunkts vereinfachen.
  • Sie müssen Anforderungen von extern adressierbaren Endpunkten an interne virtuelle Endpunkte weiterleiten – beispielsweise müssen Sie Ports auf einem virtuellen Computer verfügbar machen, um virtuelle IP-Adressen zu gruppieren.
  • Ein Client muss in mehreren Regionen ausgeführte Dienste nutzen, um die Wartezeit oder Verfügbarkeit zu verbessern.
  • Ein Client muss eine variable Anzahl von Dienstinstanzen nutzen.
  • Sie möchten eine Bereitstellungsstrategie implementieren, bei der Clients gleichzeitig auf mehrere Versionen des Diensts zugreifen.

Dieses Muster eignet sich wahrscheinlich nicht, wenn Sie über eine einfache Anwendung verfügen, die nur einen oder zwei Dienste nutzt.

Beispiel

Der folgende Code ist eine einfache Beispielkonfigurationsdatei für einen Server, der Anforderungen für Anwendungen, die sich in verschiedenen virtuellen Verzeichnissen befinden, an verschiedene Computer im Back-End weiterleitet. Als Router wird nginx verwendet.

server {
    listen 80;
    server_name domain.com;

    location /app1 {
        proxy_pass http://10.0.3.10:80;
    }

    location /app2 {
        proxy_pass http://10.0.3.20:80;
    }

    location /app3 {
        proxy_pass http://10.0.3.30:80;
    }
}

Die folgenden Azure-Dienste können verwendet werden, um das Muster „Gatewayrouting“ zu implementieren: