2009-10-12 5 views
42

높은 확장성에 대한 한 가지 접근 방법은 네트워크 부하 분산을 사용하여 여러 서버간에 처리 부하를 분산시키는 것입니다.끈끈한 세션/세션의 장점과 단점 친밀로드 blancing 전략?

이 접근 방식이 제시하는 한 가지 도전 과제는 서버가 상태를 인식하고 "세션"에 사용자 상태를 저장하는 것입니다.

이 문제에 대한 한 가지 해결책은 각 사용자가 단일 서버에 할당되고 세션 기간 동안 자신의 상태 데이터가 해당 서버에 독점적으로 포함되어있는 "고정 세션"(일명 "세션 선호도")입니다.

"끈끈한 세션"접근 방식의 장단점은 무엇입니까? 당신이 그것을 사용합니까, 그렇다면 당신은 그것에 만족합니까?

답변

60

장점 :

  • 에는 응용 프로그램의 변경이 필요하지 easy--이 있습니다.
  • 더 나은 지역 RAM 캐시를 사용합니다 (예를 들어, 한 번 사용자 프로필, 캐시 그것을보고, 동일한 사용자 후속 방문을 다시 사용할 수 있습니다)

단점 :

  • 은 if 서버가 다운되면 세션이 손실됩니다. (이것은 끈적 세션이 아닌 웹 서버에 세션 정보를 로컬에 저장하는 것임을 기억하십시오). 세션에서 무엇이 세션 (예 : 이메일 초안) 또는 사이트 (예 : 장바구니)에 중요하면 서버 중 하나를 잃어 버리면 매우 고통 스러울 수 있습니다.
  • 로드 밸런서의 "고정"구현에 따라 일부 서버와 다른 서버에 균등하지 않은로드가 발생할 수 있습니다.
  • 새 서버를 온라인으로 가져 오더라도 새 서버에 많은 부하가 발생하지 않습니다. 스파이크를 처리하기 위해로드 밸런싱 시스템을 사용하면 끈적 거리기 때문에 스파이크에 신속하게 대응할 수 없습니다. 즉, 이것은 다소 복잡한 경우이며 실제로는 매우 크고 정교한 사이트에만 적용됩니다.
  • 사용자가 비교적 적지 만 트래픽이 단일 사용자 일 경우 (예 : SSL, AJAX, 동적 생성 이미지, 동적 압축 등의 복잡한 페이지) 사용자가 응답을받지 못하면 스틱이 최종 사용자의 응답 시간에 해를 줄 수 있습니다. 단일 사용자의로드를 서버 전체에 균등하게 분산시키지 않습니다. 동시 사용자가 많은 경우 모든 서버가 침수 될 것이므로 이것은 문제가 아닙니다!

그러나 서버 로컬 세션 상태를 사용해야하는 경우 고정 세션이 반드시 있어야하며 서버 로컬 세션 상태를 사용하지 않더라도 캐시 활용에 관해서는 끈적임이 있습니다 (위 참조). 단일 세션에서 IP 주소가 변경 될 수 있으므로 (예 : 유선 및 무선 네트워크간에 랩톱 도킹)로드 밸런서는 끈적 거리기를 결정하기 위해 HTTP 쿠키 (IP 주소뿐만 아니라)를 볼 수 있어야합니다.

웹 서버에서 세션 상태를 전혀 사용하지 마십시오. 세션 상태가 손실 될 수 있으면 (예 : 쇼핑 카트) 중앙 데이터베이스에 저장하고 이전 세션을 정기적으로 지 웁니다. 세션 상태가 중요하지 않은 경우 (예 : 사용자 이름/아바타 URL) 쿠키에 스틱을 넣어 쿠키에 너무 많은 데이터를 넣지 않도록하십시오.

최신 버전의 Rails는 기본적으로 위의 이유로 쿠키에 세션 변수를 저장합니다. 다른 웹 프레임 워크에는 "쿠키에 저장"및/또는 "DB에 저장"옵션이있을 수 있습니다.

+1

좋은 anwsers! "로드 밸런서가 HTTP 쿠키 (IP 주소뿐만 아니라)를 볼 수 있어야합니다"에 대해 조금 더 설명해 주시겠습니까? 부하 분산 장치가 동일한 사용자인지 어떻게 알 수 있습니까? – Jaskey

+0

웹 응용 프로그램은 일반적으로 클라이언트가 다른 HTTP 요청을 반환 할 때 서버가 동일한 사용자 또는 세션을 인식 할 수 있도록 쿠키를 클라이언트에 보냅니다. 일부로드 밸런서는 HTTP 쿠키 헤더를 조사하여 사용자를 식별 할 수 있으며 IP 주소 대신 해당 쿠키 값을 사용하여 요청을받을 서버를 결정할 수 있습니다. –

+0

상태를 db/memcache에 저장하면 응용 프로그램이 무 상태라고 생각할 수 있습니다. 일부 사람들은 상태 비 저장 응용 프로그램을 만들기 위해 클라이언트에서 상태를 유지해야한다고 말합니다. – Jaskey