2012-05-08 3 views
135

고정 세션과 비 고정 세션의 차이점을 알고 싶습니다. 인터넷에서 읽은 후 내가 이해 한 내용 : 단일 세션 개체 만 제공됩니다.고정 및 비 고정 세션

sticky :

비 끈적 세션 : 귀하의 웹 사이트는 각 쌍에 대해, 단지 1 web server에 의해 제공되는 각 서버 노드

답변

411

를위한 세션 객체는 세션 객체가 생성되어 웹 서버의 메모리에 유지됩니다. 클라이언트의 모든 요청은이 웹 서버로 이동하여이 세션 개체를 업데이트합니다. 일부 데이터는 상호 작용 기간 동안 세션 객체에 저장해야하는 경우이 세션 객체에 저장되며 세션이 존재하는 한 거기에 머물러 있습니다.

그러나 웹 사이트가 load balancer 뒤에있는 multiple web servers에 의해 제공되는 경우로드 밸런서는 요청할 실제 (실제) 웹 서버를 결정합니다. 예를 들어로드 밸런서 뒤에 3 개의 웹 서버 A, B 및 C가있는 경우 www.mywebsite.com/index.jsp가 서버 A에서 제공되고 www.mywebsite.com/login.jsp가 서버에서 제공 될 수 있습니다 B 및 www.mywebsite.com/accoutdetails.php가 서버 C에서 제공됩니다.

이제 요청이 (물리적으로) 3 개의 서로 다른 서버에서 제공되는 경우 각 서버가 세션 객체를 생성했으며이 세션 객체는 3 개의 독립된 상자에 있고, 다른 객체의 세션 객체에는 무엇이 있는지를 알 수있는 직접적인 방법이 없습니다. 이러한 서버 세션을 동기화하려면 세션 데이터를 모든 사람에게 공통적 인 레이어 (예 : DB)로 쓰거나 읽어야합니다. 이 유스 케이스에서 DB를 쓰거나 읽는 것은 좋은 생각이 아니다. 자, 여기 sticky-session의 역할이 있습니다. load balancer에 고정 세션을 사용하도록 지시하면 다른 서버가 있더라도 모든 상호 작용은 the same physical server으로 발생합니다. 따라서 세션 객체는이 웹 사이트와의 전체 상호 작용을 통해 동일하게됩니다.

요약하면 끈끈한 세션의 경우 모든 요청은 동일한 물리적 웹 서버로 보내지 만 끈적이지 않은로드 밸런서의 경우 요청을 처리 할 웹 서버를 선택할 수 있습니다. 예를 들어

, 여기 아마존의 엘라스틱로드 밸런서와 끈적 끈적한 세션에 대한 읽을 수는 : http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@ TJ- 하나의 노드를 사용할 수없는 경우 어떻게됩니까? – gstackoverflow

+8

대부분의 경우 세션이 손실됩니다. [AWS ESB] (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html) _ 인스턴스가 실패하거나 건강에 해롭다면로드 밸런서는 예를 들어, 기존의로드 밸런싱 알고리즘을 기반으로 새로운 정상 인스턴스를 선택합니다. 로드 밸런서는 세션을 현재 상태가 양호한 새 인스턴스로 "처리"한 것으로 간주하고 실패한 인스턴스가 돌아 오더라도 요청을 해당 인스턴스로 계속 라우팅합니다. _ –

+1

LoadBalancer가 어떤 정보를 사용하여 HTTP 세션을 고정되게합니까? 특히 HTTPS 연결에서이 문제는 흥미로워집니다. LB에 웹 서버 비공개 키를 제공하여 SSL 연결을 끊고 HTTP 세션을 가져올 수 있습니까? 아니면 LB는 단순히 클라이언트 IP 주소를 사용합니까? 이 경우 여러 클라이언트가 동일한 IP 주소를 사용하는 프록시 서버는 어떻게됩니까? 아니면 IP 주소가 자주 바뀌는 모바일 클라이언트가 더 까다 롭습니다. 아니면 더 나은 기술이 있습니까? 고마워요 – g000ze

32

내가 여기에 좀 더 세부 사항에 대한 답변을했습니다 : https://stackoverflow.com/a/11045462/592477

또는 당신이 그것을 읽을 수 ==>

로드 밸런싱을 사용하는 경우 몇 가지 인스턴스 인 tomcat이 있고로드를 나눌 필요가 있음을 의미합니다.

  • 당신이 끈적 세션없이 세션 복제를 사용하는 경우 :는 웹 응용 프로그램을 사용하여 한 명의 사용자 만이 상상, 당신은 3 개 바람둥이 인스턴스가 있습니다. 이 사용자는 앱에 여러 개의 요청을 보내면 로드 밸런서가 이러한 요청 중 일부를 첫 번째 톰캣 인스턴스로 보내고 다른 요청을 두 번째 서버 인 인스턴스로 보내고 다른 요청은 세 번째 서버로 보냅니다.
  • 복제없이 sticky 세션을 사용하는 경우 : 웹 응용 프로그램을 사용하는 사용자가 한 명뿐이고 tomcat 인스턴스가 3 개 있다고 가정합니다. 이 사용자가 앱에 여러 요청을 보내면 로드 밸런서가 tomcat 인스턴스 중 하나에 첫 번째 사용자 요청을 보내고 그의 세션 중에이 사용자가 보낸 다른 모든 요청은 동일한 바람둥이로 전송됩니다 예. 이러한 요청 중에이 tomcat 인스턴스 (사용되는 tomcat 인스턴스)를 종료하거나 다시 시작하면로드 밸런서가 나머지 요청을 다른 하나의 다른 tomcat 인스턴스 (여전히 )로 보냅니다.하지만 세션 복제를 사용하지 않는 경우 인스턴스 남은 요청을받는 tomcat이 의 복사본을 가지고 있지 않습니다. 사용자가이 Tomcat에 대해 세션을 시작합니다. 사용자가 세션을 풀고 웹 응용 프로그램과의 연결이 끊어졌습니다. 웹 앱이 아직 실행 중입니다. .
  • 세션 첨부 끈적 세션을 사용하는 경우 : 웹 응용 프로그램을 사용하는 사용자가 한 명뿐이고 tomcat 인스턴스가 3 개 있다고 가정합니다. 이 사용자가 앱에 여러 요청을 보내면 로드 밸런서가 tomcat 인스턴스 중 하나에 첫 번째 사용자 요청을 보내고 그의 세션 중에이 사용자가 보낸 다른 모든 요청은 동일한 바람둥이로 전송됩니다 예. 이 요청 중에이 tomcat 인스턴스 (사용되는 tomcat 인스턴스)를 종료하거나 다시 시작하면로드 밸런서는 나머지 요청을 다른실행중인 다른 tomcat 인스턴스로 보내고 세션 복제를 사용하면 tomcat 인스턴스 남은 요청을 받으면 사용자 세션 사본을 가지고 있습니다. 사용자는 자신의 세션을 계속 유지합니다. 사용자는 연결 해제되지 않고 앱을 계속 탐색하며 tomcat 인스턴스 의 종료는 사용자 탐색에 영향을주지 않습니다.