2016-04-21 11 views
0

Ich habe 2 Tomcats arbeiten in der Loadbalancing mit sticky_sessions = falsch. Also brauche ich "Session persistance" über die Tomcats. Tomcat Dokumentation sagt, es gibt 3 Möglichkeiten:Tomcat PersistanceManager

  1. Tomcat Clustering
  2. Persistance-Manager + Geteilt Dir
  3. Persistance-Manager + SQL Speicher

Clustering passt mir nicht, denn in der Dokumentation es ist geschrieben, dass klebrige_sessions zu konfigurieren sollte wahr sein.

Ich versuchte Persistance Manager, aber es sieht aus wie es auch nicht funktioniert, da es Sitzung nur nach einer gewissen Zeitüberschreitung persistiert, also mit sticky_session = false es nicht funktioniert.

Kann Persistance Manager Sitzungen sofort fortsetzen?

Ich habe über Memcached-Session-Manager gelesen, aber es sieht aus wie 3D-Party-Lösung, so dass ich Angst habe, es zu verwenden. Ist es die einzige Lösung?

+0

Was ist das Problem mit klebrigen Sitzungen? –

+0

Wenn wir alles implementiert haben, um einen echten Lastenausgleich zu unterstützen, warum sollten wir sticky_sessions verwenden und immer den 1 Server für dieselbe Sitzung treffen? –

+0

Darüber hinaus brauchen wir mit sticky_session = true kein Clustering oder Session-Replikationen, da es nur einige Vorteile bei Tomcat-Stopp oder Tomcat-Fehler bringt. –

Antwort

0

Sie nicht brauchen Sitzung Persistenz; Sie können es auch mit Clustering tun. Sticky-Sessions sind im Allgemeinen eine gute Idee, weil sie viele mögliche Race Conditions (oder alternativ Performance-Probleme) beheben.

Sie können Clustering ohne Sticky-Sitzungen aktivieren. Aber wahrscheinlich möchten Sie Stick-Sitzungen mit Clustering verwenden, es sei denn, es gibt einen zwingenden Grund, sie zu deaktivieren. (Denken Sie daran, Fail-Over wird weiterhin bei aktivierten Sticky-Sitzungen auftreten.)

Das Problem mit der PersistentManager ist, dass Sie nicht garantieren können, dass die Sitzungen im Laden rechtzeitig aktualisiert werden. Sehen Sie sich das maxIdleBackup Konfigurationsattribut für Ihre PersistentManager an. Es kann Ihnen Hinweise geben, wie Sie die Persistenz einstellen können.

PersistentManager ist wirklich da, um ein anderes Problem zu lösen: die Handhabung einer großen Anzahl von langlebigen Sitzungen mit begrenztem Speicher. Denken Sie daran, etwas wie Amazon.com zu verwenden, wo sie sich erinnern, was Sie in Ihrem "Einkaufswagen" seit Wochen und Wochen haben. Sie könnten dies auf eine faule Art und Weise tun, indem der in der Sitzung gespeicherte "Warenkorb" in einer Datenbank oder Datei gespeichert wird.

Wenn Sie Sitzungen wirklich über mehrere Server hinweg teilen möchten, ist Clustering die beste Option. Es gibt einige great presentations auf der Tomcat-Website, die Clustering abdecken.

+0

Das Problem 1) Tomcat Dokumentation sagt "Stellen Sie sicher, dass Ihr Loadbalancer für sticky Sitzungsmodus konfiguriert ist.", Und nicht sagen, wie "sticky_session = false" mit synchronem Clustering konfigurieren. Es sieht also so aus, als ob es offiziell nicht unterstützt wird. 2) Mit sticky_session = true brauchen wir nicht all diese Komplexität, es ist in Ordnung, die Sitzung zu verlieren, wenn einer der Server in unserem Anwendungsfall fehlgeschlagen ist. –

+0

Wenn es in Ordnung ist, eine Sitzung zu verlieren, wenn einer der Server ausfällt, dann brauchen Sie überhaupt kein Clustering *. Es ist mir nicht klar, ob es für Ihre Benutzer in Ordnung ist, ihre Sitzungen zu verlieren.Wie gesagt, klebrige Sitzungen reduzieren die Wahrscheinlichkeit von Race-Conditions, bei denen Ihr Benutzer Anfragen an beliebige Server sendet, bevor die Sitzungsinformationen im gesamten Cluster aktualisiert werden können. –

+0

Für Benutzer meiner Anwendung ist es nicht in Ordnung, jede Sitzung Sitzung zu verlieren, aber es ist tolerant für einige Fehler (Hardware fehlgeschlagen, Tomcat fehlgeschlagen). Race-Bedingungen treten nur bei der asynchronen Sitzungsreplikation auf, da ich synchrone Sitzungsreplikation (oder Clustering) benötige. Das Problem Tomcat Dokumentation sagt nicht, wie man es synchron konfiguriert. –