Ich habe derzeit meine Webanwendung auf AWS gehostet, und ich verwende zwei ELB-Instanzen, eine zum Lastenausgleich der Frontend-Anforderungen an die App-Server, und eine zweite zum Lastenausgleich der Backend-Anforderungen von den App-Servern zu den API-Servern so (sorry für das crappy ascii-Diagramm):Können AWS ELB-Sticky-Sitzungen für Back-End-Anfragen verwendet werden?
/-->APP1--\ /-->API1
User-->ELB1 ELB2
\-->APP2--/ \-->API2
Mit anderen Worten, dass die API-Anfragen der APP-Server macht, sind Last gleichmäßig über den beide Backend-API-Server ausgeglichen.
Da ich jedoch Antworten auf den API-Servern zwischenspeichern und einen Cache-Invalidierungsmechanismus verwenden, der NICHT zwischen den API-Servern freigegeben ist, möchte ich, dass die Sitzung eines Benutzers an einen Backend-API-Server gebunden wird.
Ich habe bereits die Sitzung des Benutzers an einen APP-Server gebunden, mit der normalen ELB Load Balancer-generierten Cookie-Stickiness, aber gibt es eine Möglichkeit, das Back-End-ELB an einer Sitzung festhalten? Natürlich kommen diese Anfragen nicht von einem Browser, also gibt es nichts, um Cookies zu verwalten, und es scheint, dass ELBs nur die Klebrigkeit mit Cookies verwalten können. Kann ich die notwendigen Cookies meiner Backend-Anfragen emulieren?
Es erwies sich als ziemlich einfach. Ich erfasse nur den Antwortkopf "Set-Cookie" und speichere jeden AWSELB-Cookie, den ich erhalte, und sende den Cookie dann in nachfolgenden Anfragen. Die APP-Sitzung ist jetzt an eine API-Instanz gebunden. – SilentMiles
Aber nur ein Wort der Vorsicht: Wenn Sie eine kleine Anzahl von Front-End/Back-End-Servern haben, ist es möglich, dass alle Front-End-Server nur an einen oder nur wenige Back-End-Server hängen bleiben. Mit anderen Worten, diese Methode reduziert die Fähigkeit des Load-Balancers, Lasten dynamisch auszugleichen. – SilentMiles
Dies ist in der Dokumentation klar umrissen. Klebrige Sitzungen behindern die Skalierbarkeit erheblich. – mickzer