Muster „Gatewayabladung“Gateway Offloading pattern

Es wird beschrieben, wie Sie freigegebene oder spezielle Dienstfunktionen an einen Gatewayproxy auslagern.Offload shared or specialized service functionality to a gateway proxy. Mit diesem Muster können Sie die Anwendungsentwicklung vereinfachen, indem Sie gemeinsam genutzte Dienstfunktionen, z.B. die Verwendung von SSL-Zertifikaten, aus anderen Teilen der Anwendung auf das Gateway verschieben.This pattern can simplify application development by moving shared service functionality, such as the use of SSL certificates, from other parts of the application into the gateway.

Kontext und ProblemContext and problem

Einige Features werden häufig über mehrere Dienste hinweg verwendet, sodass dafür die entsprechende Konfiguration, Verwaltung und Wartung erforderlich ist.Some features are commonly used across multiple services, and these features require configuration, management, and maintenance. Ein freigegebener oder spezialisierter Dienst, der mit jeder Anwendungsbereitstellung verteilt wird, erhöht den Verwaltungsaufwand und die Wahrscheinlichkeit für Bereitstellungsfehler.A shared or specialized service that is distributed with every application deployment increases the administrative overhead and increases the likelihood of deployment error. Alle Updates eines freigegebenen Features müssen für alle Dienste bereitgestellt werden, von denen dieses Feature gemeinsam genutzt wird.Any updates to a shared feature must be deployed across all services that share that feature.

Der richtige Umgang mit Sicherheitsproblemen (Tokenüberprüfung, Verschlüsselung, SSL-Zertifikatverwaltung) und andere komplexe Aufgaben können bedingen, dass Teammitglieder über sehr spezielle Fähigkeiten verfügen.Properly handling security issues (token validation, encryption, SSL certificate management) and other complex tasks can require team members to have highly specialized skills. Beispielsweise muss ein Zertifikat, das von einer Anwendung benötigt wird, auf allen Anwendungsinstanzen konfiguriert und bereitgestellt werden.For example, a certificate needed by an application must be configured and deployed on all application instances. Für jede neue Bereitstellung muss das Zertifikat verwaltet werden, um sicherzustellen, dass es nicht abläuft.With each new deployment, the certificate must be managed to ensure that it does not expire. Alle allgemeinen Zertifikate, deren Ablauf bevorsteht, müssen bei jeder Anwendungsbereitstellung aktualisiert, getestet und überprüft werden.Any common certificate that is due to expire must be updated, tested, and verified on every application deployment.

Andere gemeinsam genutzte Dienste, z.B. Authentifizierung, Autorisierung, Protokollierung, Überwachung oder Drosselung, können für eine große Zahl von Bereitstellungen schwierig zu implementieren und zu verwalten sein.Other common services such as authentication, authorization, logging, monitoring, or throttling can be difficult to implement and manage across a large number of deployments. Es kann besser sein, diese Art von Funktionen zu konsolidieren, um den Aufwand und die Fehlerwahrscheinlichkeit zu reduzieren.It may be better to consolidate this type of functionality, in order to reduce overhead and the chance of errors.

LösungSolution

Lagern Sie einige Features auf ein API-Gateway aus. Dies gilt vor allem für sich überschneidende Bereiche wie die Zertifikatverwaltung, Authentifizierung, SSL-Beendigung, Überwachung, Protokollübersetzung oder Drosselung.Offload some features into an API gateway, particularly cross-cutting concerns such as certificate management, authentication, SSL termination, monitoring, protocol translation, or throttling.

Im folgenden Diagramm ist ein API-Gateway dargestellt, mit dem eingehende SSL-Verbindungen beendet werden.The following diagram shows an API gateway that terminates inbound SSL connections. Hiermit werden Daten im Namen des ursprünglichen Anforderers von einem beliebigen HTTP-Server abgerufen, der dem API-Gateway vorgeschaltet ist.It requests data on behalf of the original requestor from any HTTP server upstream of the API gateway.

Diagramm des Musters „Gatewayabladung“

