Muster „Gatewayrouting“Gateway Routing pattern

Leiten Sie Anforderungen an mehrere Dienste mit einem einzelnen Endpunkt weiter.Route requests to multiple services using a single endpoint. Dieses Muster ist hilfreich, wenn Sie mehrere Dienste auf einem einzigen Endpunkt verfügbar machen möchten und die Weiterleitung an den geeigneten Dienst basierend auf der Anforderung erfolgen soll.This pattern is useful when you wish to expose multiple services on a single endpoint and route to the appropriate service based on the request.

Kontext und ProblemContext and problem

Wenn ein Client mehrere Dienste nutzen muss, kann es schwierig sein, einen separaten Endpunkt für jeden Dienst einzurichten und dafür zu sorgen, dass der Client jeden Endpunkt verwaltet.When a client needs to consume multiple services, setting up a separate endpoint for each service and having the client manage each endpoint can be challenging. Eine E-Commerce-Anwendung stellt beispielsweise Dienste für Folgendes bereit: Suche, Reviews, Warenkorb, Auftragsabschluss und Auftragsverlauf.For example, an e-commerce application might provide services such as search, reviews, cart, checkout, and order history. 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.Each service has a different API that the client must interact with, and the client must know about each endpoint in order to connect to the services. Wenn sich eine API ändert, muss auch der Client aktualisiert werden.If an API changes, the client must be updated as well. Wenn Sie einen Dienst in zwei oder mehr separate Dienste umgestalten, muss der Code sowohl im Dienst als auch im Client geändert werden.If you refactor a service into two or more separate services, the code must change in both the service and the client.

LösungSolution

Platzieren Sie ein Gateway vor einer Reihe von Anwendungen, Diensten oder Bereitstellungen.Place a gateway in front of a set of applications, services, or deployments. Implementieren Sie ein Layer-7-Routing für die Anwendung, um Anforderungen an die geeigneten Instanzen weiterzuleiten.Use application Layer 7 routing to route the request to the appropriate instances.

Bei diesem Muster muss die Clientanwendung nur einen einzigen Endpunkt kennen und mit diesem kommunizieren.With this pattern, the client application only needs to know about and communicate with a single endpoint. Wenn ein Dienst konsolidiert oder aufgeteilt wird, muss der Client nicht unbedingt aktualisiert werden.If a service is consolidated or decomposed, the client does not necessarily require updating. Der Client kann weiterhin Anforderungen an das Gateway senden, es ändert sich nur die Weiterleitung.It can continue making requests to the gateway, and only the routing changes.

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.A gateway also lets you abstract backend services from the clients, allowing you to keep client calls simple while enabling changes in the backend services behind the gateway. 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.Client calls can be routed to whatever service or services need to handle the expected client behavior, allowing you to add, split, and reorganize services behind the gateway without changing the client.

Diagramm des Musters „Gatewayrouting“

Dieses Muster kann auch bei der Bereitstellung helfen, da Sie bestimmen können, wie Updates für die Benutzer bereitgestellt werden.This pattern can also help with deployment, by allowing you to manage how updates are rolled out to users. Wenn eine neue Version Ihres Diensts bereitgestellt wird, kann diese Bereitstellung parallel zur vorhandenen Version erfolgen.When a new version of your service is deployed, it can be deployed in parallel with the existing version. 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.Routing lets you control what version of the service is presented to the clients, giving you the flexibility to use various release strategies, whether incremental, parallel, or complete rollouts of updates. 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.Any issues discovered after the new service is deployed can be quickly reverted by making a configuration change at the gateway, without affecting clients.

Probleme und ÜberlegungenIssues and considerations

  • Der Gatewaydienst kann ein Single Point of Failure darstellen.The gateway service may introduce a single point of failure. Stellen Sie sicher, dass es auf Ihre Verfügbarkeitsanforderungen ausgelegt ist.Ensure it is properly designed to meet your availability requirements. Berücksichtigen Sie bei der Implementierung die Aspekte Resilienz und Fehlertoleranz.Consider resiliency and fault tolerance capabilities when implementing.
  • Der Gatewaydienst kann einen Engpass darstellen.The gateway service may introduce a bottleneck. 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.Ensure the gateway has adequate performance to handle load and can easily scale in line with your growth expectations.
  • Führen Sie einen Auslastungstest für das Gateway durch, um sicherzustellen, dass keine kaskadierenden Ausfälle bei den Diensten auftreten.Perform load testing against the gateway to ensure you don't introduce cascading failures for services.
  • Das Gatewayrouting erfolgt auf Ebene 7.Gateway routing is level 7. Es kann auf IP, Port, Header oder URL basieren.It can be based on IP, port, header, or URL.

Verwendung dieses MustersWhen to use this pattern

Verwenden Sie dieses Muster in folgenden Fällen:Use this pattern when:

  • Ein Client muss mehrere Dienste nutzen, auf die hinter einem Gateway zugegriffen werden kann.A client needs to consume multiple services that can be accessed behind a gateway.
  • Sie möchten Clientanwendungen durch Nutzung eines einzigen Endpunkts vereinfachen.You wish to simplify client applications by using a single endpoint.
  • 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.You need to route requests from externally addressable endpoints to internal virtual endpoints, such as exposing ports on a VM to cluster virtual IP addresses.

Dieses Muster eignet sich wahrscheinlich nicht, wenn Sie über eine einfache Anwendung verfügen, die nur einen oder zwei Dienste nutzt.This pattern may not be suitable when you have a simple application that uses only one or two services.

BeispielExample

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.Using Nginx as the router, the following is a simple example configuration file for a server that routes requests for applications residing on different virtual directories to different machines at the back end.

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;
    }
}

In Azure können mehrere Dienste hinter einer Application Gateway-Instanz mit Layer-7-Routing eingerichtet werden.On Azure, multiple services can be set up behind an Application Gateway instance, which provides layer-7 routing.