webentwicklung-frage-antwort-db.com.de

Kann eine ELB-Umleitung abhängig von der URL anfordern?

Ich versuche, meinen Anwendungsserver hinter Amazon Elastic Load Balancer einzurichten. Ich denke an einen Server für die alte Version und alle anderen Server für die neue Version. Ich denke, dies mithilfe der Versions-ID im Pfadparameter .__ zu implementieren.

z.B.

Aktuelle Version (3.0): http://example.com/APPNAME/service

Alte Version (2.2): http://example.com/APPNAME/v2.2/service

Ich würde gerne wissen:

  1. Kann ELB die HTTP-Anfrage einsehen?
  2. Kann eine ELB-Umleitung abhängig vom URL-Pfadparameter anfordern?
45
subhashlg26

Update 2017-04-05

Nach dem Start des neuen Application Load Balancer mit pfadbasierter Routing-Unterstützung im letzten Sommer (siehe vorheriges Update) hat AWS jetzt auch Folgendes hinzugefügt: Host-basierte Routing-Unterstützung für AWS Application Load Balancer :

[...] Sie können jetzt Application Load Balancer-Regeln erstellen, die eingehenden Datenverkehr basierend auf dem im Host -Header angegebenen Domänennamen weiterleiten. Anfragen an api.example.com können an eine Zielgruppe gesendet werden, Anfragen an mobile.example.com an einen anderen, und alle anderen (als Standardregel) können an einen dritten gesendet werden. Sie können auch Regeln erstellen, die hostbasiertes und pfadbasiertes Routing kombinieren. Auf diese Weise können Sie Anforderungen an api.example.com/production und api.example.com/sandbox weiterleiten zu bestimmten Zielgruppen.

Update 11.08.2016

AWS hat gerade (11. August 2016) einen neuen Application Load Balancer für den Elastic Load Balancing-Dienst eingeführt, der entwickelt wurde, um die Flexibilität und Leistung von Echtzeitanwendungen zu verbessern. Microservices, Container-basierte Architekturen und Streaming-Anwendungen :

Dieser neue Load Balancer , der auch das WebSocket-Protokoll und HTTP/2 unterstützt, wird auf der Anwendungsebene ausgeführt und bietet Unterstützung für inhaltsbasiertes Routing . Auf diese Weise kann der Application Load Balancer Anforderungen über mehrere Dienste oder Container weiterleiten, die auf einer oder mehreren Amazon Elastic Compute Cloud-Instanzen (Amazon EC2) ausgeführt werden. Auf diese Weise können Kosten gesenkt und die Serviceerkennung vereinfacht werden. [Hervorhebung von mir]

Wie im einleitenden Blogpost hervorgehoben, wird diese neue Application Load Balancer-Option für ELB [...] auf Layer 7 ausgeführt und unterstützt eine Reihe erweiterter Funktionen [whereras] des Die ursprüngliche Option (jetzt als Classic Load Balancer bezeichnet) steht Ihnen weiterhin zur Verfügung und bietet weiterhin Layer 4- und Layer 7-Funktionen .

Insbesondere unterstützt ELB jetzt das vorliegende Szenario, da Sie mit jedem Application Load Balancer bis zu 10 URL-basierte Regeln definieren können, um Anforderungen an Zielgruppen weiterzuleiten (AWS-Pläne , um Ihnen im Laufe der Zeit Zugriff auf andere Routing-Methoden zu geben .


Erstantwort

Dies ist nicht möglich - Amazon ELB hauptsächlich (aber siehe unten) bietet Transportschicht-Lastausgleich ( OSI Schicht 4) , der seine Lastausgleichsentscheidungen ausschließlich auf der TCP -Verbindung basiert, die Anwendungsnutzlast jedoch ignoriert. Letzteres würde Lastausgleich auf Anwendungsebene ( OSI Schicht 7) ermöglichen, wobei die Anwendungsnutzlast tatsächlich für die Lastausgleichsentscheidungen berücksichtigt wird .

Die Standardkonfiguration in Amazon ELB bietet grundlegende Unterstützung für HTTP/HTTPS/SSL auf Anwendungsebene (z. B. Beenden von SSL-Verbindungen und Einfügen von X-Forwarded-* -Headern). Sie können diese Konfiguration jedoch nicht anpassen. Anders ausgedrückt, ELB prüft hier tatsächlich die HTTP-Anforderung , aber Sie haben diesbezüglich keine Kontrolle über das ELB-Verhalten.

Dies wird ausführlicher in Auswählen von Listenern für Ihren Load Balancer , z.

Verwenden von TCP/SSL (Schicht 4) mit elastischem Lastausgleich

Wenn Sie TCP sowohl für Front-End- als auch für Back-End-Verbindungen verwenden, leitet Ihr Load Balancer die Anforderung an die Back-End-Instanzen weiter , ohne Änderungen an den Headern vorzunehmen . Diese Konfiguration fügt auch keine Cookies für die Sitzungshaftigkeit oder die X-Forwarded- * -Header ein.

[...]

Verwendung von HTTP/HTTPS (Layer 7) mit elastischem Lastausgleich

Wenn Sie HTTP (Schicht 7) für Front-End- und Back-End-Verbindungen verwenden, analysiert Ihr Load Balancer die Header in der Anforderung und beendet die Verbindung, bevor Sie die Anforderung erneut an den registrierten Benutzer senden Instanz (en) . Dies ist die Standardkonfiguration, die von Elastic Load Balancing bereitgestellt wird.

[Hervorhebung von mir]

Das Architectural Overview bietet eine Illustration und weitere Details.

53
Steffen Opel

Es ist Jahre her, seit Sie Ihre Frage veröffentlicht haben, aber Amazon hat kürzlich die Lastverteilungsfunktion für Anwendungen (Layer 7) angekündigt. Dies sollte das unterstützen, wonach Sie suchen. 

Grundsätzlich können Sie verschiedene Zielgruppen definieren, an die der Verkehr basierend auf einer "Regel" (z. B. einem URL-Pfadmuster) geleitet wird. Regeln können nach Bedarf priorisiert werden.

Details finden Sie unter https://aws.Amazon.com/elasticloadbalancing/applicationloadbalancer/

2
jstell

Hier ist eine mögliche Lösung, die ich gesehen habe. Es ist nicht so ideal wie die Verwendung von nativem Nginx Plus zum Lastenausgleich, aber wenn Sie ELB verwenden müssen, funktioniert es.

Stellen wir uns eine Architektur wie diese vor:

                        ELB
                         |
          Server 1    Server 2   Server...
          (Current)   (Current)  (Current)
              \           |         /
                      Server X
                      (Legacy)

Jeder der Server in der ersten Schicht führt die "aktuelle" Implementierung aus. Sie führen auch Nginx oder Apache als Webserver aus (dies ist im Allgemeinen eine bewährte Methode vor jeder Webanwendung, IMO) vor der Anwendungsebene.

Jede der Nginx/Apache-Konfigurationsdateien enthält eine Zeile, die auf den URL-Parameter hinweist, um darauf hinzuweisen, dass dies ein älterer Aufruf ist, der die Anforderung an Server X weiterleitet. Wenn es sich nicht um einen älteren Aufruf handelt, wird die Anfrage an die "aktuelle" App weitergeleitet.

Der Nachteil ist, dass Sie auf den aktuellen Servern einige Zyklen verwenden, um auf den Legacy-Server zu wechseln, aber Ihre Architektur ist recht einfach und Sie verfügen über einen zentralen Ablauf. 

0
mwielbut