Vorteile dieses Musters:Benefits of this pattern include:

  • Die Entwicklung von Diensten wird vereinfacht, indem das Verteilen und Warten von unterstützenden Ressourcen entfällt, z.B. Webserverzertifikate und die Konfiguration für sichere Websites.Simplify the development of services by removing the need to distribute and maintain supporting resources, such as web server certificates and configuration for secure websites. Eine einfachere Konfiguration führt zu einer Vereinfachung der Verwaltung und Skalierbarkeit und erleichtert die Durchführung von Dienstupgrades.Simpler configuration results in easier management and scalability and makes service upgrades simpler.

  • Dedizierte Teams können Features implementieren, für die besondere Kenntnisse erforderlich sind, z.B. im Bereich der Sicherheit.Allow dedicated teams to implement features that require specialized expertise, such as security. So kann sich Ihr Kernteam auf die Anwendungsfunktionen konzentrieren und diese speziellen Probleme, die trotzdem mehrere Bereiche betreffen, den jeweiligen Experten überlassen.This allows your core team to focus on the application functionality, leaving these specialized but cross-cutting concerns to the relevant experts.

  • Es kann Einheitlichkeit in Bezug auf die Protokollierung und Überwachung von Anforderungen und Antworten erzielt werden.Provide some consistency for request and response logging and monitoring. Auch wenn ein Dienst nicht richtig instrumentiert wurde, kann das Gateway so konfiguriert werden, dass ein Mindestmaß an Überwachung und Protokollierung sichergestellt ist.Even if a service is not correctly instrumented, the gateway can be configured to ensure a minimum level of monitoring and logging.

Probleme und ÜberlegungenIssues and considerations

  • Stellen Sie sicher, dass das API-Gateway hoch verfügbar und robust gegenüber Fehlern ist.Ensure the API gateway is highly available and resilient to failure. Vermeiden Sie Single Points of Failure, indem Sie mehrere Instanzen Ihres API-Gateways ausführen.Avoid single points of failure by running multiple instances of your API gateway.
  • Stellen Sie sicher, dass das Gateway für die Kapazitäts- und Skalierungsanforderungen Ihrer Anwendung und Endpunkte ausgelegt ist.Ensure the gateway is designed for the capacity and scaling requirements of your application and endpoints. Sorgen Sie dafür, dass das Gateway nicht zu einem Engpass für die Anwendung wird und in ausreichendem Maße skaliert werden kann.Make sure the gateway does not become a bottleneck for the application and is sufficiently scalable.
  • Lagern Sie nur Features aus, die von der gesamten Anwendung genutzt werden, z.B. Sicherheit oder Datenübertragung.Only offload features that are used by the entire application, such as security or data transfer.
  • Geschäftslogik sollte niemals auf das API-Gateway ausgelagert werden.Business logic should never be offloaded to the API gateway.
  • Wenn Sie Transaktionen nachverfolgen müssen, sollten Sie erwägen, Korrelations-IDs für Protokollierungszwecke zu generieren.If you need to track transactions, consider generating correlation IDs for logging purposes.

Verwendung dieses MustersWhen to use this pattern

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

  • Für eine Anwendungsbereitstellung besteht eine übergreifende Zuständigkeit, z.B. in Bezug auf SSL-Zertifikate oder die Verschlüsselung.An application deployment has a shared concern such as SSL certificates or encryption.
  • Ein Feature, dass über Anwendungsbereitstellungen (ggf. mit unterschiedlichen Ressourcenanforderungen) hinweg gemeinsam genutzt wird, z.B. Arbeitsspeicherressourcen, Speicherkapazität oder Netzwerkverbindungen.A feature that is common across application deployments that may have different resource requirements, such as memory resources, storage capacity or network connections.
  • Sie möchten die Zuständigkeit für Probleme, z.B. Netzwerksicherheit, Drosselung oder andere Fragen zu Netzwerkgrenzen, an ein Team mit besserer Spezialisierung vergeben.You wish to move the responsibility for issues such as network security, throttling, or other network boundary concerns to a more specialized team.

Dieses Muster ist unter Umständen nicht geeignet, wenn es dabei zu einer Kopplung zwischen Diensten kommt.This pattern may not be suitable if it introduces coupling across services.

BeispielExample

Indem Nginx als Appliance für die SSL-Auslagerung verwendet wird, wird mit der folgenden Konfiguration eine eingehende SSL-Verbindung beendet und die Verbindung auf einen von drei vorgeschalteten HTTP-Servern verteilt.Using Nginx as the SSL offload appliance, the following configuration terminates an inbound SSL connection and distributes the connection to one of three upstream HTTP servers.

upstream iis {
        server  10.3.0.10    max_fails=3    fail_timeout=15s;
        server  10.3.0.20    max_fails=3    fail_timeout=15s;
        server  10.3.0.30    max_fails=3    fail_timeout=15s;
}

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/nginx/ssl/domain.cer;
        ssl_certificate_key /etc/nginx/ssl/domain.key;

        location / {
                set $targ iis;
                proxy_pass http://$targ;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
        }
}

Unter Azure erreichen Sie dies, indem Sie für Application Gateway die SSL-Beendigung einrichten.On Azure, this can be achieved by setting up SSL termination on Application Gateway.