# Sessionhandling bei Loadbalancer



## akchill (25. Aug 2011)

Hallo, 

ich habe eine Applikation erstellt das aus der Datenbank Bilder lädt und diese im Frontend anzeigt. Diese werden dann zum versenden von Grüße benutzt. (Grusskartenservice)

Das Problem jetzt ist das die Server durch einen Loadbalancer konfiguriert sind(insgesamt 3).

Mein problem liegt darin das wenn ich die Applikation verwenden will funktioniert es, beim zweiten mal auch, beim dritten mal zeigt er mir keine Bilder an. Beim vierten mal geht wieder alles usw.

Jetzt komme ich einfach nicht weiter .... ich find das problem nicht. 

Das BackEndBean ist als Sessionbean deklariert in der faces-config. es handelt sich um jsf 1.2 

vllt kann mir jemand ja helfen falls ihr noch mehr infos braucht gern. 

Grüße. und schonmal danke!


----------



## nillehammer (25. Aug 2011)

Alles, was in der Session abgelegt wird muss über das Netzwerk im Cluster synchronisiert werden. Damit das funktioniert, muss das Serializable Interface implementiert werden. Bei "normalen" Objekten ist das i.d.R. kein großer Akt. Bei Objekten, die Daten enthalten, die von sich aus nicht Serializable sind, muss man Java sagen, wie es diese Objekte doch serialisieren und deserialisieren kann. Das macht man in den Methoden

```
private void writeObject(ObjectOutputStream out)
private void readObject(ObjectInputStream in)
```
Hier gibt es nähere Infos zu dem Thema: Discover the secrets of the Java Serialization API


----------



## mjustin (31. Aug 2011)

Welcher Server ist es? Es klingt als ob nur zwei der drei Server funktionieren und der dritte im Cluster nicht, und eine Round Robin Verteilung (Server 1 - 2 - 3 - 1 - 2 -3 ...) verwendet wird.


----------



## sence (31. Aug 2011)

soweit ich denke, sollte der User immer am selben Server bleiben, neue requests sollten dann durch den LB verteilt werden.
Problem würde ich darin sehen, dass wie schon gesagt alle Daten der Session zwischen allen Servern syncron sein müssen.

verwende: last used Connection


----------



## mjustin (31. Aug 2011)

"Sticky Sessions" (auch als "Session Affinity" bekannt) ist erforderlich, damit die Sessiondaten nicht ständig zwischen den Servern ausgetauscht werden müssen. Probleme können z.B. entstehen, wenn ein vorgeschalteter Loadbalancer nicht erkennt, welche Request zur gleichen Session gehören. Apache mod_proxy und mod_proxy_balancer sind z.B. für Sticky Sessions geeignet.


----------



## vladimir75 (1. Sep 2011)

> Layer3-Loadbalancing ist nicht geeignet, wenn Sessions nicht protokollübergreifend verwaltet werden können. So ist z.B. ein Wechsel der Verbindung von HTTP zu HTTPS nicht möglich. Prinzipiell lassen sich mit dieser Variante aber auch andere Protokolle wie SMTP, POP3 und weitere (kein FTP) auf mehrere Systeme verteilen.



Layer3-Loadbalancing



> Der Vorteil beim Layer7-Loadbalancing liegt darin, dass beispielsweise auch Cookies oder Login-Strings erkannt werden. Eine einmal erkannte Session kann in der Folge immer an den gleichen Webserver geleitet werden. Ebenso ist hier ein Wechsel zwischen verschiedenen Protokollen möglich, beispielsweise ein Wechsel von HTTP zu HTTPS unter Verwendung der gleichen Session und unter Beibehaltung des Backend-Systems.



Layer7-Loadbalancing

Und zu Sticky Sessions findest du bei google auch reichlich Infos:

Sticky session - Tomcat Worker mit Apache mod_jk load balancer

Vladimir


----------

