
Ich habe eine Webanwendung, die auf mehreren Servern ausgeführt werden soll. Ich möchte sicherstellen, dass Anfragen mit derselben Sitzung (HTTP-Cookie-Header mit dem Wert JSESSIONID=x) immer mit demselben Server kommunizieren. Das heißt, bis die Sitzung unter bestimmten Umständen auf einen anderen Server „verschoben“ wird (nicht nur, wenn der Server ausfällt, sondern auch aufgrund einiger Caching- und Leistungsstrategien auf der Serverseite).
Meine Web-App funktioniert gut mit diesem Szenario, aber welche Art vonLastenausgleichersollte ich verwenden? Natürlich könnte ich die Last auf Anwendungsebene ausgleichen, aber ich suche nach etwas Effizienterem. Vielleicht spezielle Hardware (vielleicht auch nicht)? Ich kann nicht viel Geld ausgeben ...
Aktualisieren
Vielen Dank für eure Antworten bisher: Ich habe jetzt herausgefunden, dassPfundUndHAProxykann so konfiguriert werden, dass nach bestimmten Cookies gesucht wird. Ich konnte noch nicht herausfinden, ob sie auch eine dynamische Aktualisierung der Zuordnung ermöglichen (wenn die Sitzung auf einen anderen App-Server „verschoben“ wird)?
Und gibt es (preiswerte) Hardwarelösungen, die das auch können? (Würde das weniger kosten als ein zusätzlicher Load-Balancing-Server?)
Antwort1
Mit "Sticky (persistente) Sitzungen" wird im Allgemeinen nicht empfohlen. Wenn Sie dies tun, verlieren Sie viele Vorteile des Lastenausgleichs. Die Last wird nicht ausgeglichen und Sie verlieren die hohe Verfügbarkeit, da bestimmte Clients im Fehlerfall nicht auf Ihre Anwendung zugreifen können.
Sie möchten, dass Ihre Sitzung dynamisch ist. Bei Java wird sie normalerweise im Speicher gespeichert und per Multicast an alle Server weitergeleitet. In der Regel wird die Sitzung in einer Datenbank gespeichert.
Wenn Ihre Webanwendung Sticky Sessions erfordert, muss Ihre Architektur möglicherweise verbessert werden.
Was Load Balancer-Lösungen betrifft, gibt es viele da draußen und das Thema wurde hier ausführlich behandelt. Ich magICH GEGENAndere mögennginx. Gießerei-Netzwerke, das von Brocade übernommen wurde, stellt einige solide kommerzielle Produkte her. Sie sind die wichtigste kommerzielle Lösung für Hardware-Load Balancer. Barrakudaverfügt auch über eine Linux/OSS-basierte „Appliance“, die zum Lastenausgleich verwendet werden kann.
Antwort2
Dann gibt es hier ein paar Lösungen für Sie.
Schreiben Sie eine Methode zum Speichern von Sitzungen, die eine Datenbank zum Speichern von Sitzungsinformationen verwendet. Wenn diese auf mehreren Servern liegt, können Sie die Datenbank clustern. Es hängt wirklich davon ab, wie Sie die Dinge organisieren möchten. Eine andere Idee ist, einen Server mit Memcache hinter den Webservern zu verwenden und die Sitzungen dort zu speichern.
Auf diese Weise haben Sie Sitzungen an einem einzigen Ort und es spielt keine Rolle mehr, auf welchen Webserver der Client weitergeleitet wird.
Antwort3
Antwort4
POUND - REVERSE-PROXY UND LOAD-BALANCER
Das Pound-Programm ist ein Reverse-Proxy, ein Load Balancer und ein HTTPS-Frontend für Webserver. Pound wurde entwickelt, um die Lastverteilung auf mehrere Webserver zu ermöglichen und einen praktischen SSL-Wrapper für Webserver bereitzustellen, die dies nicht nativ anbieten. Pound wird unter der GPL vertrieben – keine Garantie, es kann kostenlos verwendet, kopiert und weitergegeben werden.
Das könnte Sie interessieren