StackOverflow / ServerFault에는 몇 개의 웹 서버가 있습니까?
대답이 '둘 이상'인 경우 DNS 폴링 중에 세션 고착 을 달성 합니까?
StackOverflow / ServerFault에는 몇 개의 웹 서버가 있습니까?
대답이 '둘 이상'인 경우 DNS 폴링 중에 세션 고착 을 달성 합니까?
답변:
대규모 웹 사이트는 여러 컴퓨터에서 "로드 밸런싱"될 수 있습니다. 많은로드 밸런싱 설정에서 사용자는 세션 중에 백엔드 머신 중 하나를 칠 수 있습니다. 이로 인해 많은 시스템이 사용자 세션을 공유 할 수있는 여러 가지 방법이 있습니다.
선택한 방법은 채택 된로드 밸런싱 스타일과 백엔드 스토리지의 가용성 / 용량에 따라 다릅니다.
쿠키에만 저장된 세션 정보 : 세션 식별자 (세션 식별자가 아닌)는 사용자 쿠키에 저장됩니다. 예를 들어, 사용자 쿠키에는 장바구니 내용이 포함될 수 있습니다. 사용자가 세션 데이터를 무단 변경하는 것을 방지하기 위해 쿠키와 함께 HMAC가 제공 될 수 있습니다. 이 방법은 대부분의 응용 프로그램에 가장 적합하지 않을 수 있습니다.
로드 밸런서는 항상 사용자를 동일한 머신으로 안내합니다 . 많은로드 밸런서는 사용자가 요청하는 백엔드 머신을 나타내는 자체 세션 쿠키를 설정하여 나중에 해당 머신으로 보낼 수 있습니다. 사용자는 항상 같은 컴퓨터로 연결되므로 여러 컴퓨터 간의 세션 공유가 필요하지 않습니다. 일부 상황에서는 유용 할 수 있습니다.
공유 백엔드 데이터베이스 또는 키 / 값 저장소 : 세션 정보는 모든 웹 서버가 쿼리 및 업데이트에 액세스 할 수있는 백엔드 데이터베이스에 저장됩니다. 사용자의 브라우저는 세션 정보를 가리키는 식별자 (예 : 세션 ID)를 포함하는 쿠키를 저장합니다. 이것은 아마도 세 가지 중 가장 깨끗한 방법 일 것입니다.
전반적으로 대부분의 동적 웹 응용 프로그램은 여러 데이터베이스 쿼리 또는 키 / 값 저장소 요청을 수행하므로 데이터베이스 또는 키 / 값 저장소는 세션 데이터의 논리적 저장소 위치입니다.
여러 프런트 엔드 웹 서버에서 세션을 유지 관리하는 방법에 대한 질문은 대개 중앙 집중식 데이터베이스를 사용하는 것입니다. 로컬 파일 시스템에서 세션 파일을 추적하기 위해 웹 서버 인스턴스에 의존하는 대신 세션 ID와 데이터를 중앙 DB에 작성하면 모든 웹 서버가 대신 해당 데이터를 검색합니다.
@David Pashley가 언급하지 않은 nemcached를 사용하는 것이 좋은 해결책 인 것 같습니다.
이는 모든 서버가 원격 memcached 인스턴스를 공유하고 자체 세션 핸들러를 제공하는 memcache PECL 확장을 사용함을 의미합니다.
PHP 설정에서 두 개의 매개 변수 만 변경하면됩니다!
다음은 좋은 튜토리얼입니다. http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
IIRC, DotNetRocks # 440에서 그들은 한 서버 기간을 말했다. 여전히 그런지 모르겠다.
편집 : 실제로 Hanselminutes # 134 였습니다. 죄송합니다.
a) 세션 정보를 사용자 쿠키에 저장할 수 있습니다. 서버 측에 데이터는 저장하지 않지만 세션 상태는 유지하는 상태 비 저장 강화 쿠키 ( http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf)를 참조하십시오 . b) 세션 백엔드 스토리지를 데이터베이스 또는 memcached로 변경할 수 있습니다. 단일 실패 지점을 제거하기 위해 데이터베이스 복제 또는 여러 memcached 노드를 설정할 수 있습니다. memcached는 세션에서 사용자 상태를 잃는 것이 큰 오류가 아니며 그를 불행하게 만들지 않는 설정에서 권장됩니다. 보존 상태가 중요한 경우 데이터베이스를 사용하십시오. PHP, Django 및 Rails를 통해 개발자는 사용자 정의 세션 백엔드를 작성할 수 있습니다.