2012-05-08 14 views
135

Chcę poznać różnicę między sesjami lepkimi i nielepkimi. Co zrozumiałam po przeczytaniu z Internetu:Sesje Sticky i Non-Sticky

Przyklejony: pojawi się tylko jeden obiekt sesji.

nielepiący sesja: Sesja obiektu dla każdego węzła serwera

Odpowiedz

411

Gdy strona jest obsługiwane przez tylko 1 web server, dla każdej pary, obiekt sesji tworzony jest i pozostaje w pamięci serwera. Wszystkie żądania od klienta przechodzą na ten serwer sieciowy i aktualizują ten obiekt sesji. Jeśli niektóre dane muszą być przechowywane w obiekcie sesji w okresie interakcji, są przechowywane w tym obiekcie sesji i pozostają tam tak długo, jak długo sesja istnieje.

Jeśli jednak Twoja strona internetowa obsługiwana jest przez multiple web servers, która jest obsługiwana przez load balancer, moduł równoważenia obciążenia decyduje, który faktyczny (fizyczny) serwer WWW powinien przejść do każdego żądania. Na przykład, jeśli za równoważnikiem obciążenia znajdują się 3 serwery internetowe A, B i C, możliwe jest, że witryna www.mywebsite.com/index.jsp jest obsługiwana z serwera A, witryna www.mywebsite.com/login.jsp jest obsługiwana z serwera B i www.mywebsite.com/accoutdetails.php są obsługiwane z serwera C.

Teraz, jeśli żądania są obsługiwane z (fizycznie) 3 różnych serwerów, każdy serwer utworzył obiekt sesji dla ciebie i ponieważ ta sesja obiekty siedzą na 3 niezależnych skrzynkach, nie ma bezpośredniego sposobu na to, aby wiedzieć, co jest w obiekcie sesji drugiego. Aby zsynchronizować te sesje serwera, konieczne może być zapisanie/odczytanie danych sesji w warstwie wspólnej dla wszystkich - np. DB. Teraz zapisywanie i odczytywanie danych do/z bazy danych dla tego przypadku użycia może nie być dobrym pomysłem. Teraz przychodzi rola sesji klejącej. Jeśli instrukcja load balancer zostanie poproszona o użycie sesji lepkich, wszystkie interakcje pojawią się z the same physical server, nawet jeśli obecne są inne serwery. W ten sposób obiekt sesji będzie taki sam podczas całej interakcji z tą witryną.

Podsumowując, w przypadku sesji lepkich wszystkie twoje żądania będą kierowane do tego samego fizycznego serwera internetowego, podczas gdy w przypadku nielepnego loadbalancera można wybrać dowolny serwer WWW, który będzie obsługiwał twoje żądania.

Jako przykład, można przeczytać o Elastic równoważenia obciążenia Amazona i sesjach lepkich tutaj: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@ TJ- co się stanie, jeśli jeden węzeł będzie niedostępny? – gstackoverflow

+8

W większości przypadków sesja zostanie utracona. W przypadku [AWS ESB] (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html) _Jeśli wystąpienie nie powiedzie się lub stanie się niezdrowe, moduł równoważący obciążenie przerywa żądanie kierowania do tego instancja zamiast tego wybiera nową, zdrową instancję opartą na istniejącym algorytmie równoważenia obciążenia. System równoważenia obciążenia traktuje sesję jako "zablokowaną" dla nowej, zdrowej instancji i kontynuuje wysyłanie żądań do tej instancji, nawet jeśli nieudane wystąpienie wróci. –

+1

Według jakich informacji LoadBalancer sprawia, że ​​sesja HTTP jest lepka? Zwłaszcza w przypadku połączeń HTTPS ten problem staje się interesujący. Czy karmisz LB kluczem prywatnym serwerów sieciowych, aby mógł rozdzielić połączenie SSL i pobrać sesję HTTP? A może LB korzysta po prostu z adresu IP klienta? W takim przypadku, co z serwerem proxy, na którym wielu klientów używa tego samego adresu IP? Albo jeszcze gorzej, klienci mobilni, gdzie adres IP często się zmienia? A może jest nawet lepsza technika? Dzięki – g000ze

32

Zrobiłem odpowiedź z trochę więcej szczegółów tutaj: https://stackoverflow.com/a/11045462/592477

Albo można go odczytać tam ==>

Podczas korzystania z loadbalancingu oznacza to, że masz kilka instancji tomcat i musisz podzielić obciążenia.

  • Jeśli używasz replikacji sesji bez lepkiej sesji: Wyobraź sobie, że za pomocą aplikacji internetowej tylko jeden użytkownik, i masz 3 instancji Tomcat. Ten użytkownik wysyła kilka żądań do aplikacji, następnie loadbalancer wyśle ​​niektóre z tych żądań do pierwszej instancji tomcat i wyśle ​​inne z tych żądań do drugiej instancji , a drugą do trzeciej.
  • Jeśli używasz lepszej sesji bez replikacji: Wyobraź sobie, że masz tylko jednego użytkownika korzystającego z Twojej aplikacji internetowej i masz 3 instancje tomcat . Ten użytkownik wysyła kilka żądań do aplikacji, a następnie moduł ładujący obciążenia wyśle ​​pierwsze żądanie użytkownika do jednej z trzech instancji tomcat , a wszystkie inne żądania wysłane przez tego użytkownika podczas jego sesji zostaną wysłane do tego samego tomcat instancja. Podczas tych żądań, jeśli zamkniesz lub zrestartujesz tę instancję tomcat (używana instancja tomcat), loadbalancer wysyła pozostałe żądania do jeszcze jednej instancji tomcat, która wciąż jest , ale jeśli nie używasz replikacji sesji, instancja tomcat, który odbiera pozostałe żądania, nie ma kopii sesji użytkownika, a następnie dla tego tomcat użytkownik rozpoczyna sesję: użytkownik traci swoją sesję i jest odłączony od aplikacji internetowej, mimo że aplikacja internetowa nadal działa .
  • Jeśli używasz lepszej sesji Z replikacją sesji: Wyobraź sobie, że masz tylko jednego użytkownika, który korzysta z Twojej aplikacji internetowej i masz 3 instancje tomcat . Ten użytkownik wysyła kilka żądań do aplikacji, a następnie moduł ładujący obciążenia wyśle ​​pierwsze żądanie użytkownika do jednej z trzech instancji tomcat , a wszystkie inne żądania wysłane przez tego użytkownika podczas jego sesji zostaną wysłane do tego samego tomcat instancja. Podczas tych wniosków, jeżeli zamknięcie lub ponowne uruchomienie tej instancji tomcat (kocur instancji, który jest używany) loadbalancer wysyła pozostałych żądań do jednego innego tomcat przykład, który jest nadal działa, jak użyć replikacji sesji instancji tomcat który odbiera pozostałe żądania ma kopię sesji użytkownika, a następnie użytkownik kontynuuje swoją sesję: użytkownik kontynuuje przeglądanie aplikacji internetowej bez rozłączania, zamknięcie instancji tomcat nie ma wpływu na nawigację użytkownika.